ただつらつらと日記が書かれていくようです。

カテゴリー: ITめいたこと (30ページ目 (31ページ中))

ケースファンの効果

最近、CrystalMark DiskInfoでHDDの温度を見たときに、結構高めになっているマシン(ケースはATXで、CPUは古めのAthron XP)があった。搭載しているHDDは2台で、いずれも古めのIDEドライブ(MaxtorのDiamondMax16と、HGSTのDeskstar 7K250)ということもあったが、それぞれ43度と44度になっており、多少暖房が効いている部屋といえども、ほとんどアイドルしているだけなので、これは温度高めかなと思っていた。

で、筐体を調べてみたら…安いBTOなPCだったせいか、ケースファンが付いてなくて、結局、ファンといえば、CPUファンと電源のファンだけが回っている状態で、CPUやチップセットの熱が筐体に溜まっているんだろうなぁと想像して、余ってたケースファン(2000rpm/9cm)を装着してみた。

取り付け作業を終えて、しばらくして測ってみたところ、それぞれ31度、37度まで温度が下がっていることが確認できた。

HDDの温度とMTBFの関係については、HDDベンダーは相関関係があると言っていたような気がするが、大規模にHDDを使っているGoogleは相関関係が見られなかったと言っていたような気がする。そんな対立はあるが、とりあえず、温度を下げておいて悪いことはなさそうだと思っている。

HDD自体にファンを付けるパーツも売っているが、ケースファンでがんばるのも手だなと思った。

リリースされたと思ったら引っ込められた

SeagateのBarracuda 7200.11シリーズのファームウェアバグが報じられてはいるが、Seagate本社でのfirmwareのリリースはうまくいっていないようだ。Barracudaシリーズとか、DiamondMaxシリーズとか、シリーズ毎にファームウェアをリリースするつもりのようだが、最初にリリースされたファームウェアがvalidationのためってことでダウンロードできなくなっていた。

Firmware Update for ST3500320AS, ST3640330AS, ST3750330AS, ST31000340AS:

http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=207951

Note: This file has been temporarily taken offline as of Jan 19, 2008 8PM CST for validation.

きっと、早々にダウンロードしたユーザで何かが起こったから、再度のvalidationをやっているんだろうなぁ(遠い目)

なんとなく、validation後に新ファームウェアがリリースされそうな予感がするし、ファームウェアがダウンロードできなくなっているのもあるし、とりあえずは、突然死するリスクを抱えながら、様子を見るしかなさそうだ。

しかし、サービスプロバイダとかレンタルサーバ屋さんで膨大な数のSeagate製HDDを使っていたりすると…ファームウェアアップデートの手間だけでも気が遠くなるなぁ。RAIDカード越しにファームウェアを適用するのはできなさそう(Barracuda ES.2のファームウェアアップデートツールは無理っぽかった)だから、きっと、アップデート専用PCでも用意して、それにつないでアップデートすることになるんじゃないかと。そしたら、ホットスワップなケースに入っていたら多少は楽だろうけど、サーバ止めて、HDDを引っこ抜いて…ってやってるとすごい手間じゃなかろうか。

3wareのナレッジベースにて:SEAGATEのハードディスクのファームウェアのバグ

久しぶりに3wareのナレッジベースを見てみたら、ちょっと困ったことが書いてあった。

Q15385

The Seagate SATA-2 Seagate Barracuda ES.2 family drives (NS) must have firmware AN05 or newer in order to be compatible with the 9690SA controller. Seagate firmware AN05 is newer than firmware SN05.

こりゃ、Seagate Barracuda ES.2で使われているファームウェアにバグがあった感じだなぁ(遠い目)。確か、Barracuda ES.2って、社内のどこかで見た記憶が…(涙)とりあえず、ファームウェアが入ったISOファイルの名前でググってみたら、Adaptecのサイトにも似たようなことが書いてあった。

Known Issues with Seagate Barracuda ES.2 SATA II Disk Drives

The array keeps failing drives. The controller error log shows continuous “aborted command” messages when using Seagate Barracuda ES.2 SATA II drives (models: ST31000340NS, ST3750330NS, or ST3500320NS). Is this a known issue with those drives?

