參考文檔: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
十八.Openstack集成Ceph準備
Openstack環境中,數據存儲可分爲臨時性存儲與永久性存儲。python
臨時性存儲:主要由本地文件系統提供,並主要用於nova虛擬機的本地系統與臨時數據盤,以及存儲glance上傳的系統鏡像;算法
永久性存儲:主要由cinder提供的塊存儲與swift提供的對象存儲構成,以cinder提供的塊存儲應用最爲普遍,塊存儲一般以雲盤的形式掛載到虛擬機中使用。swift
Openstack中須要進行數據存儲的三大項目主要是nova項目(虛擬機鏡像文件),glance項目(共用模版鏡像)與cinder項目(塊存儲)。vim
下圖爲cinder,glance與nova訪問ceph集羣的邏輯圖:後端
- ceph與openstack集成主要用到ceph的rbd服務,ceph底層爲rados存儲集羣,ceph經過librados庫實現對底層rados的訪問;
- openstack各項目客戶端調用librbd,再由librbd調用librados訪問底層rados;
- 實際使用中,nova須要使用libvirtdriver驅動以經過libvirt與qemu調用librbd;cinder與glance可直接調用librbd;
- 寫入ceph集羣的數據被條帶切分紅多個object,object經過hash函數映射到pg(構成pg容器池pool),而後pg經過幾圈crush算法近似均勻地映射到物理存儲設備osd(osd是基於文件系統的物理存儲設備,如xfs,ext4等)。
1. 建立pool
# Ceph默認使用pool的形式存儲數據,pool是對若干pg進行組織管理的邏輯劃分,pg裏的對象被映射到不一樣的osd,所以pool分佈到整個集羣裏。 # 能夠將不一樣的數據存入1個pool,但如此操做不便於客戶端數據區分管理,所以通常是爲每一個客戶端分別建立pool。 # 爲cinder,nova,glance分別建立pool,命名爲:volumes,vms,images # 建立pool,須要覆蓋默認的pg num,官方文檔對pg num的數量有以下建議:http://docs.ceph.com/docs/master/rados/operations/placement-groups/; # 同時綜合考量所有pool的pg num總和的上限:pg num * 副本數量 < mon_max_pg_per_osd(默認200) * num_in_osds(osd總進程數); # pool建立在monitor節點操做,以controller01節點爲例; # 這裏volumes池是永久性存儲,vms是實例臨時後端存儲,images是鏡像存儲 [root@controller01 ~]# su - cephde [cephde@controller01 ~]$ sudo ceph osd pool create volumes 256 [cephde@controller01 ~]$ sudo ceph osd pool create vms 256 [cephde@controller01 ~]$ sudo ceph osd pool create images 256
# 查看狀態 [cephde@controller01 ~]$ sudo ceph pg stat [cephde@controller01 ~]$ sudo ceph osd lspools
2. 安裝Ceph客戶端
# glance-api服務所在節點須要安裝python-rbd; # 這裏glance-api服務運行在3個控制節點,以controller01節點爲例 [root@controller01 ~]# yum install python-rbd -y # cinder-volume與nova-compute服務所在節點須要安裝ceph-common; # 這裏cinder-volume與nova-compute服務運行在3個計算(存儲)節點,以compute01節點爲例 [root@compute01 ~]# yum install ceph-common -y
3. 受權設置
1)建立用戶
# ceph默認啓用cephx authentication(見ceph.conf),須要爲nova/cinder與glance客戶端建立新的用戶並受權; # 可在管理節點上分別爲運行cinder-volume與glance-api服務的節點建立client.glance與client.cinder用戶並設置權限; # 針對pool設置權限,pool名對應建立的pool [root@controller01 ~]# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' [root@controller01 ~]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
2)推送client.glance祕鑰
# 將建立client.glance用戶生成的祕鑰推送到運行glance-api服務的節點 [root@controller01 ~]# ceph auth get-or-create client.glance | tee /etc/ceph/ceph.client.glance.keyring [root@controller01 ~]# ceph auth get-or-create client.glance | ssh root@controller02 tee /etc/ceph/ceph.client.glance.keyring [root@controller01 ~]# ceph auth get-or-create client.glance | ssh root@controller03 tee /etc/ceph/ceph.client.glance.keyring # 同時修改祕鑰文件的屬主與用戶組 [root@controller01 ~]# chown glance:glance /etc/ceph/ceph.client.glance.keyring [root@controller01 ~]# ssh root@controller02 chown glance:glance /etc/ceph/ceph.client.glance.keyring [root@controller01 ~]# ssh root@controller03 chown glance:glance /etc/ceph/ceph.client.glance.keyring
3)推送client.cinder祕鑰(nova-volume)
# 將建立client.cinder用戶生成的祕鑰推送到運行cinder-volume服務的節點 [root@controller01 ~]# ceph auth get-or-create client.cinder | ssh root@compute01 tee /etc/ceph/ceph.client.cinder.keyring [root@controller01 ~]# ceph auth get-or-create client.cinder | ssh root@compute02 tee /etc/ceph/ceph.client.cinder.keyring [root@controller01 ~]# ceph auth get-or-create client.cinder | ssh root@compute03 tee /etc/ceph/ceph.client.cinder.keyring # 同時修改祕鑰文件的屬主與用戶組 [root@controller01 ~]# ssh root@compute01 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring [root@controller01 ~]# ssh root@compute02 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring [root@controller01 ~]# ssh root@compute03 chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
4)推送client.cinder祕鑰(nova-compute)
這裏nova-compute服務與nova-volume服務運行在相同節點,沒必要重複操做。api
5)libvirt祕鑰
nova-compute所在節點須要將client.cinder用戶的祕鑰文件存儲到libvirt中;當基於ceph後端的cinder卷被attach到虛擬機實例時,libvirt須要用到該祕鑰以訪問ceph集羣; # 在管理節點向計算(存儲)節點推送client.cinder祕鑰文件,生成的文件是臨時性的,將祕鑰添加到libvirt後可刪除 [root@controller01 ~]# ceph auth get-key client.cinder | ssh root@compute01 tee /etc/ceph/client.cinder.key [root@controller01 ~]# ceph auth get-key client.cinder | ssh root@compute02 tee /etc/ceph/client.cinder.key [root@controller01 ~]# ceph auth get-key client.cinder | ssh root@compute03 tee /etc/ceph/client.cinder.key # 在計算(存儲)節點將祕鑰加入libvirt,以compute01節點爲例; # 首先生成1個uuid,所有計算(存儲)節點可共用此uuid(其餘節點不用操做此步); # uuid後續配置nova.conf文件時也會用到,請保持一致 [root@compute01 ~]# uuidgen
# 添加祕鑰 [root@compute01 ~]# cd /etc/ceph [root@compute01 ceph]# touch secret.xml [root@compute01 ceph]# vim secret.xml <secret ephemeral='no' private='no'> <uuid>10744136-583f-4a9c-ae30-9bfb3515526b</uuid> <usage type='ceph'> <name>client.cinder secret</name> </usage> </secret> [root@compute01 ceph]# virsh secret-define --file secret.xml [root@compute01 ceph]# virsh secret-set-value --secret 10744136-583f-4a9c-ae30-9bfb3515526b --base64 $(cat /etc/ceph/client.cinder.key)