參考文檔:
- 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。
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