天天看點

建構超融合OpenStack [融合ceph做後端存儲]

需求分析

  • openstack成為ceph的用戶端
  • openstack的nova|glance|cinder對接ceph叢集存儲

參考架構

建構超融合OpenStack [融合ceph做後端存儲]

環境介紹

IP位址 主機名 節點
10.10.10.11 node1 Monitor/OSD
10.10.10.12 node2 OSD
10.10.10.13 node3 OSD/ceph-client
10.10.10.100 controller openstack-allinone

配置openstack作為ceph用戶端

修改hosts檔案

在node1執行指令

ceph-deploy install controller
ceph-deploy admin controller		## 将節點作為管理節點并将配置檔案拷貝到openstack節點
           

配置ceph存儲池

建立三個給nova|glance|cinder使用的存儲池[node1]

ceph osd pool stats		## 檢視存儲池狀态
ceph osd pool create images 128  ## 建立名稱為images, pg_num為128的存儲池
ceph osd pool create vms 128  ## 建立名稱為vms, pg_num為128的存儲池
ceph osd pool create volumes 128  ## 建立名稱為volumes, pg_num為128的存儲池
ceph osd pool stats
           
  1. 為存儲池建立ceph使用者[node1]
ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
           
  1. cinder和nova使用同一個使用者, 建立如下[node1]
ceph auth get-or-create client.cinder mon 'allow r' osd 'class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'
           

官方給的推薦是

  • 少于 5 OSDs, pg_num 設為 128
  • 5 到 10 OSDs, pg_num 設為 512
  • 10 到 50 OSDs, pg_num 設為 5096
  • 超過 50 OSDs, 需要自己平衡計算 pg_num
  • Ceph 官方提供了一個工具 pgcalc 來計算 pg_num
  1. 通過ssh發送屬于client.glance使用者的keyring到openstack節點[node1]
ceph auth get-or-create client.glance | ssh controller tee /etc/ceph/ceph.client.glance.keyring
           
  1. 通過ssh發送屬于client.cinder使用者的keyring到openstack節點[node1]
ceph auth get-or-create client.cinder | ssh controller tee /etc/ceph/ceph.client.cinder.keyring
           

給ceph.client.glance.keyring檔案權限

ssh controller chown glance:glance /etc/ceph/ceph.client.glance.keyring
           

給ceph.client.cinder.keyring檔案權限

ssh controller chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
           

使用ceph作為後端存儲

配置glance服務

配置glance, 使其使用ceph作為後端存儲, 将虛拟機鏡像存儲在ceph RDB中

修改glance配置檔案

[DEFAULT]
rpc_backend = rabbit
show_image_direct_url = True

[glance_store]
#stores = file,http
#file =
#filesystem_store_datadir = /var/lib/glance/images/
stores = rbd
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size 
           

重新開機glance服務

systemctl restart openstack-glance-api
或者
openstack-service restart glance-api
           

檢查結果

由于要在ceph中啟動虛拟機, glance鏡像的格式必須為RAW, 而cirros-0.3.4-x86_64-disk.img為qcow2格式的, 所有要将其裝換成RAW格式, 這裡使用到的是qemu-img工具做裝換

[[email protected] ~]# qemu-img convert -p -f qcow2 -O raw cirros-0.3.3-x86_64-disk.img cirros.raw
    (100.00/100%)
           

轉換後通過glance服務上傳鏡像到後端的ceph存儲裡**(原來用的是swift)**

glance image-create --name="cirros-ceph" --disk-format=raw --container-format=bare < cirros.raw
           

在ceph鏡像池查詢上傳的鏡像

[[email protected] ~]# rbd ls images
75430565-3e26-4c46-a719-ef30be2502dd
           

可以看到和glance中查詢得到的ID相同

現在已經将Glance的預設存儲後端配置改為Ceph,所有上傳的Glance鏡像都将存儲在Ceph中。

配置cinder塊存儲服務

生成UUID

