前言:
Live Migrate(动态迁移),是指在保证客户机上应用服务正常运行的同时,让客户机在不同的宿主机之间进行迁移,分为无共享存储的Block Migration(块迁移)方式和有共享存储两种方式,本文为有共享存储迁移方式。
Migrate前提是计算主机的nova-compute服务正常,当某个计算主机宕机或其它异常导致服务不可用时,这时可以进行Evacuate操作,将实例迁移至其它主机。
环境
openstack版本 | pike |
---|---|
控制节点主机 | openstack-controller(ubuntu 16.04.5) 172.27.34.37 |
计算节点主机 | openstack-computer(ubuntu 16.04.5) 172.27.34.38 |
instance01 | cirros0001(172.16.2.3) |
instance02 | cirros0002(172.16.2.6) |
ubuntu安装详见:Ubuntu16.04.5以lvm方式安装全记录
openstack安装详见:OpenStack实践(一):Ubuntu16.04下DevStack方式搭建p版OpenStack
Flat网络搭建详见:OpenStack实践(三):Linux Bridge方式实现Flat Network
Live Migrate部分
修改nova.conf
修改配置文件nova.conf
代码语言:txt复制stack@openstack-controller:~$ view /etc/nova/nova.conf
[vnc]
#vncserver_listen = 127.0.0.1server_listen=0.0.0.0
重启计算服务
代码语言:txt复制root@openstack-controller:~# systemctl restart devstack@n*
配置hosts文件
配置个计算节点hosts文件,使之能相互识别主机名
root@openstack-controller:/# more /etc/hosts
免密访问
各计算节点的root用户能免密访问应用用户stack
代码语言:txt复制root@openstack-controller:/# ssh-keygen -t rsa
代码语言:txt复制root@openstack-controller:~# ssh-copy-id -i /root/.ssh/id_rsa.pub stack@172.27.34.38
密码测试
代码语言:txt复制root@openstack-controller:~# ssh stack@172.27.34.38
libvirt配置
本次实验无需对/etc/default/libvirt-bin和/etc/libvirt/libvirtd.conf文件进行额外配置,采用默认qemu ssh方式传输。
验证连通性
代码语言:txt复制root@openstack-controller:~# virsh -c qemu ssh://stack@openstack-computer/system list --all
配置nfs服务
nfs服务器配置
代码语言:txt复制[root@centos7 ~]# mkdir -p /opt/stack/data/nova/instances
[root@centos7 ~]# chmod -R 777 /opt/stack/data/nova/instances
[root@centos7 ~]# view /etc/exports
/opt/stack/data/nova/instances *(rw,sync,fsid=0,no_root_squash)
[root@centos7 ~]# exportfs -r
[root@centos7 ~]# exportfs -v
/opt/stack/data/nova/instances
<world>(sync,wdelay,hide,no_subtree_check,fsid=0,sec=sys,rw,secure,no_root_squash,no_all_squash)
客户端挂载
各计算节点都执行如下操作
安装nfs软件
代码语言:txt复制root@openstack-controller:~# apt-get install nfs-common -y
测试共享目录
代码语言:txt复制root@openstack-controller:~# showmount -e 172.27.9.181
Export list for 172.27.9.181:
/opt/stack/data/nova/instances *
挂载
代码语言:txt复制root@openstack-controller:~# mount -t nfs 172.27.9.181:/opt/stack/data/nova/instances /opt/stack/data/nova/instances
开启自动挂载
代码语言:txt复制root@openstack-controller:~# view /etc/rc.local
mount -t nfs 172.27.9.181:/opt/stack/data/nova/instances /opt/stack/data/nova/instances
nfs搭建详见:Centos7下NFS服务器搭建及客户端连接配置
Live Migrate
查看准备迁移的实例
该实例迁移前位于controller节点,为验证是热迁移,cirros01开启ping服务
开始迁移
目标节点选择computer,由于是共享存储方式实现本实验,不勾选‘块设备迁移’选项。
迁移
迁移完成
实例由controller节点成功迁移至computer节点
ping服务在迁移过程中未中断。
命令方式
代码语言:txt复制root@openstack-controller:~# nova live-migration d0d5bc75-da89-46a8-be79-1e2639f9eaf8 openstack-controller
d0d5bc75-da89-46a8-be79-1e2639f9eaf8为实例id,openstack-controller为目标计算节点。
日志分析
查看实例id和req id
查看实例id和req id以便于日志定位
源节点nova-api发送消息
代码语言:txt复制root@openstack-controller:~# journalctl -f --unit devstack@n-api.service
目标节点迁移准备
源节点暂停实例启动迁移
目标节点恢复实例
源节点完成迁移并释放资源
Evacuate部分
关闭计算节点openstack-computer
代码语言:txt复制root@openstack-computer:~/.ssh# init 0
查看计算节点状态
查看实例名和所属计算节点名
代码语言:txt复制root@openstack-controller:~# nova list --fields id,name,status,instance_name,host
执行evacuate
代码语言:txt复制root@openstack-controller:~# nova evacuate 80b8a5ff-5082-4864-b05e-5766c144d2b4 openstack-controller
将实例80b8a5ff-5082-4864-b05e-5766c144d2b4由计算节点openstack-computer迁移至openstack-controller
如果同主机做evacuate操作会报错:The target host can't be the same one,如果结算节点未宕机就迁移,则报错:Compute service of openstack-computer is still in use
Evacuate操作完成
登陆实例
实例恢复后密码、ip、主机名都不变。
日志分析
nova-api
nova-scheduler
nova-computer
本文参考
https://docs.openstack.org/nova/queens/admin/configuring-migrations.html#section-configuring-compute-migrations
https://docs.openstack.org/nova/queens/configuration/config.html
https://docs.openstack.org/nova/pike/admin/evacuate.html
https://blog.51cto.com/cloudman/1786423