使用Ceph做爲OpenStack的後端存儲

概述

        libvirt配置了librbdQEMU接口,經過它能夠在OpenStack中使用Ceph塊存儲。Ceph塊存儲是集羣對象,這意味着它比獨立的服務器有更好的性能。
        在OpenStack中使用Ceph塊設備,必須首先安裝QEMUlibvirtOpenStack,下圖描述了 OpenStackCeph技術層次結構:


http://my.oschina.net/JerryBaby/blog/376580 我翻譯的官方文檔,僅供參考 ^ ^shell

系統規劃

OpenStack集羣:
         控制節點:openstackcontroller192.168.1.131
         計算節點:compute                      192.168.1.132
         存儲節點:storage                        192.168.1.133

Ceph集羣:
       monitormdsosd0 節點:openstackcontroller192.168.1.131
       osd1compute       192.168.1.132
       osd2storage         192.168.1.133 後端

系統架構: api


配置過程

Important:因爲這裏將兩套集羣服務部署在了同一組節點上,因此配置過程當中省略了一些關於Ceph集羣的配置。 服務器

建立存儲池 架構

# ceph osd pool create volumes 128
# ceph osd pool create images 128
# ceph osd pool create vms 128

設置Ceph客戶端認證 ssh

OpenStack節點執行以下命令: 性能

# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'
# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'

client.cinderclient.glance添加密鑰文件來訪問節點並改變屬主: ui

# ceph auth get-or-create client.glance | ssh openstack sudo tee /etc/ceph/ceph.client.glance.keyring
# ssh openstack sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring
# ceph auth get-or-create client.glance | ssh compute sudo tee /etc/ceph/ceph.client.glance.keyring
# ssh compute sudo chown nova:nova /etc/ceph/ceph.client.glance.keyring
# ceph auth get-or-create client.cinder | ssh compute sudo tee /etc/ceph/ceph.client.cinder.keyring
# ssh compute sudo chown nova:nova /etc/ceph/ceph.client.cinder.keyring
# ceph auth get-or-create client.cinder | ssh storage sudo tee /etc/ceph/ceph.client.cinde.keyring
# ssh storage sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

運行nova-compute的節點nova-compute進程須要密鑰文件。它們也存儲client.cinder用戶的密鑰在libvirtlibvirt進程在Cinder中綁定塊設備時須要用到它來訪問集羣。
nova-compute節點建立一個臨時的密鑰副本: 加密

# uuidgen
457eb676-33da-42ec-9a8c-9293d545c337

# cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
  <uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid>
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret>
EOF
# sudo virsh secret-define --file secret.xml 
# sudo virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml

配置Glance url

編輯 /etc/glance/glance-api.conf並添加以下內容:

[DEFAULT]
default_store = rbd
...
[glance_store]
stores = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8

若是要啓動鏡像的寫時複製功能,添加下面的 [DEFAULT] 部分:

show_image_direct_url = True

配置Cinder

openstack節點和storage節點編輯 /etc/cinder/cinder.conf配置文件並添加以下內容:

volume_driver = cinder.volume.drivers.rbd.RBDDriver
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

若是使用cephx驗證,須要配置useruuid

rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

配置Nova

爲了掛載Cinder設備(普通設備或可引導卷),必須指明使用的用戶及UUIDlibvirt將使用期在Ceph集羣中進行鏈接和驗證:

rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

編輯 /etc/nova/nova.conf並添加以下內容:

[libvirt]
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337
libvirt_live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST"

禁用文件注入。當啓動一個實例的時候,nova一般會嘗試打開rootfs。這時,nova注入一些數據,如密碼、ssh 密鑰,配置文件等到文件系統中。然而,這最好依靠元數據服務和cloud-init來完成。

在每一個計算節點,編輯 /etc/nova/nova.conf [libvirt] 標籤添加:

libvirt_inject_password = false
libvirt_inject_key = false
libvirt_inject_partition = -2

重啓服務

# sudo glance-control api restart
# sudo service nova-compute restart
# sudo service cinder-volume restart
# sudo service cinder-backup restar

從塊設備引導

Ceph後端存儲情況:

Ceph不支持從qcow2格式的鏡像引導,因此建立一個raw格式的鏡像:

建立一個可引導卷:


從可引導卷建立一個實例:

查看Ceph存儲情況:

相關文章
相關標籤/搜索