[管理篇5]OpenStack虛擬機器動態遷移——共享儲存遷移
前面我們介紹了有關OpenStack的熱遷移包括塊遷移和共享儲存遷移,對於快遷移可能有一個致命的缺點,就是他相當於一個物理物件的遷移,如果虛擬機器例項比較大或者網路頻寬有所限制,這可能會讓使用者感覺不是非常友好,雖然他也是一個不宕機的遷移。
今天就給大家介紹另一種方式,也就是共享儲存遷移。
前面的文章已經說明的很清楚了,就是將所有計算節點的例項檔案放在一個共享儲存上,那麼所謂的遷移其實就是這個例項執行在哪一個物理計算節點的問題,可能就是一個數據庫行的修改而已。(也曾經看有限使用者之間修改資料庫nova裡面的instances表來進行操作,但是不建議這樣改)
因為每個計算節點預設的例項儲存路徑為:/var/lib/nova/instances,當然,使用者也可以修改nova.conf配置檔案來自定義這個預設儲存,這裡我們就不再進行修改了。
本機的測試環境如下:
OpenStack icehouse
控制節點:controller 192.168.3.180
計算節點:computer 192.168.3.181
計算節點:computer2
192.168.3.182
計算節點:computer3
192.168.3.183
前面我已經解釋了為什麼我有增加了兩個計算節點,因為在同步的時候,系統會要求每個計算節點的nova的使用者ID必須保持一致,所以我在以前做實驗的環境只包含180和181節點老是不成功,所以就新添加了182和183,這兩個機器由於是clone出來的,所以所有配置都一樣。
配置libvirt,
修改/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
1、我在182機器上,建立一個/home/sm/share資料夾,作為儲存虛擬機器例項的共享資料夾,然後進行共享
[email protected]:~$ sudo cat /etc/exports
[sudo] password for sm:
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/home/sm/share *(insecure,rw,sync,no_root_squash)
2、在182機器上進行mount
[email protected]:~# mount 192.168.3.182:/home/sm/share /var/lib/nova/instances/
[email protected]:~# mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
none on /sys/fs/pstore type pstore (rw)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu)
cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,relatime,cpuacct)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,relatime,devices)
systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name= systemd)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
192.168.3.182:/home/sm/share on /var/lib/nova/instances type nfs (rw,vers=4,addr =192.168.3.182,clientaddr=192.168.3.182)
3、在183機器上進行mount
[email protected]:~$ sudo mount 192.168.3.182:/home/sm/share /var/lib/nova/instances/
[email protected]:~$ mount
/dev/sda1 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
none on /sys/fs/pstore type pstore (rw)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu)
cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,relatime,cpuacct)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,relatime,freezer)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,relatime,perf_event)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,relatime,hugetlb)
systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw)
192.168.3.182:/home/sm/share on /var/lib/nova/instances type nfs (rw,vers=4,addr=192.168.3.182,clientaddr=192.168.3.183)
4、直接在computer2機器上建立虛擬機器例項
[email protected]:~$ nova boot --availability-zone nova:computer2 --flavor m1.tiny - -image cirros-0.3.2-x86_64 --nic net-id=1dfa9da1-43fd-4128-b9a0-2ca76a664933 --security-group default --key-name sm-key v4
5、檢視v4例項資訊
[email protected]:~$ nova show v4
+--------------------------------------+------------------------------------------------------------+
| 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-0000003d |
| OS-EXT-STS:power_state | 1 |
| OS-EXT-STS:task_state | - |
| OS-EXT-STS:vm_state | active |
| OS-SRV-USG:launched_at | 2015-05-14T14:00:04.000000 |
| OS-SRV-USG:terminated_at | - |
| accessIPv4 | |
| accessIPv6 | |
| config_drive | |
| created | 2015-05-11T22:17:59Z |
| flavor | m1.tiny (1) |
| hostId | 890c461c5a827fb0e8465b3410acc939fb2804876ff9a30300dd3f90 |
| id | a03ff111-7d0d-4fd3-9081-16bbab99e2d0 |
| image | cirros-0.3.2-x86_64 (f2b0f15b-bd5e-4766-973c-24547c1faf03) |
| key_name | sm-key |
| metadata | {} |
| name | v4 |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| security_groups | default |
| sharednet1 network | 192.168.3.118 |
| status | ACTIVE |
| tenant_id | b500268a41e34752aba847c7ea464870 |
| updated | 2015-05-11T22:18:13Z |
| user_id | 9b1cdfc2b5614eb39f042317f54a286c |
+--------------------------------------+------------------------------------------------------------+
我們可以看到v4預設在計算節點computer2執行
6、進行遷移
[email protected]:~$ nova live-migration v4 computer3
我們可以看到,與塊遷移相比,其實就沒有新增--block-migration引數,其他與快遷移都是一樣的。如果執行不報錯,就沒有問題,如果有錯誤,檢視/var/log/nova/nova-compute.log日誌.
與快遷移對比,明顯感覺這個速度更快,當然理解原理也不難有這個效果了。
7、檢視v4遷移後的資訊
[email protected]:~$ nova show v4
+--------------------------------------+------------------------------------------------------------+
| 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-0000003d |
| OS-EXT-STS:power_state | 1 |
| OS-EXT-STS:task_state | - |
| OS-EXT-STS:vm_state | active |
| OS-SRV-USG:launched_at | 2015-05-14T14:00:04.000000 |
| OS-SRV-USG:terminated_at | - |
| accessIPv4 | |
| accessIPv6 | |
| config_drive | |
| created | 2015-05-11T22:17:59Z |
| flavor | m1.tiny (1) |
| hostId | c9741df1176a21c74117b5a53e1576195f4970e3c6d3448bda323b1e |
| id | a03ff111-7d0d-4fd3-9081-16bbab99e2d0 |
| image | cirros-0.3.2-x86_64 (f2b0f15b-bd5e-4766-973c-24547c1faf03) |
| key_name | sm-key |
| metadata | {} |
| name | v4 |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| security_groups | default |
| sharednet1 network | 192.168.3.118 |
| status | ACTIVE |
| tenant_id | b500268a41e34752aba847c7ea464870 |
| updated | 2015-05-11T22:19:47Z |
| user_id | 9b1cdfc2b5614eb39f042317f54a286c |
+--------------------------------------+------------------------------------------------------------+