[管理篇4]OpenStack虚拟机动态迁移——block-migration

对于虚拟化,一方面的内容是可以实现软件定义硬件,另一方面就是关于资源的伸缩迁移,也就是我可以将我的VM从一台物理主机,迁移到另外一台物理主机,适合的场景包括:

  • 当一个主机资源占用率高,可以将该主机的VM迁移到占用率低的主机上
  • 当一个整体的主机资源占用率都不高,我们可以将某个主机的VM迁移到其他主机上,然后待机主机,节能环保
  • 当一个整体的主机资源占用率都很高,需要添加新主机,将其他主机的VM迁移到新主机上


这些也是虚拟化非常重要的一个要求,在OpenStack中,当然也可以实现这个操作。


OpenStack的热迁移,也就是VM不停机的状态下进行迁移,分为两种:

  • 块迁移,也就是本文介绍的方式,相当于物理的拷贝,也就是虚拟机实例文件从一台主机迁移到另一台主机,如果虚拟机的大小和网络不好,可能会花费比较大的时间
  • 共享存储迁移,也就是所有虚拟机实例都放在一个共享存储上,其实就不存在物理的迁移,只是相关的虚拟机实例在那一台物理主机上运行,这个方式需要配置共享存储,但是迁移速度极快。

本文主要介绍块迁移。


原理:试想,我们进行块迁移属于物理迁移,也就是将一个物理主机的文件拷贝到另外一台物理主机的路径下,这个就需要配置virsh免密码连接,这里面我们需要几个Libvirt的配置文件


1、配置libvirt

注意:每个compute节点都是同样的配置,


修改/etc/libvirt/libvirtd.conf文件:

listen_tls = 0

listen_tcp = 1

auth_tcp = "none"  修改这个也就是通过tcp 无密码登录


修改/etc/init/libvirt-bin.conf文件:
改前 : env libvirtd_opts="-d "

改后 :env libvirtd_opts="-d -l"  添加-l 也就是添加tcp连接


修改/etc/default/libvirt-bin:
改前 :libvirtd_opts=" -d"

改后 :libvirtd_opts=" -d -l"  添加-l 也就是添加tcp连接


重新启动libvirt-bin服务:
sudo service libvirt-bin restart


重新启动nova-compute服务

sudo servicenova-compute restart


2、将所有控制节点、计算节点的机器名和IP进行配置

sm@controller:~$ sudo cat /etc/hosts
[sudo] password for sm:
127.0.0.1       localhost
192.168.3.180   controller
192.168.3.181   computer
192.168.3.182   computer2
192.168.3.183   computer3
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

3、测试virsh连接

使用这种方式:virsh -c qemu+tcp://计算节点Ip或者机器名/system list

可以无需输入密码,显示虚拟机实例信息,说明配置没有问题

sm@computer2:~$ virsh -c qemu+tcp://192.168.3.182/system list
 Id    Name                           State
----------------------------------------------------
 4     instance-0000003c              running

sm@computer2:~$
sm@computer2:~$ virsh -c qemu+tcp://192.168.3.183/system list
 Id    Name                           State
----------------------------------------------------
 3     instance-0000003b              running

4、如果希望使用Nova命令实现,修改nova配置文件/etc/nova/nova.conf,添加如下配置

live_migration_bandwidth=0
live_migration_retry_count=30
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE



5、进行热迁移


查看虚拟机实例列表

sm@computer2:~$ nova list
+--------------------------------------+------+--------+------------+-------------+--------------------------+
| ID                                   | Name | Status | Task State | Power State | Networks                 |
+--------------------------------------+------+--------+------------+-------------+--------------------------+
| e4c33315-19a5-4206-867c-768148b2d858 | v2   | ACTIVE | -          | Running     | sharednet1=192.168.3.116 |
| aaa1d404-2f4c-492a-a959-a39d8c19e3f7 | v3   | ACTIVE | -          | Running     | sharednet1=192.168.3.117 |
+--------------------------------------+------+--------+------------+-------------+--------------------------+

查看v2信息

