Atom feed of this document
  

 配置迁移

[注意]注意

只有云管理员用户可以执行在线迁移。如果云是被配置为使用单元,非管理员用户可以执行在线迁移,但不是在单元之间进行。

迁移可让管理员将虚拟机实例从一台计算节点迁移到其它的节点。此特性对于当一个计算节点需要维护时特别的有用处。当然迁移也可用于当某台计算节点运行了太多虚拟机实例而过载需要重现分发的情况。

迁移的类型有:

  • 非在线迁移 (有时也称之为‘迁移’)。也就是在迁移到另外的计算节点时的这段时间虚拟机实例是处于宕机状态的。在此情况下,实例需要重启才能工作。

  • 在线迁移 (或 '真正的在线迁移')。实例几乎没有宕机时间。用于当实例需要在迁移时保持运行。在线迁移有下面几种类型:

    • 基于共享存储的在线迁移。所有的Hypervisor都可以访问共享存储。

    • 块在线迁移。无须共享存储。但诸如CD-ROM 和配置驱动 (config_drive)之类的只读设备是无法实现的。

    • 基于卷的在线迁移。实例都是基于卷的而不是临时的磁盘,无须共享存储,也支持迁移(目前仅支持基于libvirt的hypervisor)。

下面章节描述了如何配置主机和计算节点来作迁移,Hypervisor有KVM和XenServer。

 KVM-Libvirt

 共享存储

先决条件

  • Hypervisor: 基于libvirt的 KVM

  • 共享存储:NOVA-INST-DIR/instances/ (例如, /var/lib/nova/instances)挂载了共享存储。此向导使用了NFS,没有特殊的属性,也包括了 OpenStack Gluster Connector

  • 实例: 基于iSCSI卷的实例是可以迁移的。

[注意]注意
  • 因为计算服务默认不使用libvirt的在线迁移功能,客户操作系统在迁移之前会休眠,或许可能有几分钟的宕机。更多细节,请参考 “激活真实的在线迁移”一节

  • 此向导假设了文件nova.confinstances_path的默认值 (NOVA-INST-DIR/instances)。如果你更改了state_pathinstances_path 变量,请在命令行中也做对应的修改。

  • 你必须指定 vncserver_listen=0.0.0.0,否则在线迁移将无法正常工作。

  • 必须在每个运行nova-compute的节点中指定instances_path。每个节点上instances_path的挂载点也必须相同。否则在线迁移就无法正常工作。

 计算环境安装实例
  • 准备至少三台服务器。在此例中,我们的服务器分别是HostA, HostB, 和 HostC:

    • HostA 云控制器, 且须运行这些服务: nova-api, nova-scheduler, nova-network, cinder-volume, 以及 nova-objectstore

    • HostBHostC均是运行nova-compute计算节点

    确保所有节点上的NOVA-INST-DIR(在nova.conf文件中设置state_path )是相同的。

  • 在此例中,HA是NFSv4服务,其抛出目录NOVA-INST-DIR/instancesHostBHostC 是NFSv4的客户端,挂载HostA抛出的NFSv4目录。

 

配置系统

  1. 配置DNS或者/etc/hosts,确保所有主机保持一致。确保三台主机可以相互彼此解析。作为测试,使用命令 ping从其中一台ping其它的主机。

    $ ping HostA
    $ ping HostB
    $ ping HostC
  2. 确保计算服务和libvirt的用户的UID和GID是在所有主机都是一样的。这可确保NFS挂载权限正常的工作。

  3. HostA抛出NOVA-INST-DIR/instances,同时确保HostBHostC中的计算服务用户可读写此目录。

    更多信息,请参阅SettingUpNFSHowToCentOS/Red Hat: 配置 NFS v4.0 文件服务器

  4. HostA中配置NFS服务,添加下面几行内容到/etc/exports 文件:

    NOVA-INST-DIR/instances HostA/255.255.0.0(rw,sync,fsid=0,no_root_squash)

    更改子网掩码(255.255.0.0)为HostBHostC IP地址所对应的值。然后重启NFS服务:

    # /etc/init.d/nfs-kernel-server restart
    # /etc/init.d/idmapd restart
  5. 在所有的计算节点中,启用共享目录的'execute/search'属性,以允许qemu在此目录内使用镜像。在所有的节点中,运行下面的命令:

    $ chmod o+x NOVA-INST-DIR/instances 
  6. HostBHostC中配置NFS,添加下面几行内容到文件/etc/fstab

    HostA:/ /NOVA-INST-DIR/instances nfs4 defaults 0 0

    确保你可以挂载导出的目录:

    $ mount -a -v

    检查HostA已经抛出NOVA-INST-DIR/instances/" 目录:

    $ ls -ld NOVA-INST-DIR/instances/
    drwxr-xr-x 2 nova nova 4096 2012-05-19 14:34 nova-install-dir/instances/

    HostB and HostC执行相同的检查,尤其要注意的是权限(计算服务用户可写):

    $ ls -ld NOVA-INST-DIR/instances/
    drwxr-xr-x 2 nova nova 4096 2012-05-07 14:34 nova-install-dir/instances/
    $ df -k
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/sda1            921514972   4180880 870523828   1% /
    none                  16498340      1228  16497112   1% /dev
    none                  16502856         0  16502856   0% /dev/shm
    none                  16502856       368  16502488   1% /var/run
    none                  16502856         0  16502856   0% /var/lock
    none                  16502856         0  16502856   0% /lib/init/rw
    HostA:               921515008 101921792 772783104  12% /var/lib/nova/instances  ( <--- this line is important.)
  7. 更新libvirt的配置以实现安全的调用。这些方法通过TCP来远程访问,但是这里篇幅所限,就不提及了。

    • SSH隧道到libvirtd的 UNIX 套接字

    • libvirtd TCP 套接字,基于 GSSAPI/Kerberos的认证+数据加密

    • libvirtd TCP 套接字,基于TLS的加密和x509客户端证书的认证

    • libvirtd TCP 套接字,基于TLS的加密和Kerberos的认证

    重启 libvirt。在你运行命令之后,确保libvirt已经重启成功:

    # stop libvirt-bin && start libvirt-bin
    $ ps -ef | grep libvirt
    root 1145 1 0 Nov27 ? 00:00:03 /usr/sbin/libvirtd -d -l
  8. 配置你的防火墙以允许libvirt在节点之间通信。

    默认情况下,libvirt监听的是TCP端口16509,且临时的TCP范围是从49152到49261用于KVM的通信。基于所选择的TCP安全远程访问,请小心打开的端口,且要理解谁可以访问。关于libvirt使用的端口更多信息,请参阅 libvirt 文档

  9. 你现在可以为在线迁移配置属性了。在大多数情况下,你不需要配置任何的属性。下面的表仅针对高级用户。

