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


參考文檔:

  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環境中,數據存儲可分為臨時性存儲與永久性存儲。

臨時性存儲:主要由本地文件系統提供,並主要用於nova虛擬機的本地系統與臨時數據盤,以及存儲glance上傳的系統鏡像;

永久性存儲:主要由cinder提供的塊存儲與swift提供的對象存儲構成,以cinder提供的塊存儲應用最為廣泛,塊存儲通常以雲盤的形式掛載到虛擬機中使用。

Openstack中需要進行數據存儲的三大項目主要是nova項目(虛擬機鏡像文件),glance項目(共用模版鏡像)與cinder項目(塊存儲)。

下圖為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服務運行在相同節點,不必重復操作。

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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM