本系列文章會深入研究 Ceph 以及 Ceph 和 OpenStack 的內建:
為了深入學習 Ceph 以及 Ceph 和 OpenStack 的內建,搭建了如下的測試環境:

硬體環境:
System X 伺服器一台,CPU、記憶體和磁盤空間足夠
伺服器隻有一個實體網卡
軟體環境:
伺服器安裝 RedHat 6.5 作業系統
OpenStack 使用 Ubuntu 鏡像庫中的 Kilo master 版本
每個節點作業系統采用 Ubuntu 14.04 伺服器版
從上圖可見,該環境使用三個虛機作為Ceph節點,每個節點上增加兩個虛拟磁盤 vda 和 vdb 作為 OSD 存儲磁盤,每個節點上安裝 MON,前兩個節點上安裝 MDS。三個節點使用實體網絡進行通信。
(0)準備好三個節點 ceph{1,2,3}:安裝作業系統、設定 NTP、配置 ceph1 可以通過 ssh 無密碼通路其餘節點(依次運作 ssh-keygen,ssh-copy-id ceph2,ssh-copy-id ceph3,修改 /etc/ssh/sshd_config 檔案中的 PermitRootLogin yes 來使得 ssh 支援 root 使用者)
節點名稱
IP 位址
部署程序
資料盤
ceph1
192.168.1.194
1MON+1MDS+2OSD
/dev/vda, /dev/vdb
ceph2
192.168.1.195
/dev/vda, /dev/vdb
ceph3
192.168.1.218
1MON+1OSD
(1)在 ceph1 上安裝 ceph-deploy,接下來會使用這個工具來部署 ceph 叢集
(2)在ceph 上,運作 ceph-deploy install ceph{1,2,3} 指令在各節點上安裝 ceph 軟體。安裝好後可以檢視 ceph 版本:
(3)在 ceph1 上執行以下指令建立 MON 叢集
完成後檢視 MON 叢集狀态:
(4)在各節點上準備資料盤,隻需要在 fdisk -l 指令輸出中能看到資料盤即可,不需要做任何别的操作,然後在 ceph1 上執行如下指令添加 OSD
該指令詳細資訊:
格式: ceph-deploy osd prepare {node-name}:{data-disk}[:{journal-disk}]
其中,node-name 表示待建立 OSD 的目标 Ceph 節點;data-disk 表示 OSD 的資料盤;journal-disk 表示日志盤,它可以是一個單獨的磁盤,後者 OSD 資料盤上的一個分區,或者一個 SSD 磁盤上的分區。
比如:ceph-deploy osd prepare osdserver1:sdb:/dev/ssd 表示在 osdserver1 上使用 sdb 磁盤做資料盤和 /dev/ssd 分區做日志分區來建立一個 OSD 守護程序。
要使得多個OSD資料盤共享一個單獨的 SSD 磁盤,首先要使用 fdisk 對該磁盤進行分區,比如下面的指令将 /dev/sdd 分為兩個區:
結果是:
此時,執行下面的指令來建立并激活 OSD:
注意prepare 和 activate 兩個指令參數的差別,前者是使用磁盤,後者是使用分區。
備注:看起來最上面的指令有誤,需要修改,TBD。它其實是使用了 /data/osd 目錄存放資料,而磁盤 /dev/vda 作為日志盤。
另外,如果是第二次安裝的話,需要删除已經存在的 /dev/sdd1 這樣的分區,然後再使用指令 ceph-deploy disk zap /dev/sdd 來将其資料全部删除。
完成之後,會将 osd 盤挂載到 /var/lib/ceph/osd 下面的兩個目錄,目錄名為 ceph-<osd id>
而日志盤則會在各自的 osd 目錄下建立一個 link,比如 /var/lib/ceph/osd/ceph-2/journal:
完成後檢視 OSD 狀态:
(5)将 Admin key 複制到其餘各個節點,然後安裝 MDS 叢集
完成後可以使用 “ceph mds” 指令來操作 MDS 叢集,比如檢視狀态:
看起來 MDS 叢集是個 active/standby 模式的叢集。
至此,Ceph 叢集部署完成,可以使用 ceph 指令檢視叢集狀态:
在這過程中,失敗和反複是難免的,在任何時候,可以使用如下的指令将已有的配置擦除然後從頭安裝:
為友善起見,管理網絡直接連接配接實體網卡;租戶網絡就比較麻煩一點,因為機器上隻有一個實體網卡,幸虧所有的計算節點都在同一個實體伺服器上,是以可以:
1. 在實體伺服器上,建立一個虛拟網卡 tap0,再建立一個 linux bridge ‘mgtbr0’
2. 這是 mgtbr0 的配置腳本:
3. 在網絡和各計算節點上,增加一塊網卡,連接配接到實體伺服器上的 bridge。
把所有的節點連接配接到管理和租戶網絡後,在實體伺服器上看到的 linux bridge 是這樣子:
本例中,OpenStack Cinder、Glance 和 Nova 分别會将卷、鏡像和虛機鏡像儲存到 Ceph 分布式塊裝置(RBD)中。
(1)在 ceph 中建立三個 pool 分别給 Cinder,Glance 和 nova 使用
(2)将 ceph 的配置檔案傳到 ceph client 節點 (glance-api, cinder-volume, nova-compute andcinder-backup)上:
(3)在各節點上安裝ceph 用戶端
(4)配置 cinder 和 glance 使用者通路 ceph 的權限
(5)将 client.cinder 和 client.glance 的 keystring 檔案拷貝到各節點并設定通路權限
(6)在 compute1 和 compute2 節點上做 libvirt 配置
注意:如果在建立 image 時候出現 AttributeError: 'NoneType' object has no attribute 'Rados' 錯誤,則需要安裝 python-rados
注意:
(1)cinder-volume 節點上的 ceph 配置檔案是必須存在的,因為 cinder-volume 需要使用它來建立和 Ceph 叢集的連接配接,不存在的話則會報錯誤。
cinder/volume/drivers/rbd.py 檔案:
缺失 ceph 配置檔案時 cinder-volume 報錯:
對 cinder-volume 來說,它所需要的 ceph.conf 中的資訊主要是 MON 伺服器的位址,以及cinder 所使用的使用者的驗證方式,是以需要将keystring 檔案 ceph.client.cinder.keyring 放在同一個目錄下面。
(2)可以支援 multi-backend 配置,在每個 backend 中使用不同的 Ceph pool,甚至使用不同的 rbd_ceph_conf 來支援多個 Ceph 叢集。
(1)如果隻是将 ceph volume 挂接到 Nova 虛機的話,nova-compute 是不需要從 ceph 配置檔案中讀取 MON 伺服器的資訊的,是以,在計算節點上,缺失 ceph 配置檔案其實是不影響将 ceph 卷挂接到 nova 虛機的。
是以,如果隻是需要支援将 Ceph 卷挂接到 nova 虛機的話,可以在計算節點上的 ceph 配置檔案中,可以隻保留 client 部分的配置資訊,包括 RBD Cache 的配置以及日志配置等,這樣就可以避免和具體哪一個 Ceph 叢集的硬綁定。比如:
(2)如果使用者選擇将 boot disk 放在 Ceph 中的話,需要在 nova.conf 中配置 images_rbd_ceph_conf ,這是因為就像 cinder-volume 一樣,nova-compute 需要使用 ceph.conf 和其它參數建立和 Ceph 的連接配接,然後使用 ”rbd import --pool “指令來建立 image。
這種情況下,如果沒有 ceph.conf 檔案的話,啟動 nova-compute 服務時就會報錯:
是以,此時的 nova-compute 和 glance 以及 cinder-volume 的角色沒什麼不同,它們也需要使用相同的 ceph 配置檔案。
建立兩個 ceph pool
配置并啟動兩個 nova-compute程序(這需要配置DNS解析或者在/etc/hosts定義你的主機名在你的openstack控制節點)
建立兩個邏輯上獨立的Host aggregates,并且将compute-ceph1和compute-ceph2分别加入
使用 scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,AggregateInstanceExtraSpecsFilter,確定新的flavor選擇邏輯的aggregates,其實就是選擇nova執行個體運作在哪個ceph存儲池
最後的實作效果是:
至此,環境安裝和配置完成,通過 cinder,glance 和 nova 指令建立的卷、鏡像和虛機的鏡像都會被儲存在 Ceph 的 RBD 中。接下來的文章會深入分析其中的原理和實作。
參考文檔:
<a href="http://docs.ceph.com/docs/master/rbd/rbd-openstack/" target="_blank">http://docs.ceph.com/docs/master/rbd/rbd-openstack/</a>
本文轉自SammyLiu部落格園部落格,原文連結:http://www.cnblogs.com/sammyliu/p/4804037.html,如需轉載請自行聯系原作者