症状としては、断続的にHDD側で受け取ったコマンドの処理をを中断してしまい、RAIDカードがHDD側の対応をドライブが逝ったと判断してしまうって感じだろうか。

渦中のSeagateのサポートコミュニティを見てみると、アナウンスが出てた。

ANNOUNCEMENT Firmware Issues

アナウンスのスレッドの書き込みから張られてたリンクを辿ると、こんなことも書いてあった。

Welcome, Seagate hard drive owners. A number of Seagate hard drives from the following families may fail when the host system is powered on:

Barracuda 7200.11

DiamondMax 22

Barracuda ES.2 SATA

SV35

Once a drive has failed, the data is inaccessible to users. Seagate has isolated this issue to a firmware bug affecting drives from these families manufactured through December 2008. Please use the following tools and instructions to determine if you have one of the affected products. If you do, we recommend that you update the firmware on the disk drive.

個人的には、Barracuda ES.2 SATAのファームウェアがバグってるのは痛い(…痛すぎる…)ことではあるけれど、Seagate的には、ファームウェアバグを抱えてるラインナップに「DiamondMax 22」とか「Barracuda 7200.11」が含まれているってのが、強烈に痛いんじゃないだろうか。「Barracuda 7200.11」って、アキバでもよく見かけたドライブだし、いろんなメーカーのPCに密かに入ってるような気がするし。しかも、一回、ダメになると、そのHDDのデータにアクセスできなくなるってのも深刻かも。

とりあえず、Firmware Recommendations for Seagate Drivesに載っていた対象製品リストを貼ってみたりして。

  • Barracuda 7200.11

ST31000340AS

ST31000640AS

ST3750330AS

ST3750630AS

ST3640330AS

ST3640630AS

ST3500320AS

ST3500620AS

ST3500820AS

ST31500341AS

ST31000333AS

ST3640323AS

ST3640623AS

ST3320613AS

ST3320813AS

ST3160813AS

  • Barracuda ES.2 SATA

ST31000340NS

ST3750330NS

ST3500320NS

ST3250310NS

  • DiamondMax 22

STM31000340AS

STM31000640AS

STM3750330AS

STM3750630AS

STM3500320AS

STM3500620AS

STM3500820AS

STM31000334AS

STM3320614AS

STM3160813AS

しかし、MaxtorのDiamondMaxってBarracudaとファームウェアを共通化してあったんだなぁ。まぁ、当然だといえば当然か(汗)

3wareの「9650SE」に刺さってるSATAドライブのSMART情報をちら見する。

3wareのRAIDカード「9650SE」に刺さっているSATAドライブのSMART情報が見られることがわかった。使ったOSはCentOS 5.2(x86_64)。なんとなく、RAIDカードの向こうにあるドライブのSMART情報って見えないような気がしていたんだけども。

で、SMART情報をチラ見するのに使うのはsmartctl。

普通のIDEドライブ(PATA)が刺さってるLinuxマシンだと、こんな感じでSMART情報が見られる(ま、ドライブがSMARTに対応していることが前提だけど)

smartctl -a /dev/sda

コマンドを実行すると情報がずらずらと出てくる。IDEドライブなんだから、なんとなく/dev/hdaのような気がするけど、コマンドの確認を使ったマシンがsdaになっていた。

で、余談だけど、IDEドライブがなんで/dev/sdaで見えるのか、ってことを調べてみたら、こちらに書いてあった。なるほどねぇ。

もとい。SATAドライブでSMART情報を見ようとすると、「-d ata」を付けてみたらってアドバイスされる。

In Linux, SATA disks accessed via libata are only supported by smartmontools for kernel versions 2.6.15 and above. Try an additional ‘-d ata’ argument.

そんなわけで、「-d ata」を付けると、普通にSMART情報がずらっと取得できる。

smartctl -d ata -a /dev/sda

で、3wareの9650SEに刺さっているSATAドライブの場合は、「-d」で指定するデバイス名が3wareになる。加えて、3wareのカードに刺さっているディスクは複数なので、どのポートに刺さってるドライブのSMART情報を見るかって番号を必要になる。例えば、9650SE上の0番ポートに刺さってるドライブを参照したい場合は