sm@computer2:~$ nova show v2
+--------------------------------------+------------------------------------------------------------+
| Property                             | Value                                                      |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                     |
| OS-EXT-AZ:availability_zone          | nova                                                       |
| OS-EXT-SRV-ATTR:host                 | computer3                                                  |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | computer3                                                  |
| OS-EXT-SRV-ATTR:instance_name        | instance-0000003b                                          |
| OS-EXT-STS:power_state               | 1                                                          |
| OS-EXT-STS:task_state                | -                                                          |
| OS-EXT-STS:vm_state                  | active                                                     |
| OS-SRV-USG:launched_at               | 2015-05-14T11:49:01.000000                                 |
| OS-SRV-USG:terminated_at             | -                                                          |
| accessIPv4                           |                                                            |
| accessIPv6                           |                                                            |
| config_drive                         |                                                            |
| created                              | 2015-05-11T20:06:52Z                                       |
| flavor                               | m1.tiny (1)                                                |
| hostId                               | c9741df1176a21c74117b5a53e1576195f4970e3c6d3448bda323b1e   |
| id                                   | e4c33315-19a5-4206-867c-768148b2d858                       |
| image                                | cirros-0.3.2-x86_64 (f2b0f15b-bd5e-4766-973c-24547c1faf03) |
| key_name                             | sm-key                                                     |
| metadata                             | {}                                                         |
| name                                 | v2                                                         |
| os-extended-volumes:volumes_attached | []                                                         |
| progress                             | 0                                                          |
| security_groups                      | default                                                    |
| sharednet1 network                   | 192.168.3.116                                              |
| status                               | ACTIVE                                                     |
| tenant_id                            | b500268a41e34752aba847c7ea464870                           |
| updated                              | 2015-05-11T20:55:00Z                                       |
| user_id                              | 9b1cdfc2b5614eb39f042317f54a286c                           |
+--------------------------------------+------------------------------------------------------------+


查看v3 信息

sm@computer2:~$ nova show v3
+--------------------------------------+------------------------------------------------------------+
| Property                             | Value                                                      |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                     |
| OS-EXT-AZ:availability_zone          | nova                                                       |
| OS-EXT-SRV-ATTR:host                 | computer2                                                  |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | computer2                                                  |
| OS-EXT-SRV-ATTR:instance_name        | instance-0000003c                                          |
| OS-EXT-STS:power_state               | 1                                                          |
| OS-EXT-STS:task_state                | -                                                          |
| OS-EXT-STS:vm_state                  | active                                                     |
| OS-SRV-USG:launched_at               | 2015-05-14T11:49:33.000000                                 |
| OS-SRV-USG:terminated_at             | -                                                          |
| accessIPv4                           |                                                            |
| accessIPv6                           |                                                            |
| config_drive                         |                                                            |
| created                              | 2015-05-11T20:07:04Z                                       |
| flavor                               | m1.tiny (1)                                                |
| hostId                               | 890c461c5a827fb0e8465b3410acc939fb2804876ff9a30300dd3f90   |
| id                                   | aaa1d404-2f4c-492a-a959-a39d8c19e3f7                       |
| image                                | cirros-0.3.2-x86_64 (f2b0f15b-bd5e-4766-973c-24547c1faf03) |
| key_name                             | sm-key                                                     |
| metadata                             | {}                                                         |
| name                                 | v3                                                         |
| os-extended-volumes:volumes_attached | []                                                         |
| progress                             | 0                                                          |
| security_groups                      | default                                                    |
| sharednet1 network                   | 192.168.3.117                                              |
| status                               | ACTIVE                                                     |
| tenant_id                            | b500268a41e34752aba847c7ea464870                           |
| updated                              | 2015-05-11T20:44:46Z                                       |
| user_id                              | 9b1cdfc2b5614eb39f042317f54a286c                           |
+--------------------------------------+------------------------------------------------------------+

我们可以看到V2在Computer3计算节点上,V3在Computer2计算节点上,我们希望将V3迁移到Computer3计算节点上,进行如下操作

 nova live-migration --block-migrate v3 computer3

块迁移需要添加--block-migrate参数

我们稍等片刻(根据你的网络和虚拟机的大小),原则上只要执行上面命令没有出现错误,就需要等待迁移时间了。