在openstack計算幾點上生成一個UUID, 定義secret.xml檔案, 設定密鑰給Libvirt[controller]

[r[email protected] ~]# uuidgen
1b740389-3542-4138-b0af-9a86250d31f1
           

建立密鑰檔案, 并将uuid設定給它

[[email protected] ~]# vi secret.xml

<secret ephemeral='no' private='no'>
<uuid>1b740389-3542-4138-b0af-9a86250d31f1</uuid>
<usage type='ceph'>
<name>client.cinder.secret</name>
</usage>
</secret>
           

定義(define)密鑰檔案, 并保證生成的保密字元串是安全的, 在接下來的步驟中需要使用這個保密的字元串值

[[email protected] ~]# virsh secret-define --file secret.xml
Secret 1b740389-3542-4138-b0af-9a86250d31f1 created

           

在virsh裡設定好最後一步生成的保密字元串值,建立完成後檢視系統的密鑰檔案。

[[email protected] ~]# ceph auth get-key client.cinder >./client.cinder.key

[[email protected] ~]# virsh secret-set-value --secret 1b740389-3542-4138-b0af-9a86250d31f1 --base64 $(cat ./client.cinder.key)
Secret value set

[[email protected] ~]# virsh secret-list
 UUID                                  Usage
--------------------------------------------------------------------------------
 1b740389-3542-4138-b0af-9a86250d31f1  ceph client.cinder.secret

           

修改cinder配置檔案

OpenStack需要一個驅動和Ceph塊裝置互動。還得指定塊裝置所在的存儲池名。編輯controller節點上的/etc/cinder/cinder.conf ,改成如下内容,rbd_secret_uuid就是上面生成的秘鑰值。

[[email protected] ~]# vi /etc/cinder/cinder.conf 
[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.100.10
#enabled_backends = lvm
enabled_backends = ceph
glance_api_servers = http://controller:9292


[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_pool=volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1 
glance_api_version = 2
rbd_user = cinder
rbd_secret_uuid = 1b740389-3542-4138-b0af-9a86250d31f1
           

重新開機cinder服務

[[email protected] ~]# systemctl restart openstack-cinder-volume
           

檢查結果

建立塊裝置來驗證結果

建構超融合OpenStack [融合ceph做後端存儲]

看到Cinder建立的塊裝置,可以在Ceph中查詢到,Ceph對接Cinder服務得到驗證。

配置nova服務

nova compute使用RBD有兩種方式。一種是将cinder volume挂接給虛拟機;另一種是從cinder volume上啟動虛拟機,此時Nova需要建立一個RBD image,把glance image的内容導入,再交給libvirt。

修改配置檔案

[[email protected] ~]# vi /etc/nova/nova.conf

[libvirt]
virt_type = qemu
inject_key = True
rbd_user = cinder
rbd_secret_uuid =1b740389-3542-4138-b0af-9a86250d31f1 

           

檢查結果

建立虛拟機

net-id可以通過neutron net-list查詢

建構超融合OpenStack [融合ceph做後端存儲]
[[email protected] ~]# nova boot --flavor m1.tiny --image "cirros-ceph" --nic net-id=5759bd1e-02e1-48f9-978e-07649e8f7567 ceph-nova 
           

檢視雲硬碟

cinder list
           

nova虛拟機挂載雲硬碟

[[email protected] ~]# nova volume-attach 78d554b2-b295-48b6-9c47-efc38b0054dc fcb3cc53-0be3-4049-b60c-dea4529dafad
           

結束

查閱文獻

Linux指令 tee

17.3. 使用 qemu-img

Ceph 中的 Pools 和 PGs

ceph官方文檔

openstack的glance、nova、cinder使用ceph做後端存儲

知識掃盲

qemu-img

指令行工具是 Xen 和 KVM 用來格式化各種檔案系統的。可使用

qemu-img

格式化虛拟用戶端映像、附加儲存設備以及網絡存儲。
如果沒有建立一個

Pool

, Ceph 會預設有一個叫

rbd

的 Pool.

繼續閱讀