-d 3ware,0

って感じになると。

普通のドライブであれば「/dev/sda」とか指定していたデバイスの指定のところに、「/dev/twa0」を指定すると、晴れてSMART情報が参照できた。9650SEを複数枚刺していると、「/dev/twa1」とか「/dev/twa2」とか増えていくのかもしれない。で、結局、9650SEの0番目のポートに刺さってるSATAドライブのSMARTは、以下のようなコマンドで見られた。

smartctl -d 3ware,0 -a /dev/twa0

ま、SMART情報が見られたところで、温度とか再割り当てセクタの数など、いくつか項目しか理解できないけど、見られないよりはマシかな…ということで。

ITE IT8211が余ってたので

雑用に使うためにWindowsサーバを構築することにした。社内に転がってるパーツをかき集めてたら、ITE製IT8211を搭載したATAカードが落ちてたので、流用することにした。

Windowsをインストールした後、IT8211のカードのドライバを探しにITEのサイト(http://www.ite.com.tw)に行ってみたが、さっぱりドライバをダウンロードできそうなページが見つからず。。。ダメもとで、ITEのページにある検索窓に「IT8211」とか入れてみたら、製品紹介が出てきて…そのページからドライバへのリンクが張られてた。てか、わかりにくすぎるんじゃないか、このナビゲーション(汗)

で、ドライバを入手して適用してみたら、デバイスマネージャに「SCSIとRAIDコントローラ」ってのが出現し、その中に「ITE IT8211 ATA/ATAPI Controller」ってのが追加されてた。SCSIでもRAIDコントローラでもないんですけど、これ…。

ちょっと調べてみたところ、IT8211にRAID機能を載せたとおぼしきIT8212ってチップがあるようなので(IT8211がIT8212からRAID機能を省いたサブセット版なのかもなぁ)、その辺とドライバを共通化してるのかもしれないなぁと思いつつ、ま、実用上は関係ないかと思いきや、早速、CrystalDiskInfoでSMART情報が見られなくて…後悔。

「unauthenticated user」が溢れた。

なんかサーバが重いなぁと思って、show processlistで見てみると、MySQLが「unauthenticated user」で溢れていた。netstatで見てみても、MySQLのポートがこれまでにないくらいESTABLISHEDであふれかえっていて、結局、「unauthenticated user」からのアクセスが、コネクションを使い切って、…あー(涙)という状況になった。

とりあえず、何らかの対処をしないと困るので、とりあえず、MySQLを再起動してみたが、解決せず。さらに、Webサーバも再起動してみたし、OSも再起動してみたが、やっぱり解決せず。で、「unauthenticated user」でGoogle先生に聞いてみたところ、MySQLがアクセスしてくるクライアントのIPアドレスのDNSの逆引きをやっているらしく、逆引きができないときに「unauthenticated user」が溢れるという事象が起こるらしかった。

そこで、MySQLが動いているマシンの/etc/hostsファイルを編集して、アクセスしてくるマシンの名前解決ができるようにしたら、「unauthenticated user」にお引き取りいただくことに成功して、再び平和が訪れた。

しかし。「unauthenticated user」が溢れることになるトリガーがよくわからない。特にMySQL周辺の設定を変更したわけでもないのだが、突然、溢れ出したように見えた。

あと、MySQLがなんでDNSの逆引きをやってるかがわからないので調べてみた。MySQLの権限テーブルでアクセス元を制限できるけど、その制限の指定にホスト名が使える(…そういえば、localhostとか使ってるなぁ…)背景には、MySQLがアクセスしてきてるクライアントのIPを逆引きしているということがあるらしい。なるほどなぁ…。

fsck…。

とあるサーバが応答しなくなったので、某所のデータセンターに行ってみた。すると、サーバのコンソールは一連のブートシーケンスらしきものが表示されていて、ファイルシステムがおかしいぞー的なエラーメッセージが出力された状態で止まっていた。

止まっていたサーバは、かなり前に構築されたサーバであるため、カーネルが古いせいか、kernel panicを起こすことがある。おそらくは、kernel panicして自動的に再起動して、再起動時のfsckで、修復が必要なエラーが検出されて止まっていたといった感じだろうか(…よくわからん…)

そんなわけで、、、冷や汗をかきながら、fsckをやってみた。といっても、fsckからinodeを見せられて、「修復しますか?」って聞かれたところで、「y」を押す以外のことはできるはずもなく、ただ、ひたすら「y」を連射。すると、リペアが完了した、みたいなメッセージが出力されて再起動。

…起動した。

drbdのスプリットブレイン訓練

DRBDを使っていて、うっかりスプリットブレインになっちゃった時に、リカバリー方法を間違えるとややこしいことになるような気がした(どっちをマスターにするかを間違えると、スレーブでマスターを上書きしてデータのロストとか起きたりしそう)ので、ちょっと試しにスプリットブレイン状態を作ってリカバリーしてみた。

使ったDRBDは8.3.0。インターネットを探してみると、DRBDが動いている状態でネットワークを引っこ抜くとスプリットブレインが発生すると書いてあるサイトもあったので、試しにL2スイッチの電源を落としてみた。そしたら、お互いに「WFConnection」(接続待ち)状態に遷移した。一方、マスター側は「Primary」状態なので、そのままマウントして、アプリケーションからいじってたりしたけれど影響はなかったみたいだ。で、ネットワークを再接続すれば、切断前のPrimary/Secondaryの関係性を維持したまま、「Primary」から「Secondary」への同期が始まった。で、同期が完了すると、「Connection」状態に戻った。

結局、ネットワークがダウンするだけでは、スプリットブレインは発生しないようだ。とりあえず、運用中にLANケーブルが引っこ抜ける的な障害が起こった場合は、LANケーブルを刺し直せば自動で対応してくれそうだ。

次に、意図的にスプリットブレインを作ることにした。L2スイッチを落とすところまでは同じだが、ネットワークが切れていることをいいことに、スレーブ側のマシンを「Primary」状態にしてみた。その後、L2スイッチの電源を入れる。これによって、お互いが「Primary」になっていることを検出するので、スプリットブレインとして、お互いが「StandAlone」に落ちる。ただ、もともと「Primary」になっていたマスター側は、StandAloneになっても「Primary」なので、マウントは可能っぽい。ただ、同期が取られないだけのようだ。dmesgでログを確認すると、以下のようなログが出力されていた。

drbd0: drbd_sync_handshake:

drbd0: self 6ABCC0B39EEBC9D5:03B0E55FA3B63131:38D5407DCCBC17FE:1C2D0C92A346572F

drbd0: peer 705B58F4947E0C9C:03B0E55FA3B63130:38D5407DCCBC17FE:1C2D0C92A346572F

drbd0: uuid_compare()=100 by rule 9

drbd0: Split-Brain detected, manually solved. Sync from this node

さて、両方のノードが「StandAlone」になったときにどう復旧するか。「drbdadm」にはいくつもコマンドオプションがあるので、いろいろ試してみたが、同期を取ってくれない。。。

そんなわけで、DRBDのマニュアルを探してみたら、「Manual split brain recovery」って項目があった。

DRBD detects split brain at the time connectivity becomes available again and the peer nodes exchange the initial DRBD protocol handshake. If DRBD detects that both nodes are (or were at some point, while disconnected) in the primary role, it immediately tears down the replication connection.

DRBDは、コネクティビティが復活した時や、同期相手とDRBD Protocolによるハンドシェイクを行う時にスプリットブレインを検出する。DRBDが両方のノードがPrimary(role)になっている(もしくは、接続が切れている、どこかの時点でPrimaryになっていた)場合、レプリケーションの接続をすぐに切断する。

After split brain has been detected, one node will always have the resource in a StandAlone connection state. The other might either also be in the StandAlone state (if both nodes detected the split brain simultaneously), or in WFConnection (if the peer tore down the connection before the other node had a chance to detect split brain).

スプリットブレインを検出した後では、一方のノードはずっと「StandAlone」になっていて、両方のノードが同時にスプリットブレインを検出していれば、もう一方のノードも「StandAlone」になっているかもしれないし、もう一つのノードがスプリットブレインを検出する前にコネクションを落としていれば、「WFConnection」になっているかもしれない。

At this point, unless you configured DRBD to automatically recover from split brain, you must manually intervene by selecting one node whose modifications will be discarded (this node is referred to as the split brain victim). This intervention is made with the following commands:

DRBDを自動的にスプリットブレインから復旧するように設定していなければ、こうなった時に、どっちのノードの変更を破棄するかを選択して、手動で介入する必要がある。この介入は、このコマンドで行われる。

と。

マスターとなる側では以下のコマンドを実行するらしい。

drbdadm connect resource

スレーブとなる側(つまり、変更点があっても破棄される側)では、以下のコマンドを実行するらしい。

drbdadm secondary resource

drbdadm — –discard-my-data connect resource

…というわけで、やってみたら、無事にConnection状態に戻った。

DRBD8からオプションが変わってた

DRBDをマスターとなるマシンとスレーブの両方にインストールし終わっただけでは、両方とも「Secondary」状態になっているので、マスター側を「Primary」状態にする必要がある。そのためには、2つのマシン間でデータの同期を行う必要がある。

そのマスターを「Primary」にして、最初の同期を取るコマンドが、DRBD7までは「–do-what-I-say」ってオプションが有効だったけれど、それがDRBD8からは「-overwrite-data-of-peer」に変更になったそうだ。というわけで、

drbdadm — -overwrite-data-of-peer primary all

をマスターとなるマシンで実行する。確かに「do what I say」よりは「overwrite data of peer」の方がわかりやすいオプションではあるけども。で、同期が始まった後で、/proc/drbdを覗いてみると、同期の進捗などが見える。

$ cat /proc/drbd

version: 8.3.0 (api:88/proto:86-89)

GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@localhost.localdomain, 2008-12-22 17:52:35

0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r—

ns:0 nr:28678656 dw:28670464 dr:0 al:0 bm:1749 lo:257 pe:1560 ua:256 ap:0 ep:1 wo:b oos:13271260

[============>…….] sync’ed: 68.4% (12960/40958)M

finish: 0:07:24 speed: 29,796 (29,676) K/sec

ただ、speedのところに書いてある、この約30M/secってのは、単位は何だろうってことで、調べてみた。で、DRBDのドキュメント(no title)を見てみると、speedの単位としては書かれていなかったけど、随所で「KiByte」って書いてあるから、きっと「30MByte/sec」ってことなんだろう。ってことは、だいたい240Mbpsくらいか。ギガビットなイーサネットを使っておいてよかった。

DRBDのプロトコル

DRBDのマスターとスレーブの通信方式は、3つの中から選べる。

drbd-8.3.0.tar.gzのサンプルのdrbd.confより

C: write IO is reported as completed, if we know it has reached _both_ local and remote DISK.

* for critical transactional data.

B: write IO is reported as completed, if it has reached local DISK and remote buffer cache.

* for most cases.

A: write IO is reported as completed, if it has reached local DISK and local tcp send buffer. (see also sndbuf-size)

*for high latency networks

DRBDを扱ったblogとかに載ってるdrbd.confを見ると、「C」になってることが多いけど、このサンプルファイルでは、「B」が「for most cases」となっている。サンプルのdrbd.confの続きにはこうも書いてあった。

uhm, benchmarks have shown that C is actually better than B. this note shall disappear, when we are convinced that B is the right choice “for most cases”. Until then, always use C unless you have a reason not to.

ベンチマーク的には「B」よりも「C」が優れているらしい。しかし、「B」の「remote buffer cache」って何を指しているんだろうか。Aがわざわざ「tcp」send bufferって書いてあるわけだから、tcpが付いてない=ネットワーク関連じゃないキャッシュなんだろう。そうなると、ディスクの書き込みキャッシュが思いついたりするが…そうなのか(汗)

でも、なんとなーく「C」の方が安心なプロトコルで、それって性能を犠牲にして実現されている方が、なんとなーく納得いくんだけどなぁ。まして、drbd.confを書いた人が、多くの場合、「B」が正しい選択って言う理由も気になるけども、、、書いてないか。

…でも、まぁ、とりあえず、「C」にしとく(汗)

« Older posts Newer posts »