VMインスタンスをERROR状態からACTIVE状態に手動復旧させる方法
nova resize に何らかの理由で失敗すると、VMインスタンスのステータスがERRORのまま nova からは一切操作できなくなってしまいます。
※ぼくの場合はmigrate&resizeに必要な設定漏らしててERRORになりましたが、他にもケースはいくつかあるでしょうきっと。
$ nova resize vm00 m1.medium $
■ resizeコマンドは実行されたように見えますが、実は...
リストを見てみるとステータスがERRORとなっている...まぁOpenStackではよくありますよね。
$ nova list +--------------------------------------+------+--------+---------------------+ | ID | Name | Status | Networks | +--------------------------------------+------+--------+---------------------+ | bfd70cf1-5caf-4bda-8ea1-9a4d25dd4cd4 | vm00 | ERROR | network00=10.0.0.12 | | e2e8d400-d590-4d18-8333-dc699ef85325 | vm01 | ACTIVE | network00=10.0.0.13 | +--------------------------------------+------+--------+---------------------+
■ こうなるとrebootも効きません
$ nova reboot vm00 ERROR: Cannot 'reboot' while instance is in vm_state error (HTTP 409) (Request-ID: req-4a21e77e-9af3-4f76-bfcb-97d7e6b07f01)
失敗の原因は、この設定を忘れていたことでした。
みなさんもコレをお忘れなく。
いやぁ LiveMigration はテストしてたんだけどな...
■ Hypervisor上でステータスを確認してみると...
shut off状態
# virsh list --all Id Name State ---------------------------------------------------- - instance-000000aa shut off
■ startさせてみましょうかね
virshでVMインスタンスを手動startさせてみます。
# virsh start instance-000000aa Domain instance-000000aa started
無事に startに成功したようです。
これで該当VMインスタンスは無事に起動し、sshログインできるようになりました。
■ ただし、nova上のステータスとしてはERRORのまま
novaコマンドで見てみると残念ながらERRORのままです...
$ nova list +--------------------------------------+------+--------+---------------------+ | ID | Name | Status | Networks | +--------------------------------------+------+--------+---------------------+ | bfd70cf1-5caf-4bda-8ea1-9a4d25dd4cd4 | vm00 | ERROR | network00=10.0.0.12 | | e2e8d400-d590-4d18-8333-dc699ef85325 | vm01 | ACTIVE | network00=10.0.0.13 | +--------------------------------------+------+--------+---------------------+
novaを経由せずにVMインスタンスの状態を変更したために構成管理DBとの不整合が発生しています。この状態では novaコマンドではVMの削除操作しかきません。
実際のVMインスタンスはACTIVE状態ですから、構成管理DB上のStatusだけACTIVEにしてやれば構成管理DBと実際のVMの状態が整合されるので、novaコマンドで通常通り操作できるようになるハズ。
■ VMインスタンスの状態について
しかたがないのでinstancesテーブルのvm_stateの状態を直接修正します。
そのまえに、vm_stateが表す状態にはどのようなものがあるのかというと、主なものだけですが以下のようになります。
+---------+--------------+ |vm_state | 状態 | +---------+--------------+ |active |起動状態 | |stopped |停止状態 | |deleted |削除済 | |suspended|サスペンド状態| +---------+--------------+
■ 構成管理データベース修正作業を実施する
□ instancesテーブル構造を確認する
まずは構成管理DB上のVMインスタンスを管理しているテーブルの情報を確認してみましょう。
$ mysql -u nova -p Enter password: ******** mysql> use nova mysql> desc instances; +--------------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------------+--------------+------+-----+---------+----------------+ | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | | NULL | | | deleted_at | datetime | YES | | NULL | | | deleted | tinyint(1) | YES | | NULL | | | id | int(11) | NO | PRI | NULL | auto_increment | | internal_id | int(11) | YES | | NULL | | | user_id | varchar(255) | YES | | NULL | | | project_id | varchar(255) | YES | MUL | NULL | | | image_ref | varchar(255) | YES | | NULL | | | kernel_id | varchar(255) | YES | | NULL | | | ramdisk_id | varchar(255) | YES | | NULL | | | server_name | varchar(255) | YES | | NULL | | | launch_index | int(11) | YES | | NULL | | | key_name | varchar(255) | YES | | NULL | | | key_data | mediumtext | YES | | NULL | | | power_state | int(11) | YES | | NULL | | | vm_state | varchar(255) | YES | | NULL | | | memory_mb | int(11) | YES | | NULL | | | vcpus | int(11) | YES | | NULL | | | hostname | varchar(255) | YES | | NULL | | | host | varchar(255) | YES | MUL | NULL | | | user_data | mediumtext | YES | | NULL | | | reservation_id | varchar(255) | YES | MUL | NULL | | | scheduled_at | datetime | YES | | NULL | | | launched_at | datetime | YES | | NULL | | | terminated_at | datetime | YES | MUL | NULL | | | display_name | varchar(255) | YES | | NULL | | | display_description | varchar(255) | YES | | NULL | | | availability_zone | varchar(255) | YES | | NULL | | | locked | tinyint(1) | YES | | NULL | | | os_type | varchar(255) | YES | | NULL | | | launched_on | mediumtext | YES | | NULL | | | instance_type_id | int(11) | YES | | NULL | | | vm_mode | varchar(255) | YES | | NULL | | | uuid | varchar(36) | YES | UNI | NULL | | | architecture | varchar(255) | YES | | NULL | | | root_device_name | varchar(255) | YES | | NULL | | | access_ip_v4 | varchar(255) | YES | | NULL | | | access_ip_v6 | varchar(255) | YES | | NULL | | | config_drive | varchar(255) | YES | | NULL | | | task_state | varchar(255) | YES | MUL | NULL | | | default_ephemeral_device | varchar(255) | YES | | NULL | | | default_swap_device | varchar(255) | YES | | NULL | | | progress | int(11) | YES | | NULL | | | auto_disk_config | tinyint(1) | YES | | NULL | | | shutdown_terminate | tinyint(1) | YES | | NULL | | | disable_terminate | tinyint(1) | YES | | NULL | | | root_gb | int(11) | YES | | NULL | | | ephemeral_gb | int(11) | YES | | NULL | | | cell_name | varchar(255) | YES | | NULL | | +--------------------------+--------------+------+-----+---------+----------------+ 50 rows in set (0.00 sec)
結構なカラム数ですね。
□ 該当VMインスタンスのステータスを確認してみる
必要なフィールドとしてはuuid,hostname,host,vm_modeがあれば問題なさそうです。
mysql> select uuid,hostname,host,vm_state from instances where uuid='bfd70cf1-5caf-4bda-8ea1-9a4d25dd4cd4'; +--------------------------------------+----------+----------+----------+ | uuid | hostname | host | vm_state | +--------------------------------------+----------+----------+----------+ | bfd70cf1-5caf-4bda-8ea1-9a4d25dd4cd4 | vm00 | server00 | error | +--------------------------------------+----------+----------+----------+
□ vm_stateを修正する
実際の状態は active なので、該当VMインスタンスのvm_stateを修正します。
mysql> update instances set vm_state='active' where uuid='bfd70cf1-5caf-4bda-8ea1-9a4d25dd4cd4'; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0
成功したようです。
□ 最後に念のためnovaコマンドで確認する
$ nova list +--------------------------------------+------+---------+---------------------+ | ID | Name | Status | Networks | +--------------------------------------+------+---------+---------------------+ | bfd70cf1-5caf-4bda-8ea1-9a4d25dd4cd4 | vm00 | ACTIVE | network00=10.0.0.12 | | e2e8d400-d590-4d18-8333-dc699ef85325 | vm01 | ACTIVE | network00=10.0.0.13 | +--------------------------------------+------+---------+---------------------+
無事に復旧しました。以降はnovaコマンドで操作できます。