Openstack实例迁移

Migrate

OpenStack实例迁移操作不要求源和目标节点必须使用共享存储,但需要所有运行nova-compute的节点对应的用户做ssh信任

migrate过程,nova-compute主要完成以下步骤:

  • 源计算节点上关闭实例
  • <instance_id>_resize重命名源计算节点的实例目录
  • 将实例的镜像文件通过scp拷贝目标计算节点上
  • 在目标计算节点上启动实例
  • 连接实例相关的网络接口
  • 等待用户confirm或revert
  • 若confirm则删除源计算节点的实例目录
  • 若revert则关闭且删除目标计算节点上的instance,然后在源计算节点上重命名实例目录并启动实例

Live Migrate

Live Migrate的前提:

  1. 源和目标节点的 CPU 类型要一致;
  2. 源和目标节点的 Libvirt 版本要一致;
  3. 源和目标节点能相解析对方的主机名称;
  4. 在源和目标节点的/etc/nova/nova.conf中指明在线迁移时使用TCP协议。

Libvirt 默认情况下不支持TCP协议,需要对[libvirt]的配置做修改,使 libvirt 能够支持 TCP 协议。connection_uri = qemu+tcp://10.200.111.11/system

在迁移的过程中,运行在目的物理主机中的 libvirtd 进程要根据 address 和 port 创建一个 URI,URI 是目的物理主机用来接收数据和发回数据到源物理主机的 libvirtd 进程的。
在目的物理主机和源物理主机,只要下面的命令能够执行,就说明能够传输数据了。

1
2
3
4
5
6
7
8
9
10
11
12
[root@control01 ~]# docker ps|grep nova-libvirt
2ab6181e8ae7 registry.yealinkops.com:5555/kolla/centos-binary-nova-libvirt:queens "kolla_start" 10 days ago Up 6 days nova_libvirt
[root@control01 ~]# docker exec -it 2ab6181e8ae7 virsh -c qemu+tcp://nova@control03/system
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh # list
Id Name State
----------------------------------------------------
8 instance-0000004f running
9 instance-00000037 running
10 instance-0000005b running

Live Migrate的两种方式:

  • 源和目标节点没有共享存储,实例在迁移的时候需要将其镜像文件从源节点传到目标节点,这叫做Block Migration(块迁移),迁移时需要勾选Block Migration。


    Disk Over Commit:如果勾选了,nova在检查目标节点的磁盘空间是否足够时,是以实例磁盘镜像文件定义的最大容量为准;否则以磁盘镜像文件当前的实际大小为准。

  • 源和目标节点使用共享存储,实例的镜像文件不需要迁移,只需要将实例的状态迁移到目标节点。

Live Migrate的相关配置:

  • libvirtd.conf
1
2
3
4
listen_tcp = 1
listen_tls = 0
auth_tcp = "none"
listen_addr = "10.200.111.11"
  • nova.conf
1
2
3
[libvirt]
connection_uri = qemu+tcp://10.200.111.11/system
virt_type = kvm

Resize

Openstack的resize的本质是在migrate的同时应用新的flavor,如果需要在同一台宿主机进行resize而不发生迁移,则需要修改nova.conf配置文件指定allow_resize_to_same_host=True

若源与目标计算节点在同一台宿主机上,则在关闭实例之后会将以<instance_id>_resize重命名实例目录,以便进行revert。

坚持原创技术分享,您的支持将鼓励我继续创作!
0%