Nutanix CEにおけるノード障害時の復旧方法（ce-2019.11.22）

#はじめに
一般のご家庭で、3ノードのベアメタル構成をとっていると偶に何かが壊れますよね。
私の家はエアコンが無いため、室温が43℃になり夏に一台は壊れます。
Nutanixは一台壊れても通常運転してくれるのですが、やはり復旧作業は必要です。
今まで、以下2つの障害が発生しましたが今回記載の方法で復旧できていますので、よろしければ参考にしてください。

* 障害１：USBメモリーの熱暴走？による障害
* 障害２：停電によるSSDの（おそらく）論理障害

復旧方針としては**「障害ノードを復旧させたのではなく、別ノードを用意した（ように見せかける）」**です。
クリーンインストールによって別ノードを用意したように思わせる復旧方法です。

**注意！この方法は公式ではないです。もっと簡単に治るかもしれませんし、なにしても治らなかったら試してみてください。また、障害ノードは別のIPアドレスになります。別のIPアドレスを使用できない場合はこの方法は使えません。**

#障害ノードのシャットダウン
まずは、対象の障害ノードをシャットダウンしてください。
対象のCVMに` nutanix` ユーザでログインし、以下のコマンドでシャットダウンします。
ログインができない状態の場合は、仕方ないので物理的に電源OFFしてください。

```bash:shutdown(CVM)
nutanix@cvm$ sudo shutdown -h now
```

次に、対象ノードの物理ホストをシャットダウンします。` root` ユーザでAHVにログインしてください。

```bash:shutdown(AHV)
root@ahv# shutdown -h now
```

#インストーラ兼起動ディスクUSBメディアの再作成
[Nutanixのコミュニティポータル](https://next.nutanix.com "Nutanix Next")もしくは既にお持ちのイメージファイルを使ってUSB起動ディスクを再作成します。
インストール時と同様にUSBメモリに書き込んでください。

書き込みソフトは色々ありますが、私は[etcher](https://github.com/balena-io/etcher "")使ってます。


※今まで小さくて遅いUSBメモリを使っていたのですが、
よく壊れたりインストールに失敗したりしていたので、これを機に[Nutanix中の人（@smzksts）](https://blog.smzklab.net "")が紹介していた同じ奴（[Transcend JetFlash 910](https://jp.transcend-info.com/Products/No-1109 ""))を買いました。
ブータブルディスク作成もインストールもちょっぱやでびっくり。

#AHVとCVMのクリーンインストール
通常どおりUSBメモリで起動して、` install` ユーザでログインします。
キーボードの設定後、インストールオプションを問われる画面に遷移します。ここで**「Clean Install」**を選択します。
「Clean Install」を選択すると全てのデータが消去されますが、クラスタを復旧させればデータは戻ってきます。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78843/373dacc2-4ad8-a703-7a1a-8f721d0c2498.png)

重要なポイントが次です。新しい別ノードを用意したということになっているため、Nutanix上では障害ノードは復旧予定になっています。
そのため、同じIPアドレスを使うことができません（復旧時にエラーになります）。**インストール時に別のIPアドレスにする必要があります。**
![image-9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78843/33ad30f5-7aea-be62-c43e-7e8abf427b0e.png)

インストールが終わったら、クラスタへの追加作業に移ります。

#クラスタへの追加
クリーンインストールしたCVMへのIPアドレスへ、` ping` コマンドで別ノードから疎通が取れることを確認します。
ここからはPRISM上で作業します。

クラスタを拡張するには、「設定」→「クラスタの拡張」を選択します。
新しいIPアドレスにしたノードが見えていると思います。「次へ」ボタンをクリックします。
![expand_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78843/1a9bcd1f-7535-aebb-8e8c-4709bfda3896.png)

ホストコンフィギュレーションでは特に設定する項目はありませんので、そのまま「次へ」ボタンを押してください。拡張作業が開始されます。
![expand_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78843/2255ef2e-3f5f-0ff8-75b3-e78bce150129.png)

この状態でハードウェア情報を確認すると、今回追加したノードと障害ノードと正常ノード2台の合わせて4台のノードが表示されています。
![クリップボード02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78843/d880d0bc-ea91-99b4-3bb7-2981aca2be8b.png)

#障害ノードの削除
拡張作業が終わると、自動的に古いIPアドレスのノードのデタッチタスクが行われます。
このデタッチタスクでメタデータが新しいノードに転送されます。
この作業が終わると、ハードウェア情報のページで障害ノードに対してビックリマークが付き、”Node is removed from metadata store”と記載されています。
さらに右下に「Remove host」というボタンが表示されます（すぐには出ない可能性もあるので少し待ってみてください）。
![image[12].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78843/98fd6af6-176d-9bb5-b1dd-ed741a5261d2.png)

この「Remove host」ボタンを押すとノードが削除されるはずなのですが、私の環境では以下のようなエラーがでました。
![kbimage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78843/fc5b2a2c-7b4c-c453-8bf6-8b7e5b52ae08.png)

このエラーが出た場合は、以下のコマンドで対処可能です。
適当なCVMに` nutanix` ユーザでログインして以下のコマンドを入力します。

```bash:rm-start(CVM)
nutanix@cvm$ ncli host rm-start id=故障ノードのID(例：ec1e6123-21f8-4660-9389-88ab1d7c61cf) skip-space-check=true
Host removal successfully initiated
```

コマンドライン上では瞬時にプロンプトが返ってきますが、PRISM上でいくつかタスクが走ります。これも時間がかかりますので待ちます。
このタスクが終わると4台表示されていたハードウェア情報から故障ノードが消えます。これで復旧完了です！

#おわりに
クリーンインストールという強行突破ですが、当初リペア系オプションで治らなくて何度もやり直さないといけなくなり辛い気持ちになりました。
これで治るなら安心して運用できるので皆様の参考になればと思います。

##画像拝借先
[Nutanixバイブル](http://nutanixbible.jp "")
[portal.nutanix.com](http://portal.nutanix.com "")
[weestro.wordpress.com](http://weestro.wordpress.com "")