1. 背景說明python
nova負責虛擬機的生命週期管理,包括建立,刪除,重建,開機,關機,重啓,快照等,做爲openstack的核心,nova負責IaaS中計算重要的職責,其中nova的存儲格外重要,默認狀況下,nova將instance的數據存放在/var/lib/nova/instances/%UUID目錄下,使用本地的存儲空間。使用這種方式帶來的好處是:簡單,易實現,速度快,故障域在一個可控制的範圍內。然而,缺點也很是明顯:compute出故障,上面的虛擬機down機時間長,無法快速恢復,此外,一些特性如熱遷移live-migration,虛擬機容災nova evacuate等高級特性,將沒法使用,對於後期的雲平臺建設,有明顯的缺陷。
bootstrap
2.關於分佈式存儲vim
使用openstack時,是否使用分佈式文件系統,是一個很是值得思考和深思的問題,使用本地的優勢很是明顯,同時帶來的缺點也顯而易見,使用分佈式存儲,技術上的空白和技術上的難度,也是值得思考的一個問題。同時,分佈式存儲又改如何選擇,應該選擇簡單的gluserfs仍是呼聲較高的ceph,這些都是構建雲平臺須要考慮的地方,同時openstack和ceph都存在一些坑,須要在技術上有足夠的積累底蘊纔可以控制起來。若是有須要經過openstack在生產環境下構建雲平臺,我建議初期使用本地的存儲,充分利用KVM和本地文件系統的穩定,性能,後續有足夠的技術能夠逐步灰度至分佈式存儲glusterfs或者ceph中。建議使用ceph,若是基於技術層面的考慮,能夠考慮使用glusterfs,glusterfs以其簡單,易管理。
ssh
3.nova與ceph結合分佈式
一、ceph中建立存儲池poolide
[root@controller_10_1_2_230 ~]# ceph osd pool create vms 128 #建立一個pools,名字爲vms,128個pg pool 'vms' created [root@controller_10_1_2_230 ~]# ceph osd lspools #查看pools建立的狀況 0 rbd,1 p_w_picpaths,2 vms, [root@controller_10_1_2_230 ~]# ceph osd pool stats pool rbd id 0 nothing is going on pool p_w_picpaths id 1 nothing is going on pool vms id 2 nothing is going on
二、nova-compute節點安裝和配置客戶端性能
[root@compute1_10_1_2_232 ~]# yum install python-rbd ceph -y #安裝客戶端包 [root@controller_10_1_2_230 ~]# scp /etc/ceph/ceph.conf root@10.1.2.232:/etc/ceph/ceph.conf #拷貝ceph配置文件
三、配置ceph認證,讓nova用戶可以訪問vms池、p_w_picpaths池ui
[root@controller_10_1_2_230 ~]# ceph auth get-or-create client.nova mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=vms, allow rwx pool=p_w_picpaths' [client.nova] key = AQBLXqpWB8HsChAA6hGUBT5JNrFGD116uy+nmg== #查看ceph的認證信息 [root@controller_10_1_2_230 ~]# ceph auth list installed auth entries: osd.0 key: AQDsx6lWYGehDxAAGwcYP9jDvH2Zaa8JlGwj1Q== caps: [mon] allow profile osd caps: [osd] allow * osd.1 key: AQD1x6lWQCYBERAAjIKO1LVpj8FvVefDvNQZSA== caps: [mon] allow profile osd caps: [osd] allow * client.admin key: AQCexqlWQL6OGBAA2v5LsYEB5VgLyq/K2huY3A== caps: [mds] allow caps: [mon] allow * caps: [osd] allow * client.bootstrap-mds key: AQCexqlWUMNRMRAAZEp/UlhQuaixMcNy5d5pPw== caps: [mon] allow profile bootstrap-mds client.bootstrap-osd key: AQCexqlWQFfpJBAAfPCx4sTLNztBESyFKys9LQ== caps: [mon] allow profile bootstrap-osd client.bootstrap-rgw key: AQAR7alWok0SGhAAFtOo0PFsZuVzczMvJox1Wg== caps: [mon] allow profile bootstrap-rgw client.glance key: AQAl76lWHMySHxAANTfXv3JQ70GCEBOZI5abcQ== caps: [mon] allow r caps: [osd] allow class-read object_prefix rbd_children, allow rwx pool=p_w_picpaths client.nova key: AQBLXqpWB8HsChAA6hGUBT5JNrFGD116uy+nmg== caps: [mon] allow r caps: [osd] allow class-read object_prefix rbd_children, allow rwx pool=vms, allow rwx pool=p_w_picpaths #添加了nova用戶的認證信息
四、將ceph認證的key拷貝至計算節點
加密
a、查看client.nova的key [root@controller_10_1_2_230 ~]# ceph auth get-or-create client.nova [client.nova] key = AQBLXqpWB8HsChAA6hGUBT5JNrFGD116uy+nmg== b、將key拷貝至遠端 [root@controller_10_1_2_230 ~]# scp ceph.client.nova.kering root@10.1.2.232:/etc/ceph/ ceph.client.nova.kering c、生成nova臨時的key [root@controller_10_1_2_230 ~]# ceph auth get-key client.nova | ssh root@10.1.2.232 tee client.nova.key
五、計算節點的libvirt使用ceph的keyspa
a、生成uuid號 [root@compute1_10_1_2_232 ~]# uuidgen 0d154ad2-ec21-4200-952f-7551503da8a1 b、生成加密文件 vim secret.xml <secret ephemeral='no' private='no'> <uuid>0d154ad2-ec21-4200-952f-7551503da8a1</uuid> <usage type='ceph'> <name>client.cinder secret</name> </usage> </secret> c、加載加密文件 [root@compute1_10_1_2_232 ~]# virsh secret-define --file secret.xml Secret 0d154ad2-ec21-4200-952f-7551503da8a1 created d、配置libvirt加密,使用client.nova.key [root@compute1_10_1_2_232 ~]# virsh secret-set-value --secret 0d154ad2-ec21-4200-952f-7551503da8a1 --base64 $(cat /root/client.nova.key) Secret value set e、查看libvirt定義的key [root@compute1_10_1_2_232 ~]# virsh secret-list UUID Usage ----------------------------------------------------------- 0d154ad2-ec21-4200-952f-7551503da8a1 Unused