高可用OpenStack(Queen版)集羣-14.Openstack集成Ceph準備

參考文檔:html

  1. Install-guide:https://docs.openstack.org/install-guide/
  2. OpenStack High Availability Guide:https://docs.openstack.org/ha-guide/index.html
  3. 理解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集羣的邏輯圖:後端

  1. ceph與openstack集成主要用到ceph的rbd服務,ceph底層爲rados存儲集羣,ceph經過librados庫實現對底層rados的訪問;
  2. openstack各項目客戶端調用librbd,再由librbd調用librados訪問底層rados;
  3. 實際使用中,nova須要使用libvirtdriver驅動以經過libvirt與qemu調用librbd;cinder與glance可直接調用librbd;
  4. 寫入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)

相關文章
相關標籤/搜索