Featured image of post openstack如何迁移虚拟机

openstack如何迁移虚拟机

VM

冷迁移

获取虚拟机详细信息

1
2
3
4
5
6
7
8
9
$ nova list --all
#...
#这里会打印虚拟机列表
#...

$ nova show <虚拟机ID>
#...
#这里会打印虚拟机的详细信息
#...

停止对应的虚拟机

1
$ nova stop <虚拟机ID>

查看虚拟机节点

1
2
3
4
5
6
7
8
$ nova show <虚拟机ID> | grep 'OS-EXT-SRV-ATTR:hos'
#| OS-EXT-SRV-ATTR:host                      | <现在节点名>

# 找一个可用的节点
$ nova-manage service list
# 看看对应节点的资源占用
$ nova-manage service describe_resource <节点ID>
# 找到可用的节点

拷贝文件

登录上面查到的节点上,将虚拟机的数据拷贝到新节点(上面找到的)上。

1
2
3
4
5
6
7
8
$ cd /var/lib/nova/instances
$ ls
#008700ed-8c4f-4928-9954-817d2b6725e5  47665d14-5c5e-4af3-a1de-ef456870835d  8e121afb-58c8-46d4-89db-14d3b1c01d11  d37d3323-2f07-4ca0-a492-62256bc7cca6
#09124146-5fda-42d0-9279-23310d7af6d8  48af9798-cee7-45e9-9ecb-0936b7f35698  905a099a-6c70-4ee9-91fc-62d70ba7a5a7  d4de74a6-d46f-4975-8dbd-b06754d94232
# 就是虚拟机实例目录,我就打两个意思一下
#...
$ rsync -e "ssh -p22" -avpgolr <虚拟机ID> <新节点IP>:/var/lib/nova/instances/
# 一些rsync的信息

修改权限

登录到新节点机器上,我们看看数据过来没有.

1
$ ls -lh /var/lib/nova/instances/<虚拟机ID>/

如果没问题,我们把权限修改一下

1
2
$ chown nova:nova -R /var/lib/nova/instances/<虚拟机ID>/
$ ls -lh /var/lib/nova/instances/<虚拟机ID>/

修改数据库记录

登录openstack的数据库,你可以服务器登录,如果你开放出去了也可以用工具连。

1
2
use nova;
update instances set host='<新节点>', node='<新节点>' where uuid='<虚拟机ID>';

重启openstack-compute

启动前重启一下该计算节点的compute服务,然后主节点拉起虚拟机就可以了

1
2
# 虚拟机节点执行这个
$ systemctl restart openstack-nova-compute
1
2
# 主节点执行这个
$ nova start <虚拟机ID>

热迁移

执行1.3的操作

执行迁移命令

1
$ nova live-migration <虚拟机ID> <新节点>

验证

1
2
$ nova show <虚拟机ID> | grep 'OS-EXT-SRV-ATTR:hos'
#| OS-EXT-SRV-ATTR:host                      | <节点名>