1. 前言
《OpenStack中虚拟机的在线迁移》一文中,虚拟机迁移时,把block一起进行了迁移。生产环境中,这些虚拟机往往是共享存储设备,不需要对block进行迁移。所以,本文就来重新配置一下环境,实现共享存储的虚拟机在线迁移。
2. 原理
常规安装的OpenStack中,实例存放在 /var/lib/nova/instances/
目录;
使用kolla安装的OpenStack中,实例存放在 /var/lib/docker/volumes/nova_compute/_data/instances/
目录。
共享存储,需要两个步骤:
1、有一台NFS(Network File System)服务器,共享某个目录,比如/nfs/share/instances。
2、所有计算节点的instances目录,都挂载上NFS服务器的/nfs/share/instances目录。
3. 主机准备
使用virtualbox创建一个新的ubuntu16虚拟机,或者clone其他节点并且通过快照恢复初始状态,作为nfs存储节点。这里通过clone的方法得到一个新的主机,设置IP为192.168.56.130。参考《VirtualBox中Ubuntu扩容》,对虚拟机进行扩容。
4. NFS准备
参考文档《Linux中安装NFS》,在存储节点安装nfs-server,计算节点安装nfs-client。
4.1. 存储节点nfs配置
1、创建共享目录并修改权限
1 | mkdir -p /nfs/share/instances |
2、写入nfs配置
1 | echo '/nfs/share/instances *(rw,sync,no_root_squash)' >> /etc/exports |
4.2. 计算节点nfs配置
1、挂载nfs目录
1 | mount -t nfs 192.168.56.130:/nfs/share/instances /var/lib/docker/volumes/nova_compute/_data/instances/ |
instances目录中还有文件和文件夹,直接挂载覆盖确定没有影响吗?没有。
两个计算节点都执行同样的操作,此时它们的instances目录是同一个目录。
2、修改instances目录权限
1 | chmod -R 777 /var/lib/docker/volumes/nova_compute/_data/instances/ |
一定要修改,否则创建实例时会报错。
3、重启compute服务和libvirt服务
1 | docker stop nova_compute |
如果不重启,那么创建的实例会存放在计算节点本地磁盘上,卸载instances目录后可以看到。
5. 迁移
5.1. 创建实例
参考《Kolla安装OpenStack多节点》的初始化配置部分,使用cirros镜像创建demo2实例。
1、使管理员环境生效
1 | source /etc/kolla/admin-openrc.sh |
2、创建实例
1 | openstack server create \ |
3、分配浮动IP
1 | openstack network list |
3、查看实例
计算节点上,在/var/lib/docker/volumes/nova_compute/_data/instances
目录中,可以看到新创建的实例。
5.2. 迁移实验
1、查看实例列表
1 | nova list |
2、查看实例信息
1 | nova show demo2 |
可以看到demo2位于compute节点。
3、实例迁移
1 | nova live-migration demo2 compute2 |
4、再次查看实例信息
1 | nova show demo2 |
可以看到demo2迁移到了compute2节点,迁移成功,nice。