Openstack 之使用外部ceph存儲
上面左邊是我的個人微信,如需進一步溝通,請加微信。 右邊是我的公眾號“Openstack私有雲”,如有興趣,請關註。
繼上篇《Ceph 之 塊設備、文件系統、對象存儲的使用》,可以獨立於openstack單獨部署一套ceph集群,給openstack使用,這樣openstack本身部署的時候不要啟用ceph,在使用塊設備的相關組建上配置使用外部ceph集群,可以有更靈活的架構選擇,比如虛擬機nova塊設備使用一個快速固態硬盤存儲池,cinder-backup卷備份使用慢速硬盤存儲池,這樣對隔離故障域也很有好處。本次實驗使用如下環境:
ceph集群環境:
系統centos7.4
ceph版本 ceph version 10.2.10
測試服務器為kvm虛擬機(openstack虛擬機)
ceph集群服務器分配如下:
節點 | 服務 | cluster network |
---|---|---|
ceph-1(admin-node) | osd.{1,2,},mon.ceph-1 | eth0:192.168.1.161/24 |
ceph-2 | osd.{3,4},mon.ceph-2 | eth0:192.168.1.162/24 |
ceph-3 | osd.{5,6},mon.ceph-3 | eth0:192.168.1.163/24 |
ceph每個節點在原來系統盤的基礎上增加2塊osd盤/dev/vdb 、/dev/vdc,集群共有6個osd
進程,3個monitor
進程。管理節點用作執行ceph-deploy
命令,使用ceph-1節點充當。
Openstack集群環境:
系統centos7.3
Openstack版本 Ocata 4.0.2.1
Openstack集群服務器分配如下:
節點 | 服務 | IP |
control01 | control+compute+network | 192.168.1.121 |
control02 | control+compute+network | 192.168.1.122 |
control03 | control+compute+network | 192.168.1.123 |
節點control01-control03作為ceph集群的使用者(client),同一個局域網。
操作思路:
首先找到Opesntack官網中關於使用Kolla部署外部ceph的操作方法:
https://docs.openstack.org/kolla-ansible/latest/reference/external-ceph-guide.html#requirements
主要的思路是:
1、在ceph集群中創建相應的pool:
a、創建rbd塊設備的pool池“vms”作為nova虛擬機使用的存儲池;
b、創建rbd塊設備的pool池“images” 作為glance鏡像的存儲池;
c、創建rbd塊設備的pool池“volumes” 作為cinder的存儲池;
d、創建rbd塊設備的pool池“backups” 作為cinder卷備份的存儲池;
2、修改kolla全局配置文件globals.yml,關閉openstack自身的ceph存儲,打開nova、glance、cinder、cinder-backup等組件使用ceph的開關;
3、配置外部ceph,使用kolla的合並配置特性,對相應的組件的ceph存儲pool池進行配置;
4、使用kolla-ansible deploy 重新部署;
操作步驟:
1、在ceph集群中創建相應的pool:
ceph osd pool create images 128 ceph osd pool create volumes 128 ceph osd pool create backups 128 ceph osd pool create vms 128
2、在ceph集群中創建nova、glance、cinder、cinder-backup等組件使用ceph的用戶並生產keyring文件,在ceph-1服務器中執行:
cd /etc/ceph/ ceph auth get-or-create client.cinder mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' -o ceph.client.cinder.keyring ceph auth get-or-create client.glance mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=images' -o ceph.client.glance.keyring ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=backups, allow rwx pool=volumes' -o ceph.client.cinder-backup.keyring ceph auth get-or-create client.nova mon 'allow r' osd 'allow object_prefix rbd_children, allow rwx pool=vms, allow rwx pool=volumes, allow rx pool=images' -o ceph.client.nova.keyring //小提示:如果有參考系統,比如其他正常運行的平臺,可以使用ceph auth get <ceph用戶名> 進行查詢,可以比較確切的指導具體的參數。另外,如果上面的參數需要修改,只需要修改相關參數之後重新執行即可。
拷貝ceph-1上/etc/ceph 目錄下的文件ceph.conf 和 ceph.client.glance.keyring 文件到/etc/kolla/config/glance/目錄下,kolla在部署的時候會將這個目錄下ceph.*拷貝到對應容器的/etc/ceph/目錄下。
scp /etc/ceph/{ceph.conf,ceph.client.glance.keyring} control01://etc/kolla/config/glance/
拷貝ceph-1上/etc/ceph 目錄下的文件ceph.conf 和 ceph.client.cinder.keyring 文件到/etc/kolla/config/cinder/cinder-volume/以及/etc/kolla/config/cinder/cinder-backup/目錄下,kolla在部署的時候會將這個目錄下ceph.*拷貝到對應容器的/etc/ceph/目錄下。
scp /etc/ceph/{ceph.conf,ceph.client.cinder.keyring} control01://etc/kolla/config/cinder/cinder-volume/ scp /etc/ceph/{ceph.conf,ceph.client.cinder.keyring} control01://etc/kolla/config/cinder/cinder-backup/
拷貝ceph-1上/etc/ceph 目錄下的文件 ceph.client.cinder-backup.keyring 文件到/etc/kolla/config/cinder/cinder-backup目錄下,kolla在部署的時候會將這個目錄下ceph.*拷貝到對應容器的/etc/ceph/目錄下。
scp /etc/ceph/ceph.client.cinder-backup.keyring control01://etc/kolla/config/cinder/cinder-backup/
拷貝ceph-1上/etc/ceph 目錄下的文件ceph.conf 和 ceph.client.nova.keyring文件以及ceph.client.cinder.keyring 到/etc/kolla/config/nova/目錄下,kolla在部署的時候會將這個目錄下ceph.*拷貝到對應容器的/etc/ceph/目錄下。
scp /etc/ceph/{ceph.conf,ceph.client.nova.keyring,ceph.client.cinder.keyring} control01://etc/kolla/config/nova/ //註意,官網上沒有要求拷貝ceph.client.cinder.keyring 這個文件,但是在部署的過程中要求這個文件。
3、修改kolla全局配置文件/etc/kolla/globals.yml,關閉openstack自身的ceph存儲,打開nova、glance、cinder、cinder-backup等組件使用ceph的開關;
enable_ceph: "no" //關閉openstack自身的ceph存儲 glance_backend_ceph: "yes" cinder_backend_ceph: "yes" nova_backend_ceph: "yes"
4、配置外部ceph,使用kolla的合並配置特性,對相應的組件的ceph存儲pool池進行配置;
a、glance的配置,增加文件/etc/kolla/config/glance/glance-api.conf,內容如下:
[glance_store] stores = rbd default_store = rbd rbd_store_pool = images rbd_store_user = glance //這是第2步創建的用戶glance rbd_store_ceph_conf = /etc/ceph/ceph.conf
b、cinder的配置,增加文件/etc/kolla/config/cinder/cinder-volume.conf,內容如下:
[DEFAULT] enabled_backends=rbd-1 [rbd-1] rbd_ceph_conf=/etc/ceph/ceph.conf rbd_user=cinder //這是第2步創建的cinder用戶 backend_host=rbd:volumes rbd_pool=volumes volume_backend_name=rbd-1 volume_driver=cinder.volume.drivers.rbd.RBDDriver rbd_secret_uuid=02d41563-5fe7-442a-ada5-3bf508e5e8b1 //註意:cinder_rbd_secret_uuid 可以在 /etc/kolla/passwords.yml 文件中找到。
c、cinder-backup的配置,增加文件/etc/kolla/config/cinder/cinder-backup.conf,內容如下:
[DEFAULT] backup_ceph_conf=/etc/ceph/ceph.conf backup_ceph_user=cinder-backup //這是第2步創建的cinder-backup用戶 backup_ceph_chunk_size = 134217728 backup_ceph_pool=backups backup_driver = cinder.backup.drivers.ceph backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
d、nova的配置,增加文件/etc/kolla/config/nova/nova-compute.conf,內容如下:
[libvirt] images_rbd_pool=vms images_type=rbd images_rbd_ceph_conf=/etc/ceph/ceph.conf rbd_user=nova //這是第2步創建的nova用戶 disk_cachemodes = network=writeback //官網上沒有這個參數 hw_disk_discard = unmap //官網上沒有這個參數 rbd_secret_uuid = 02d41563-5fe7-442a-ada5-3bf508e5e8b1 //官網上沒有這個參數
e、如果ceph集群部署的時候主機解析不是使用IP而是用主機名,需要修改openstack集群節點/etc/hosts文件,增加對ceph集群主機名的解析,例如:
control01、control02、control03節點上: # cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.121 control01 192.168.1.122 control02 192.168.1.123 control03 192.168.1.161 ceph-1 192.168.1.162 ceph-2 192.168.1.163 ceph-3
4、使用kolla-ansible deploy 重新部署;
kolla-ansibel deploy -i <inventory file> // 其中<inventory file> 用實際環境中的inventory文件替代,比如multiple或者all-in-one
總結及建議:
建議在設計之初就確定使用外部ceph存儲,中途調整存儲還是存在很大風險,並且還涉及到相關的鏡像、虛擬機、卷的遷移。
根據官網進行操作會碰到一些坑,並且官網對於這一塊描述的不是很詳細,必須動手實驗填坑。
對於openstack使用外部ceph對象存儲這一塊官網上沒有介紹,直接使用內部ceph是可以很方便啟用這個功能的。
上面驗證完成之後,完全可以應用在生產環境上面,比如創建一個SSD固態硬盤存儲池作為vms pool 給虛擬機的系統盤使用,創建一個普通SAS硬盤存儲池作為volumes pool 給虛擬機的卷使用,images pool 給鏡像使用,創建一個低成本慢速大容量SATA盤存儲池作為backups pool 給cinder-backup備份卷使用。
對於在一臺ceph集群物理服務器上同時有SSD固態硬盤、SAS盤、SATA盤,需要根據不同類型的盤劃分pool的方法,可以在創建OSD的時候進行ruleset的歸類,當創建pool的時候,指定ruleset參數就能夠使用不同類型盤的目的了。
Openstack 之使用外部ceph存儲