【HW】Nutanix CEをHP ML380G7/P410i構成に入れようとしてドハマりした話 
 社内で自宅に構成したNutanix CEのデモを行ったところ、好感触だったのでとりあえずシングルノードで構成して触ってもらうことにしました。 しかし、あいてるHWがリース切れでもらってきたML380G7だったため、ドハマりする結果になりました…。なんとか原因がわかったので後世のためにバッドノウハウを残します。

余談:導入のいきさつ


 未だに後進的な開発方法を行っていたのでどうにかしたいと思ってはいたのですが、インフラに詳しい人がほぼいないうえ、自分もかかり切りになるわけにはいかない状況で(あと一々VM作成依頼とか受けたくない)、誰でも必要なときにVMを作れるNutanix CEは非常に良いソリューションでした。

ちなみに過去に開放するサーバのハイパーバイザを検討した結果:
VMware→vCenterServerがないのでクローンとか作るのが厳しいし、そのたびに一から作るのはあまりに効率が悪いので没 (出来なくはないけどSSHでログインしてvmkfstools 使えとかvmxファイルいじれとか非インフラの人にはもっと厳しい)
Linux KVM→同上 (そもそもアプリ開発チームにKVM使ったことある人いないのでは…)
HyperV→まあ妥当かなと思っていたけど社内にライセンスが2008R2Stdしかないのでメモリ32GB制限とRDP接続数制限…

 もちろん、それぞれ良いところはあるのですが、どれもある程度のナレッジが必要なので、あまり深く考えずに使う、というのはちょっと厳しいかなと思いました。

 なので、ちょっと暇が出来たので「とりあえず箱は用意したから好きに使っていいよ、ただし冗長性はないからいつ吹っ飛ぶか分からないから、必要なデータはgitデーモンなりSVNなりあとで本番仮想機の上に作るのでそっちに退避してね」というスタンスでNutanix CEを入れようとしたのですが…

構成


ハードウェア構成
筐体 HP Proliant ML380G7
ストレージコントローラ P410i (1G-FBWC付き)
ディスク構成 2.5インチSAS 300GB*8
CPU Xeon X5680*2
メモリ 48GB

OSバージョン
ce-2017.02.23-stable.img.gz

 ディスクが8本あるのに全て300GBというNutanix CEのHDD500GB要件を満たさないため、「じゃあ全てRAID5でくっつけて一つにするか!」という安易な発想から、サポート外構成のディスク構成をとりました。ただ、SSDがないため、SSDだけは買ってもらい、HDDを一つ抜いてSSDに交換したので以下のようなディスク構成になりました。

Array A 300*7 RAID5 1.8TiB
Array B 240GB * 1 RAID0


USBにce-2017.02.23-stableを焼き、起動までは良かったのですが…

ハマり1 ディスクがSSDとして認識されない


 みんなのハマりポイントなので情報は沢山ありました。SmartArrayはSSDとして認識するのですが、何故かOSにはそれを見せないようです。
echo 0 > /sys/block/【SSD】/queue/rotational

にてインストーラはごまかせました

ハマり2 CVM再起動後ストレージプールが死ぬ


 CVM起動後、PrismからみるとArray Aも何故かSSDと認識され、おかしいなーと思いCVMを再起動したところ、ストレージプールへ一切の書き込みが出来なくなりました。
家に帰ってからも手持ちのP410コントローラを使い
Array A 1TB SATA HDD*2 RAID0
Array B 240GB SATA SSD * 1 RAID0

構成で同様のことを行ったのですが、やはり死にました。
 余談ですがSmartArray P410がX79などのMBで起動しなかったため、メモリとコア数に余裕のある(Xeon L5640/6コア)懐かしのX58を引き出しました…。



原因


 長時間の手探りの調査のあと、原因はSmartArrayで定義されたディスクが、ディスクのシリアルの代わりにコントローラのシリアルを返すことだと判明しました。

[root@NTNX-71f86937-A ~]# smartctl -a /dev/sda
=== START OF INFORMATION SECTION ===
Vendor: HP
Product: LOGICAL VOLUME
Revision: 6.64
User Capacity: 240,021,504,000 bytes [240 GB]
Logical block size: 512 bytes
Rotation Rate: 15000 rpm
Logical Unit id: 0x600508b1001cb8ae0693a3fdcc1e17ca

