对于虚拟化,一方面的内容是可以实现软件定义硬件,另一方面就是关于资源的伸缩迁移,也就是我可以将我的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 | +--------------------------------------+------------------------------------------------------------+
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里面找相关的错误信息