需求分析
- openstack成為ceph的用戶端
- openstack的nova|glance|cinder對接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
- 為存儲池建立ceph使用者[node1]
ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
- 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
- 通過ssh發送屬于client.glance使用者的keyring到openstack節點[node1]
ceph auth get-or-create client.glance | ssh controller tee /etc/ceph/ceph.client.glance.keyring
- 通過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
檢查結果
建立塊裝置來驗證結果
看到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查詢
[[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做後端存儲
知識掃盲
指令行工具是 Xen 和 KVM 用來格式化各種檔案系統的。可使用
qemu-img
格式化虛拟用戶端映像、附加儲存設備以及網絡存儲。
qemu-img
如果沒有建立一個, Ceph 會預設有一個叫
Pool
的 Pool.
rbd