Serial number: PACCRID11320BPR <========これ

Device type: disk
Local Time is: Thu Mar 9 14:24:53 2017 PST
SMART support is: Unavailable - device lacks SMART capability.

=== START OF READ SMART DATA SECTION ===

Error Counter logging not supported

Device does not support Self Test logging
[root@NTNX-71f86937-A ~]# smartctl -a /dev/sdb
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-4.4.26-1.el7.nutanix.20170222.x86_64] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke,www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor: HP
Product: LOGICAL VOLUME
Revision: 6.64
User Capacity: 2,000,342,441,984 bytes [2.00 TB]
Logical block size: 512 bytes
Rotation Rate: 15000 rpm
Logical Unit id: 0x600508b1001cec93d95097d47affa22f

Serial number: PACCRID11320BPR <========これ

Device type: disk
Local Time is: Thu Mar 9 14:24:56 2017 PST
SMART support is: Unavailable - device lacks SMART capability.

=== START OF READ SMART DATA SECTION ===

Error Counter logging not supported

Device does not support Self Test logging

[root@NTNX-71f86937-A ~]#hpacucli ctrl slot=1 show

Smart Array P410 in Slot 1
Bus Interface: PCI
Slot: 1
Serial Number: PACCRID11320BPR   <========これ



 このシリアルがCVMの初期設定時にxmlに書かれるのですが、このシリアルをCVMの中でマウントポイントとして使っているため、同じシリアルがあると二重マウントになりどちらかがアクセスできなくなります。


[root@NTNX-d16bad23-A ~]# virsh dumpxml NTNX-d16bad23-A-CVM
(省略)
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/disk/by-id/scsi-3600508b1001cec93d95097d47affa22f'/>
<backingStore/>
<target dev='sda' bus='scsi'/>
<serial>PACCRID11320BPR</serial>      <========これ
<wwn>600508b1001cec93</wwn>
<vendor>ATA</vendor>
<product>LOGICAL VOLUME</product>
<alias name='scsi0-0-0-0'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>


<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/disk/by-id/scsi-3600508b1001cb8ae0693a3fdcc1e17ca'/>
<backingStore/>
<target dev='sdb' bus='scsi'/>
<serial>PACCRID11320BPR</serial>      <========これ
<wwn>600508b1001cb8ae</wwn>
<vendor>ATA</vendor>
<product>LOGICAL VOLUME</product>
<alias name='scsi0-0-0-1'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>


CVM上のマウントポイントは以下のようになります。
nutanix@NTNX-71f86937-A-CVM:172.20.1.114:~$ mount
(省略)
/dev/sdb1 on /home/nutanix/data/stargate-storage/disks/PACCRID11320BPR type ext4 (rw,nosuid,noatime,data=ordered,nodiscard,nodelalloc,init_itable=30)
/dev/sda4 on /home/nutanix/data/stargate-storage/disks/PACCRID11320BPR type ext4 (rw,nosuid,noatime,data=ordered,nodiscard,nodelalloc,init_itable=30)
none on /dev/cgroup type cgroup (rw,cpu,cpuacct,memory,freezer,net_cls)


 この結果から、1つのSmartArrayコントローラ上で論理ディスクを2つ以上作ると死ぬ事が確定したので、これを回避する必要があります。どうにかコントローラからエクスポートするシリアルを変更できないか、CVM構成後にディスク情報を変えられないか調べたのですが、時間の無駄でした。

 この記事を書きながらふと「ではlibvirt向けのxmlを書き出すところでstartctrlからの情報ではなくその都度ランダムに生成するようにすれば、あるいは…」とも思いましたが気力が尽きました。

対処法


 今回の対処としては、光学ドライブに2.5インチのディスクをマウントする12.5mm厚のダミーマウンタを買い、SSDはAHCIに見せることにしました。


 どうでも良いですが、ML380の光学ドライブを交換したあとにディスクの後ろに付いているスペーサに気がつきました。


 めんどくさいのでそのままです。窪んでます。雑い。