sm@computer2:~$ nova show v3
+--------------------------------------+------------------------------------------------------------+
| Property                             | Value                                                      |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                     |
| OS-EXT-AZ:availability_zone          | nova                                                       |
| OS-EXT-SRV-ATTR:host                 | computer3                                                  |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | computer3                                                  |
| OS-EXT-SRV-ATTR:instance_name        | instance-0000003c                                          |
| OS-EXT-STS:power_state               | 1                                                          |
| OS-EXT-STS:task_state                | -                                                          |
| OS-EXT-STS:vm_state                  | active                                                     |
| OS-SRV-USG:launched_at               | 2015-05-14T11:49:33.000000                                 |
| OS-SRV-USG:terminated_at             | -                                                          |
| accessIPv4                           |                                                            |
| accessIPv6                           |                                                            |
| config_drive                         |                                                            |
| created                              | 2015-05-11T20:07:04Z                                       |
| flavor                               | m1.tiny (1)                                                |
| hostId                               | c9741df1176a21c74117b5a53e1576195f4970e3c6d3448bda323b1e   |
| id                                   | aaa1d404-2f4c-492a-a959-a39d8c19e3f7                       |
| image                                | cirros-0.3.2-x86_64 (f2b0f15b-bd5e-4766-973c-24547c1faf03) |
| key_name                             | sm-key                                                     |
| metadata                             | {}                                                         |
| name                                 | v3                                                         |
| os-extended-volumes:volumes_attached | []                                                         |
| progress                             | 0                                                          |
| security_groups                      | default                                                    |
| sharednet1 network                   | 192.168.3.117                                              |
| status                               | ACTIVE                                                     |
| tenant_id                            | b500268a41e34752aba847c7ea464870                           |
| updated                              | 2015-05-11T21:54:45Z                                       |
| user_id                              | 9b1cdfc2b5614eb39f042317f54a286c                           |
+--------------------------------------+------------------------------------------------------------+

我们可以看到V3已经迁移到Computer3上了。


遇到的问题

1、我这次迁移遇到的最大的问题是一开始我是由一台控制节点,一台网络+计算节点,两台机器组成的openstack,怎么设置都有问题,最后我新做了两台一模一样的计算节点,所谓的一模一样包括所有的组件安装,包括组件的用户uid ,组ID都需要一致,不然可能出现问题。


也就是查看,两台计算节点的每个用户的信息都要一样才行,如果机器1的nova uid=116,另一台机器的nova uid=118可能就出现问题。

sm@computer2:~$ sudo cat /etc/passwd
[sudo] password for sm:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
libuuid:x:100:101::/var/lib/libuuid:
syslog:x:101:104::/home/syslog:/bin/false
messagebus:x:102:106::/var/run/dbus:/bin/false
landscape:x:103:109::/var/lib/landscape:/bin/false
sm:x:1000:1000:sm,,,:/home/sm:/bin/bash
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
ntp:x:105:112::/home/ntp:/bin/false
dnsmasq:x:106:65534:dnsmasq,,,:/var/lib/misc:/bin/false
nova:x:107:114::/var/lib/nova:/bin/false
libvirt-qemu:x:108:113:Libvirt Qemu,,,:/var/lib/libvirt:/bin/false
libvirt-dnsmasq:x:109:115:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/bin/false
neutron:x:110:116::/var/lib/neutron:/bin/false
statd:x:111:65534::/var/lib/nfs:/bin/false

2、另外,好像如果两台机器的CPU类型不一样,内存不一样也会出现问题,这是看其他博客有所介绍,因为我是复制的VM Ware所以这个问题也避免了。


3、还有时会出现以下错误

ERROR: Live migration of instance bd785968-72f6-4f70-a066-b22b63821c3b to host compute-13 failed (HTTP 400) (Request-ID: req-180d27b5-9dc7-484f-9d9a-f34cccd6daa2)


这个错误我也碰到了,但是我这边并不知道是何原因,最后在1的环境下,再也没有碰到该错误了

有的说,是icehouse的bug,需要修改源代码,有的说,可以在/var/log/nova/nova-api.log里面找相关的错误信息


你可能感兴趣的:([管理篇4]OpenStack虚拟机动态迁移——block-migration)