一个计算机技术爱好者与学习者

0%

好好学OpenStack:OpenStack中共享存储的虚拟机在线迁移

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
2
mkdir -p /nfs/share/instances
chmod o+x /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
2
3
4
docker stop nova_compute
docker start nova_compute
docker stop nova_libvirt
docker start nova_libvirt

如果不重启,那么创建的实例会存放在计算节点本地磁盘上,卸载instances目录后可以看到。

5. 迁移

5.1. 创建实例

参考《Kolla安装OpenStack多节点》的初始化配置部分,使用cirros镜像创建demo2实例。

1、使管理员环境生效

1
source /etc/kolla/admin-openrc.sh

2、创建实例

1
2
3
4
5
6
openstack server create \
--image cirros \
--flavor m1.tiny \
--key-name mykey \
--nic net-id=25e6c0ef-6a0a-481c-a08a-46f7ef67ad3e \
demo2

3、分配浮动IP

1
2
3
4
openstack network list
openstack floating list
openstack floating ip create public1
openstack server add floating ip demo2 10.0.2.156

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。