このエントリーをはてなブックマークに追加

1.15. インスタンスの不整合が発生した場合は?

コンピュートノードで起動しているインスタンスをNova経由でダウンさせずOS自体をいきなりシャットダウンなどを行った場合にNovaからインスタンスを操作できなくなることがあります。
Horizonからも勿論操作不可になりインスタンスの名前の変更とか削除だけしかできなくなります。
それではあんまりなので直しましょうということです。

1.15.1. インスタンスの状態確認

コントローラノードから確認可能です。
エラーが発生しているインスタンスの状態を確認するとERRORになっています。
$ nova list
+--------------------------------------+------+--------+------------------------+
| ID                                   | Name | Status | Networks               |
+--------------------------------------+------+--------+------------------------+
| 9b1f1a6f-22f3-4421-9454-0931edb9ece2 | dd   | ERROR  | nova_network1=10.0.0.2 |
+--------------------------------------+------+--------+------------------------+

1.15.2. インスタンスの稼働サーバを確認

インスタンスがどこのコンピュートノードで稼働しているのかを探し出します。
$ HYPERVISOR_LIST=$(nova hypervisor-list | egrep -v "\+|Hypervisor hostname" | awk -F"|" '{print $3}' | cut -c2- | tr '\n' ' ' | sed -e 's/  */ /g' | sed -e 's/ $//')
$ for i in $HYPERVISOR_LIST
do
  nova hypervisor-servers $i
done
+--------------------------------------+-------------------+---------------+---------------------+
| ID                                   | Name              | Hypervisor ID | Hypervisor Hostname |
+--------------------------------------+-------------------+---------------+---------------------+
| 9b1f1a6f-22f3-4421-9454-0931edb9ece2 | instance-00000001 | 1             | stack01             |
+--------------------------------------+-------------------+---------------+---------------------+

1.15.3. 仮想マシンの起動

どのサーバで稼働しているかわかったらそのサーバの仮想マシンを起動します。
$ ssh stack01 virsh start instance-00000001

1.15.4. Novaとの整合性修正

起動したインスタンスのNovaからの稼動状態をERRORからACTIVEに修正します。

$ UUID=9b1f1a6f-22f3-4421-9454-0931edb9ece2
$ sudo mysql -uroot -pnova -e "select vm_state from instances ;" nova

Novaの状態と同じくエラーになっています。

+----------+
| vm_state |
+----------+
| error    |
+----------+

実際は仮想マシンは稼働しているためNovaのデータベース側の状態をERRORからACTIVEへ変更します。

$ sudo mysql -uroot -pnova -e "update instances set vm_state='active' where uuid='$UUID';" nova
$ sudo mysql -uroot -pnova -e "select vm_state from instances ;" nova

データベースがアクティブになったかを確認します。

+----------+
| vm_state |
+----------+
| active   |
+----------+

Novaのコマンドでもアクティブになったことを確認します。

$ nova list
+--------------------------------------+------+--------+------------------------+
| ID                                   | Name | Status | Networks               |
+--------------------------------------+------+--------+------------------------+
| 9b1f1a6f-22f3-4421-9454-0931edb9ece2 | dd   | ACTIVE | nova_network1=10.0.0.2 |
+--------------------------------------+------+--------+------------------------+
問題無さそうです。Horizon側でも確認してみましょう。
それでも無理な場合は``nova reboot インスタンスID`` などとして見たら基本的に直るはずです。
というか何とかならないんでしょうかこれ。データベースを直に触るとかどのサーバでインスタンスが稼働しているかなどは勝手にOpenStackが全て把握するべきだと思うんですけど。