1. 程式人生 > >Openstack 之使用外部ceph存儲

Openstack 之使用外部ceph存儲

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-1eth0:192.168.1.161/24
ceph-2osd.{3,4},mon.ceph-2eth0:192.168.1.162/24
ceph-3osd.{5,6},mon.ceph-3eth0: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
control01control+compute+network192.168.1.121
control02control+compute+network192.168.1.122
control03control+compute+network192.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存儲