構成
OS:CentOS9Stream
OpenstackVersion:Anterope
OpenStackでは、サーバを停止した状態で別ホストサーバに移す通常のマイグレーションとOS起動状態でメモリ情報などを保持したまま別ホストサーバに移すライブマイグレーションがある。
ライブマイグレーションでは、ストレージをiscsiやNFSなどの共有ボリュームに配置する必要がある。通常のマイグレーションであれば、すごくシンプルな話、仮想マシンのファイルごとごっそりコピーということになるのでとりあえず入れることはそんなに大変ではない。
こちらの手順で、Computeノード間でキーペアを共有する設定を入れればできる。
https://access.redhat.com/obsolete-documentation/ja/red-hat-openstack-platform/8/paged/migrating-instances/chapter-2-how-to-migrate-a-static-instance
computeノードが2台ある場合の手順。
Computeノード全台でnovaをログインユーザーにする
1 |
usermod -s /bin/bash nova |
Computeノード#1でnovaユーザー用のキーペアを作成する
1 2 3 4 5 6 7 8 9 10 |
# novaユーザーでキーペア作成 su nova ssh-keygen echo 'StrictHostKeyChecking no' >> /var/lib/nova/.ssh/config cat /var/lib/nova/.ssh/id_rsa.pub >> /var/lib/nova/.ssh/authorized_keys exit # computeノード#2にキーペアをコピー scp /var/lib/nova/.ssh/id_rsa compute2.srv.osp:~/ scp /var/lib/nova/.ssh/id_rsa.pub compute2.srv.osp:~/ |
computeノード#2でコピーしてきたキーペアのバーミッションやsshconfigなどをそろえる
1 2 3 4 5 6 7 8 |
chown nova:nova id_rsa chown nova:nova id_rsa.pub su nova mkdir -p /var/lib/nova/.ssh cp id_rsa /var/lib/nova/.ssh/ cat id_rsa.pub >> /var/lib/nova/.ssh/authorized_keys echo 'StrictHostKeyChecking no' >> /var/lib/nova/.ssh/config exit |
お互いのノードにnovaユーザーでパスワードなしでログインできることを確認
1 2 3 4 5 |
[root@compute1 ~]# su nova bash-5.1$ ssh compute2.srv.osp Last login: Mon Oct 30 21:40:11 2023 [nova@compute2 ~]$ [nova@compute2 ~]$ |
コンソールでのマイグレーションの手順
マイグレーション自体は、2つの処理に分かれていて、
①Compute#2で仮想マシンのアーカイブとcompute#1へのコピーが行われる
②Compute#2で仮想マシンを削除
マイグレーションかけたいマシンをマイグレーションする。そうするとまい
この状態だと、マイグレーションの予約が完了した状態。
両方のノードで仮想マシンの状態を見ると、Compute#2ではシャットオフ状態になっていて、Compute#1でrunnningになっている。
この状態で、コンソールからマイグレーションの確定をするとCompute#2からは対象仮想マシンが取り除かれる。
ハマったことメモ
・ 仮想マシンを作った時のFlavorのuuidがuuidになっていない場合、エラーになる模様。
この場合はFlavorを作り直してあげればいい。コンソールから作ったら手っ取り早いし、変な値が注入されることはない。
ちなみに、そのときのエラーはnova-conductorが吐いており、このようなエラーが出ていた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
2023-10-31 02:15:25.417 1607 WARNING nova.scheduler.utils [None req-fb342e95-0410-4c41-8a74-51d9ed79573a 7862bbebcbd948e68495451a907c2d95 8f0a86a2120b438190a417b92813c03f - - default default] [instance: 22dcf5cd-40ff-4716-bed5-ddffdb783463] Setting instance to STOPPED state.: nov a.exception_Remote.NoValidHost_Remote: No valid host was found. There are not enough hosts available. 2023-10-31 02:27:53.690 1596 WARNING nova.scheduler.utils [None req-a75e7dbf-6247-4755-b403-f83a0eb43453 7862bbebcbd948e68495451a907c2d95 8f0a86a2120b438190a417b92813c03f - - default default] Failed to compute_task_migrate_server: No valid host was found. There are not enough hos ts available. Traceback (most recent call last): File "/usr/lib/python3.9/site-packages/oslo_messaging/rpc/server.py", line 244, in inner return func(*args, **kwargs) File "/usr/lib/python3.9/site-packages/nova/scheduler/manager.py", line 224, in select_destinations selections = self._select_destinations( File "/usr/lib/python3.9/site-packages/nova/scheduler/manager.py", line 251, in _select_destinations selections = self._schedule( File "/usr/lib/python3.9/site-packages/nova/scheduler/manager.py", line 452, in _schedule self._ensure_sufficient_hosts( File "/usr/lib/python3.9/site-packages/nova/scheduler/manager.py", line 499, in _ensure_sufficient_hosts raise exception.NoValidHost(reason=reason) nova.exception.NoValidHost: No valid host was found. There are not enough hosts available. : nova.exception_Remote.NoValidHost_Remote: No valid host was found. There are not enough hosts available. |