表 4.6. Description of live migration configuration options
配置属性=默认值 描述
[DEFAULT]
live_migration_retry_count = 30 (IntOpt) Number of 1 second retries needed in live_migration
[libvirt]
live_migration_bandwidth = 0 (IntOpt) Maximum bandwidth to be used during migration, in Mbps
live_migration_flag = VIR_MIGRATE_UNDEFINE_SOURCE, VIR_MIGRATE_PEER2PEER, VIR_MIGRATE_LIVE, VIR_MIGRATE_TUNNELLED (StrOpt) Migration flags to be set for live migration
live_migration_uri = qemu+tcp://%s/system (StrOpt) Migration target URI (any included "%s" is replaced with the migration target hostname)

 激活真实的在线迁移

截至Kilo的发布,计算服务默认并不使用libivrt的在线迁移。要启用它的话,添加下面几行内容到nova.conf[libvirt] 一节:

live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_TUNNELLED

比Kilo更早的版本中,计算服务默认不使用libvirt的在线迁移是因为有迁移进程不会终止的bug。这尤其会发生在客户操作系统使用的块存储块于其迁移的过程。

 块迁移

配置KVM的块迁移和上面的配置 “共享存储”一节非常的类似,不同的是,NOVA-INST-DIR/instances是在每台主机的本地,无须贡献,也无须一致。也不需要配置NFS的服务和客户端。

[注意]注意
  • 要使用块迁移,必须在在线迁移的命令中加上参数--block-migrate

  • 块在线迁移。但诸如CD-ROM 和配置驱动 (config_drive)之类的只读设备是无法实现的。

  • 在块迁移中临时的驱动器是要在整个网络中做复制的,所以迁移实例会给I/O负载带来很重的负担,在极端的情况下,如驱动器写入快于网络的数据复制的话,迁移将是无限期来完成的。

 XenServer

 共享存储

先决条件

  • 兼容 XenServer hypervisors. 更多信息, 请参阅 XenServer 管理员手册的章节创建资源池的需求

  • 共享存储。一个NFS抛出目录,对于所有的XenServer主机都可见。

    [注意]注意

    至于所支持动NFS版本,请参考XenServer 系统管理员手册章节 NFS VHD

要使用基于XenServer hypervisor的共享存储在线迁移的话,主机必须加入XenServer池。要创建此池的话,必须基于特定的元数据创建主机的聚合,此元数据是通过XAPI插件来用于建立池的。

 

基于XenServer hypversiors来使用共享存储,实现在线迁移

  1. 给主的XenServer添加一NFS VHD 存储,然后设置它作为默认的存储仓库。更多信息,请参阅XenServer 管理员指南的 NFS VHD 。

  2. 配置所有的计算节点使用默认的存储仓库(sr) 用于池的操作。在所有的计算节点中的配置文件nova.conf添加下面几行内容:

    sr_matching_filter=default-sr:true
  3. 创建一个主机聚合。此命令会创建聚合并返回一个包含新的聚合的ID的表:

    $ nova aggregate-create POOL_NAME AVAILABILITY_ZONE

    添加元数据到并集,然后标记其为一个hypervisor池:

    $ nova aggregate-set-metadata AGGREGATE_ID hypervisor_pool=true
    $ nova aggregate-set-metadata AGGREGATE_ID operational_state=created

    将第一台计算节点添加到聚合:

    $ nova aggregate-add-host AGGREGATE_ID MASTER_COMPUTE_NAME

    主机现在时XenServer池的一部分了。

  4. 添加主机到池中:

    $ nova aggregate-add-host AGGREGATE_ID COMPUTE_HOST_NAME
    [注意]注意

    所添加的计算节点和主机将会关闭以加入到XenServer池。如果其中有的计算节点处于运行状态或休眠状态,操作就会失败。

 块迁移

先决条件

  • 兼容的 XenServer hypervisors。hypervisor必须支持存储XenMotion特性。请参阅你的XenServer文档,从而确保你的版本支持此特性。

[注意]注意
  • 要使用块迁移,必须在在线迁移的命令中加上参数--block-migrate

  • 块迁移仅能工作在EXT本地存储仓库下,且服务器必须没有任何的挂接的卷。

Questions? Discuss on ask.openstack.org
Found an error? Report a bug against this page


loading table of contents...