參考文檔:html
- Install-guide:https://docs.openstack.org/install-guide/
- OpenStack High Availability Guide:https://docs.openstack.org/ha-guide/index.html
- 理解Pacemaker:http://www.cnblogs.com/sammyliu/p/5025362.html
二十.Nova集成Ceph
1. 配置ceph.conf
# 若是須要從ceph rbd中啓動虛擬機,必須將ceph配置爲nova的臨時後端; # 推薦在計算節點的配置文件中啓用rbd cache功能; # 爲了便於故障排查,配置admin socket參數,這樣每一個使用ceph rbd的虛擬機都有1個socket將有利於虛擬機性能分析與故障解決; # 相關配置只涉及所有計算節點ceph.conf文件的[client]與[client.cinder]字段,以compute01節點爲例 [root@compute01 ~]# vim /etc/ceph/ceph.conf [client] rbd cache = true rbd cache writethrough until flush = true admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok log file = /var/log/qemu/qemu-guest-$pid.log rbd concurrent management ops = 20 [client.cinder] keyring = /etc/ceph/ceph.client.cinder.keyring # 建立ceph.conf文件中指定的socker與log相關的目錄,並更改屬主 [root@compute01 ~]# mkdir -p /var/run/ceph/guests/ /var/log/qemu/ [root@compute01 ~]# chown qemu:libvirt /var/run/ceph/guests/ /var/log/qemu/
2. 配置nova.conf
# 在所有計算節點配置nova後端使用ceph集羣的vms池,以compute01節點爲例 [root@compute01 ~]# vim /etc/nova/nova.conf [libvirt] images_type = rbd images_rbd_pool = vms images_rbd_ceph_conf = /etc/ceph/ceph.conf rbd_user = cinder # uuid先後一致 rbd_secret_uuid = 10744136-583f-4a9c-ae30-9bfb3515526b disk_cachemodes="network=writeback" live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED" # 禁用文件注入 inject_password = false inject_key = false inject_partition = -2 # 虛擬機臨時root磁盤discard功能,」unmap」參數在scsi接口類型磁盤釋放後可當即釋放空間 hw_disk_discard = unmap # 原有配置 virt_type=kvm # 變動配置文件,重啓計算服務 [root@compute01 ~]# systemctl restart libvirtd.service openstack-nova-compute.service [root@compute01 ~]# systemctl status libvirtd.service openstack-nova-compute.service
3. 配置live-migration
1)修改/etc/libvirt/libvirtd.conf
# 在所有計算節點操做,以compute01節點爲例; # 如下給出libvirtd.conf文件的修改處所在的行num [root@compute01 ~]# egrep -vn "^$|^#" /etc/libvirt/libvirtd.conf # 取消如下三行的註釋 22:listen_tls = 0 33:listen_tcp = 1 45:tcp_port = "16509" # 取消註釋,並修改監聽端口 55:listen_addr = "172.30.200.41" # 取消註釋,同時取消認證 158:auth_tcp = "none"
2)修改/etc/sysconfig/libvirtd
# 在所有計算節點操做,以compute01節點爲例; # 如下給出libvirtd文件的修改處所在的行num [root@compute01 ~]# egrep -vn "^$|^#" /etc/sysconfig/libvirtd # 取消註釋 9:LIBVIRTD_ARGS="--listen"
3)設置iptables
# live-migration時,源計算節點主動鏈接目的計算節點tcp16509端口,可使用」virsh -c qemu+tcp://{node_ip or node_name}/system」鏈接目的計算節點測試; # 遷移先後,在源目計算節點上的被遷移instance使用tcp49152~49161端口作臨時通訊; # 因虛擬機已經啓用iptables相關規則,此時切忌隨意重啓iptables服務,儘可能使用插入的方式添加規則; # 同時以修改配置文件的方式寫入相關規則,切忌使用」iptables saved」命令; # 在所有計算節點操做,以compute01節點爲例 [root@compute01 ~]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 16509 -j ACCEPT [root@compute01 ~]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 49152:49161 -j ACCEPT
4)重啓服務
# libvirtd與nova-compute服務都須要重啓 [root@compute01 ~]# systemctl restart libvirtd.service openstack-nova-compute.service # 查看服務 [root@compute01 ~]# netstat -tunlp | grep 16509
4. 驗證
若是使用ceph提供的volume作啓動盤,即虛擬機運行鏡像文件存放在共享存儲上,此時能夠方便地進行live-migration。node
1)建立基於ceph存儲的bootable存儲卷
# 當nova從rbd啓動instance時,鏡像格式必須是raw格式,不然虛擬機在啓動時glance-api與cinder均會報錯; # 首先進行格式轉換,將*.img文件轉換爲*.raw文件 [root@controller01 ~]# qemu-img convert -f qcow2 -O raw ~/cirros-0.3.5-x86_64-disk.img ~/cirros-0.3.5-x86_64-disk.raw # 生成raw格式鏡像 [root@controller01 ~]# openstack image create "cirros-raw" \ --file ~/cirros-0.3.5-x86_64-disk.raw \ --disk-format raw --container-format bare \ --public
# 使用新鏡像建立bootable卷 [root@controller01 ~]# cinder create --image-id a95cee9a-4493-42ae-98e9-e5d34e4dee7a --volume-type ceph --name ceph-bootable1 2 # 查看新建立的bootable卷 [root@controller01 ~]# cinder list
# 從基於ceph後端的volumes新建實例; # 「--boot-volume」指定具備」bootable」屬性的卷,啓動後,虛擬機運行在volumes卷 [root@controller01 ~]# nova boot --flavor m1.tiny \ --boot-volume db0f83c0-14f7-4548-8807-4b1f593630a4 \ --nic net-id=91e78b9c-cfcd-4af2-851a-a27839edf571 \ --security-group default \ cirros-cephvolumes-instance1
2)從ceph rbd啓動虛擬機
# --nic:net-id指網絡id,非subnet-id; # 最後「cirros-cephrbd-instance1」爲instance名 [root@controller01 ~]# nova boot --flavor m1.tiny --image cirros-raw --nic net-id=91e78b9c-cfcd-4af2-851a-a27839edf571 --security-group default cirros-cephrbd-instance1 # 查詢生成的instance [root@controller01 ~]# nova list
# 查看生成的instance的詳細信息 [root@controller01 ~]# nova show 7648251c-62a1-4f98-ba3f-e5f30f5804b4
# 驗證是否從ceph rbd啓動 [root@controller01 ~]# rbd ls vms
3)對rbd啓動的虛擬機進行live-migration
# 使用」nova show 7648251c-62a1-4f98-ba3f-e5f30f5804b4」得知從rbd啓動的instance在遷移前位於compute02節點; # 或使用」nova hypervisor-servers compute02」進行驗證; [root@controller01 ~]# nova live-migration cirros-cephrbd-instance1 compute01 # 遷移過程當中可查看狀態 [root@controller01 ~]# nova list
# 遷移完成後,查看instacn所在節點; # 或使用」nova show 7648251c-62a1-4f98-ba3f-e5f30f5804b4」命令查看」hypervisor_hostname」 [root@controller01 ~]# nova hypervisor-servers compute02 [root@controller01 ~]# nova hypervisor-servers compute01