ハマり3 何故かSmartArrayの通常ディスクがSSDとして認識されてしまう


 かくして、マウントポイントが被る問題は対処できたのですが、今度は何故か何度CVMを作り直しても、通常のHDDがSSDとして認識されてしまいました。
 これが今回の大きなハマりポイントでした。

 Prismやnclからみても、HDDであるべきストレージがSSDと認識されてしまいます。もちろん、ホスト上の/sys/~/rotationalは1を返しています。1.5TのSSDが本当にあったら良かったんですが、残念ながらHDDです。



 まあそのままでも動くので、階層化が全く機能しなくなるけどもう良いかなと心が折れかけていましたが、原因が見つかりました。

原因


 Nutanix CEにinstallで入ると、インストールスクリプトの中でどのディスクがSSDであるかをhclリストの中から探し、その中になければ今回SSDとして認識されたディスク(cat /sys/~/rotational 0として認識したディスク)を/home/install/phx_iso/phoenix/hcl.jsonの中に追記し、それをCVMに渡すようです。

 CVMは、起動時にそのjsonを元に、今アタッチされているディスクのうちどれがSSDかを確認するようです。アタッチされているディスクの情報は、libvirtのxmlに書かれたProduct名(今回は<product>LOGICAL VOLUME</product>と言う値)がCVMに渡るようです。

 さて、この/home/install/phx_iso/phoenix/hcl.jsonですが、再インストールのためにrootで./cleanup.sh を行っても初期の状態には戻らないため、過去にecho 0 >/sys~をやって過去にSSDとして認識されてしまうと、そのディスクがずっとSSDとして残り続けるようです。これが原因でした。

対処法


/home/install/phx_iso/phoenix/hcl.jsonを編集し、該当行を消し、CVMを作り直します。もしくはもう一度USBメモリを作り直し、初期の状態にもどします。
 今回は下記の行をまるっと削除し、再度installでログインしてCVMを作り直しました。
{
"nand_type": "MLC",
"capacity_gb": 240.02150400000002,
"interface": "SATA600",
"data": "true",
"last_edit": 1489090465,
"manufacturer": "Community Edition",
"boot": "true",
"model_string": "LOGICAL VOLUME",
"approved_by": "Nutanix, CE",
"model": "LOGICAL VOLUME",
"metadata": "true"
}


 その後、無事にHDDとして認識されました。

まとめ


サポート外構成は、やめようね!!!


 何故サポートしないか、それにはちゃんとした理由があると実感しました。つらかった…
 少なくとも、NutanixにP410以前のSmartArrayカードはサポートされていないので使うべきではありません。特に1つのコントローラで2つ以上の論理ドライブを作成する場合は確実に死にます。

 MegaRAIDカードの場合は、インストールスクリプト中でmegacliであれこれしてシリアルを抜き出しているようなので、それぞれのディスクをRAID0で見せる場合は大丈夫な気がしますが、複数のディスクでRAID5などを作成した場合は分かりません。

 SmartArrayも、P420以降に関しては、ファームバージョン7くらいからHBAモードがあるのは確認しましたが、HBAモード時にディスクのSerialをどう返すかは未確認です。

 しかしながら、このほぼ情報がないトラブルのおかげでずいぶんとnutanixがインストール時に何をするかを深いところまでみられたので、勉強にはなりました。あとncliやhpacucliも初めて使いましたが調査の段階で何度も様々なコマンドを打ったので、だいぶ慣れました。

 多分運用が始まるとそれはそれで問題が出るので、何かあればまた記事にしようと思います。


Fitflop Flat Shoes 
Throughout this great pattern of things you actually get a B+ for effort and hard work. Where you actually confused me was in all the facts. You know, they say, the devil is in the details... And that couldn't be much more true here. Having said that, allow me reveal to you just what did give good results. Your writing is extremely engaging which is most likely the reason why I am taking the effort to comment. I do not make it a regular habit of doing that. 2nd, while I can easily notice a leaps in logic you make, I am definitely not confident of how you seem to connect your details that help to make the actual conclusion. For the moment I will, no doubt yield to your point however hope in the near future you link the dots better.

コメントを書く
必要事項とコメントを入力して下さい。









タグの挿入