咱們還將展現如何將三個重要的OpenStack用例:Cinder(塊存儲)、Glance(鏡像)和Nova(虛擬機虛擬磁盤)與Ceph集成。python
Ceph提供統一的橫向擴展存儲,使用帶有自我修復和智能預測故障功能的商用x86硬件。它已經成爲軟件定義存儲的事實上的標準。由於Ceph是開源的,它使許多供應商可以提供基於Ceph的軟件定義存儲系統。 Ceph不只限於Red Hat、Suse、Mirantis、Ubuntu等公司。 SanDisk、富士通、惠普、戴爾、三星等公司如今也提供集成解決方案。甚至還有大規模的社區建造的環境(如CERN),爲10000個虛擬機提供存儲服務。後端
Ceph毫不侷限於OpenStack,可是這是Ceph開始得到牽引力的地方。看看最新的OpenStack用戶調查,Ceph是OpenStack存儲的顯著領導者。2016年4月OpenStack用戶調查報告的第42頁顯示,Ceph佔OpenStack存儲的57%,下一個是LVM(本地存儲)佔28%,NetApp佔9%。若是咱們不看LVM,Ceph領先其餘存儲公司48%,使人難以置信。這是爲何?api
有好幾個緣由,我認爲如下是最重要的三個:緩存
Ceph是一個橫向擴展的統一存儲平臺。OpenStack最須要的存儲能力的兩個方面:可以與OpenStack自己一塊兒擴展,而且擴展時不須要考慮是塊(Cinder)、文件(Manila)仍是對象(Swift)。傳統存儲供應商須要提供兩個或三個不一樣的存儲系統來實現這一點。它們不一樣樣擴展,而且在大多數狀況下僅在永無止境的遷移週期中縱向擴展。它們的管理功能歷來沒有真正實現跨不一樣的存儲用例集成。網絡
Ceph具備成本效益。 Ceph利用Linux做爲操做系統,而不是專有的系統。你不只能夠選擇找誰購買Ceph,還能夠選擇從哪裏購買硬件。能夠是同一供應商也能夠是不一樣的。你能夠購買硬件,甚至從單一供應商購買Ceph +硬件的集成解決方案。已經有針對Ceph的超融合方案出現(在計算節點上運行Ceph服務)。架構
和OpenStack同樣,Ceph是開源項目。這容許更緊密的集成和跨項目開發。專有供應商老是在努力追趕,由於他們有祕密要保護,他們的影響力一般限於開源社區。app
這裏是一個架構圖,顯示了全部須要存儲的不一樣OpenStack組件。它顯示了這些組件如何與Ceph集成,以及Ceph如何提供一個統一的存儲系統,擴展以知足全部這些用例。ssh
若是你對與Ceph和OpenStack相關的更多主題感興趣,推薦這個網址:http://ceph.com/category/ceph-and-openstack/。性能
說夠了爲何Ceph和OpenStack如此偉大,該說說如何鏈接它們了。若是你沒有Ceph環境,能夠按照這篇文章快速設置。ui
Glance是OpenStack中的映像服務。默認狀況下,映像存儲在本地控制器,而後在被請求時複製到計算主機。計算主機緩存鏡像,但每次更新鏡像時,都須要再次複製。
Ceph爲Glance提供了後端,容許鏡像存儲在Ceph中,而不是本地存儲在控制器和計算節點上。這大大減小了抓取鏡像的網絡流量,提升了性能,由於Ceph能夠克隆鏡像而不是複製鏡像。此外,它使得在OpenStack部署或諸如多站點OpenStack之類的概念的遷移變得更簡單。
安裝Glance使用的Ceph客戶端。
[root@osp9 ~]# yum install -y python-rbd
建立Ceph用戶並將主目錄設置爲/etc/ceph。
[root@osp9 ~]# mkdir /etc/ceph
[root@osp9 ~]# useradd ceph
[root@osp9 ~]# passwd ceph
將Ceph用戶添加到sudoers。
cat << EOF >/etc/sudoers.d/ceph
ceph ALL = (root) NOPASSWD:ALL
Defaults:ceph !requiretty
EOF
在Ceph管理節點。爲Glance鏡像建立Ceph RBD池。
[ceph@ceph1 ~]$ sudo ceph osd pool create images 128
建立將容許Glance訪問池的密鑰環。
[ceph@ceph1 ~]$ sudo ceph auth get-or-create client.images mon 'allow r' osd 'allow class-read object_prefix rdb_children, allow rwx pool=images' -o /etc/ceph/ceph.client.images.keyring
將密鑰環複製到OpenStack控制器上的/etc/ceph。
[ceph@ceph1 ~]$ scp /etc/ceph/ceph.conf root@osp9.lab:/etc/ceph
設置權限,讓 Glance能夠訪問Ceph密鑰環。
[root@osp9 ~(keystone_admin)]# chgrp glance /etc/ceph/ceph.client.images.keyring
[root@osp9 ~(keystone_admin)]#chmod 0640 /etc/ceph/ceph.client.images.keyring
將密鑰環文件添加到Ceph配置。
[root@osp9 ~(keystone_admin)]# vi /etc/ceph/ceph.conf
[client.images]
keyring = /etc/ceph/ceph.client.images.keyring
建立原始Glance配置的備份。
[root@osp9 ~(keystone_admin)]# cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.orig
更新Glance配置。
[root@osp9 ~]# vi /etc/glance/glance-api.conf
[glance_store]
stores = glance.store.rbd.Store
default_store = rbd
rbd_store_pool = images
rbd_store_user = images
rbd_store_ceph_conf = /etc/ceph/ceph.conf
從新啓動Glance。
[root@osp9 ~(keystone_admin)]# systemctl restart openstack-glance-api
下載Cirros鏡像並將其添加到Glance。
[root@osp9 ~(keystone_admin)]# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
將QCOW2轉換爲RAW。 建議Ceph始終使用RAW格式。
[root@osp9 ~(keystone_admin)]#qemu-img convert cirros-0.3.4-x86_64-disk.img cirros-0.3.4-x86_64-disk.raw
將鏡像添加到Glance。
[root@osp9 ~(keystone_admin)]#glance image-create --name "Cirros 0.3.4" --disk-format raw --container-format bare --visibility public --file cirros-0.3.4-x86_64-disk.raw
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | ee1eca47dc88f4879d8a229cc70a07c6 |
| container_format | bare |
| created_at | 2016-09-07T12:29:23Z |
| disk_format | qcow2 |
| id | a55e9417-67af-43c5-a342-85d2c4c483f7 |
| min_disk | 0 |
| min_ram | 0 |
| name | Cirros 0.3.4 |
| owner | dd6a4ed994d04255a451da66b68a8057 |
| protected | False |
| size | 13287936 |
| status | active |
| tags | [] |
| updated_at | 2016-09-07T12:29:27Z |
| virtual_size | None |
| visibility | public |
+------------------+--------------------------------------+
檢查Ceph中是否存在Glance圖像。
[ceph@ceph1 ceph-config]$ sudo rbd ls images
a55e9417-67af-43c5-a342-85d2c4c483f7
Cinder是OpenStack中的塊存儲服務。 Cinder提供了關於塊存儲的抽象,並容許供應商經過提供驅動程序進行集成。在Ceph中,每一個存儲池能夠映射到不一樣的Cinder後端。這容許建立諸如金、銀或銅的存儲服務。你能夠決定例如金應該是複製三次的快速SSD磁盤,銀應該是複製兩次,銅應該是使用較慢的擦除編碼的磁盤。
爲Cinder卷建立一個Ceph池。
[ceph@ceph1 ~]$ sudo ceph osd pool create 128
建立一個密鑰環以授予Cinder訪問權限。
[ceph@ceph1 ~]$ sudo ceph auth get-or-create client.volumes mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rx pool=images' -o /etc/ceph/ceph.client.volumes.keyring
將密鑰環複製到OpenStack控制器。
[ceph@ceph1 ~]$ scp /etc/ceph/ceph.client.volumes.keyring root@osp9.lab:/etc/ceph
建立一個只包含OpenStack控制器上的身份驗證密鑰的文件。
[ceph@ceph1 ~]$ sudo ceph auth get-key client.volumes |ssh osp9.lab tee client.volumes.key
設置密鑰環文件的權限,以便Cinder能夠訪問。
[root@osp9 ~(keystone_admin)]# chgrp cinder /etc/ceph/ceph.client.volumes.keyring
[root@osp9 ~(keystone_admin)]# chmod 0640 /etc/ceph/ceph.client.volumes.keyring
將密鑰環添加到OpenStack控制器上的Ceph配置文件中。
[root@osp9 ~(keystone_admin)]#vi /etc/ceph/ceph.conf
[client.volumes]
keyring = /etc/ceph/ceph.client.volumes.keyring
使KVM Hypervisor訪問Ceph。
[root@osp9 ~(keystone_admin)]# uuidgen |tee /etc/ceph/cinder.uuid.txt
在virsh中建立一個密鑰,所以KVM能夠訪問Ceph池的Cinder卷。
[root@osp9 ~(keystone_admin)]#vi /etc/ceph/cinder.xml
ce6d1549-4d63-476b-afb6-88f0b196414f
client.volumes secret
[root@osp9 ceph]# virsh secret-define --file /etc/ceph/cinder.xml
[root@osp9 ~(keystone_admin)]# virsh secret-set-value --secret ce6d1549-4d63-476b-afb6-88f0b196414f --base64 $(cat /etc/ceph/client.volumes.key)
爲Cinder添加一個Ceph後端。
[root@osp9 ~(keystone_admin)]#vi /etc/cinder/cinder.conf
[rbd]
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
rbd_user = volumes
rbd_secret_uuid = ce6d1549-4d63-476b-afb6-88f0b196414f
在全部控制器上從新啓動Cinder服務。
[root@osp9 ~(keystone_admin)]# openstack-service restart cinder
建立Cinder卷。
[root@osp9 ~(keystone_admin)]# cinder create --display-name="test" 1
+--------------------------------+--------------------------------------+
| Property | Value |
+--------------------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| consistencygroup_id | None |
| created_at | 2016-09-08T10:58:17.000000 |
| description | None |
| encrypted | False |
| id | d251bb74-5c5c-4c40-a15b-2a4a17bbed8b |
| metadata | {} |
| migration_status | None |
| multiattach | False |
| name | test |
| os-vol-host-attr:host | None |
| os-vol-mig-status-attr:migstat | None |
| os-vol-mig-status-attr:name_id | None |
| os-vol-tenant-attr:tenant_id | dd6a4ed994d04255a451da66b68a8057 |
| replication_status | disabled |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| updated_at | None |
| user_id | 783d6e51e611400c80458de5d735897e |
| volume_type | None |
+--------------------------------+--------------------------------------+
List new cinder volume
[root@osp9 ~(keystone_admin)]# cinder list
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
| d251bb74-5c5c-4c40-a15b-2a4a17bbed8b | available | test | 1 | - | false | |
+--------------------------------------+-----------+------+------+-------------+----------+-------------+
在Ceph中列出Cinder卷。
[ceph@ceph1 ~]$ sudo rbd ls volumes
volume-d251bb74-5c5c-4c40-a15b-2a4a17bbed8b
[ceph@ceph1 ~]$ sudo rbd info volumes/volume-d251bb74-5c5c-4c40-a15b-2a4a17bbed8b
rbd image 'volume-d251bb74-5c5c-4c40-a15b-2a4a17bbed8b':
size 1024 MB in 256 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.2033b50c26d41
format: 2
features: layering, striping
flags:
stripe unit: 4096 kB
stripe count: 1
Nova是OpenStack中的計算服務。 Nova存儲與默認的運行虛擬機相關聯的虛擬磁盤鏡像,在/ var / lib / nova / instances下的Hypervisor上。在虛擬磁盤映像的計算節點上使用本地存儲有一些缺點:
鏡像存儲在根文件系統下。大鏡像可能致使文件系統被填滿,從而致使計算節點崩潰。
計算節點上的磁盤崩潰可能致使虛擬磁盤丟失,所以沒法進行虛擬機恢復。
Ceph是能夠直接與Nova集成的存儲後端之一。在本節中,咱們將看到如何配置。
[ceph@ceph1 ~]$ sudo ceph osd pool create vms 128
爲Nova建立驗證密鑰環。
[ceph@ceph1 ~]$ sudo ceph auth get-or-create client.nova mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=vms, allow rx pool=images' -o /etc/ceph/ceph.client.nova.keyring
將密鑰環複製到OpenStack控制器。
[ceph@ceph1 ~]$ scp /etc/ceph/ceph.client.nova.keyring root@osp9.lab:/etc/ceph
在OpenStack控制器上建立密鑰文件。
[ceph@ceph1 ~]$ sudo ceph auth get-key client.nova |ssh osp9.lab tee client.nova.key
設置密鑰環文件的權限,以便Nova服務能夠訪問。
[root@osp9 ~(keystone_admin)]# chgrp nova /etc/ceph/ceph.client.nova.keyring
[root@osp9 ~(keystone_admin)]# chmod 0640 /etc/ceph/ceph.client.nova.keyring
確保安裝所需的rpm軟件包。
[root@osp9 ~(keystone_admin)]# yum list installed python-rbd ceph-common
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Installed Packages
ceph-common.x86_64 1:0.94.5-15.el7cp @rhel-7-server-rhceph-1.3-mon-rpms
python-rbd.x86_64 1:0.94.5-15.el7cp @rhel-7-server-rhceph-1.3-mon-rpms
更新Ceph配置。
[root@osp9 ~(keystone_admin)]#vi /etc/ceph/ceph.conf
[client.nova]
keyring = /etc/ceph/ceph.client.nova.keyring
讓KVM能夠訪問Ceph。
[root@osp9 ~(keystone_admin)]# uuidgen |tee /etc/ceph/nova.uuid.txt
在virsh中建立一個密鑰,這樣KVM能夠訪問Cinder卷的Ceph池。
[root@osp9 ~(keystone_admin)]#vi /etc/ceph/nova.xml
c89c0a90-9648-49eb-b443-c97adb538f23
client.volumes secret
[root@osp9 ~(keystone_admin)]# virsh secret-define --file /etc/ceph/nova.xml
[root@osp9 ~(keystone_admin)]# virsh secret-set-value --secret c89c0a90-9648-49eb-b443-c97adb538f23 --base64 $(cat /etc/ceph/client.nova.key)
備份Nova配置。
[root@osp9 ~(keystone_admin)]# cp /etc/nova/nova.conf /etc/nova/nova.conf.orig
更新Nova配置以使用Ceph後端。
[root@osp9 ~(keystone_admin)]#vi /etc/nova/nova.conf
force_raw_images = True
disk_cachemodes = writeback
[libvirt]
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = nova
rbd_secret_uuid = c89c0a90-9648-49eb-b443-c97adb538f23
從新啓動Nova服務。
[root@osp9 ~(keystone_admin)]# systemctl restart openstack-nova-compute
列表Neutron網絡。
[root@osp9 ~(keystone_admin)]# neutron net-list
+--------------------------------------+---------+-----------------------------------------------------+
| id | name | subnets |
+--------------------------------------+---------+-----------------------------------------------------+
| 4683d03d-30fc-4dd1-9b5f-eccd87340e70 | private | ef909061-34ee-4b67-80a9-829ea0a862d0 10.10.1.0/24 |
| 8d35a938-5e4f-46a2-8948-b8c4d752e81e | public | bb2b65e7-ab41-4792-8591-91507784b8d8 192.168.0.0/24 |
+--------------------------------------+---------+-----------------------------------------------------+
啓動使用在Glance步驟中添加的Cirros鏡像的臨時VM實例。
[root@osp9 ~(keystone_admin)]# nova boot --flavor m1.small --nic net-id=4683d03d-30fc-4dd1-9b5f-eccd87340e70 --image='Cirros 0.3.4' cephvm
+--------------------------------------+-----------------------------------------------------+
| Property | Value |
+--------------------------------------+-----------------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | |
| OS-EXT-SRV-ATTR:host | - |
| OS-EXT-SRV-ATTR:hypervisor_hostname | - |
| OS-EXT-SRV-ATTR:instance_name | instance-00000001 |
| OS-EXT-STS:power_state | 0 |
| OS-EXT-STS:task_state | scheduling |
| OS-EXT-STS:vm_state | building |
| OS-SRV-USG:launched_at | - |
| OS-SRV-USG:terminated_at | - |
| accessIPv4 | |
| accessIPv6 | |
| adminPass | wzKrvK3miVJ3 |
| config_drive | |
| created | 2016-09-08T11:41:29Z |
| flavor | m1.small (2) |
| hostId | |
| id | 85c66004-e8c6-497e-b5d3-b949a1666c90 |
| image | Cirros 0.3.4 (a55e9417-67af-43c5-a342-85d2c4c483f7) |
| key_name | - |
| metadata | {} |
| name | cephvm |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| security_groups | default |
| status | BUILD |
| tenant_id | dd6a4ed994d04255a451da66b68a8057 |
| updated | 2016-09-08T11:41:33Z |
| user_id | 783d6e51e611400c80458de5d735897e |
+--------------------------------------+-----------------------------------------------------+
等待直到VM處於活動狀態。
[root@osp9 ceph(keystone_admin)]# nova list
+--------------------------------------+--------+--------+------------+-------------+---------------------+
| ID | Name | Status | Task State | Power State | Networks |
+--------------------------------------+--------+--------+------------+-------------+---------------------+
| 8ca3e74e-cd52-42a6-acec-13a5b8bda53c | cephvm | ACTIVE | - | Running | private=10.10.1.106 |
+--------------------------------------+--------+--------+------------+-------------+---------------------+
在Ceph虛擬機池中列出鏡像。咱們如今應該看到鏡像存儲在Ceph中。
[ceph@ceph1 ~]$ sudo rbd -p vms ls
8ca3e74e-cd52-42a6-acec-13a5b8bda53c_disk
沒法刪除存儲在CEPH RBD中的Glance鏡像。
[root@osp9 ceph(keystone_admin)]# nova image-list
+--------------------------------------+--------------+--------+--------+
| ID | Name | Status | Server |
+--------------------------------------+--------------+--------+--------+
| a55e9417-67af-43c5-a342-85d2c4c483f7 | Cirros 0.3.4 | ACTIVE | |
| 34510bb3-da95-4cb1-8a66-59f572ec0a5d | test123 | ACTIVE | |
| cf56345e-1454-4775-84f6-781912ce242b | test456 | ACTIVE | |
+--------------------------------------+--------------+--------+--------+
[root@osp9 ceph(keystone_admin)]# rbd -p images snap unprotect cf56345e-1454-4775-84f6-781912ce242b@snap
[root@osp9 ceph(keystone_admin)]# rbd -p images snap rm cf56345e-1454-4775-84f6-781912ce242b@snap
[root@osp9 ceph(keystone_admin)]# glance image-delete cf56345e-1454-4775-84f6-781912ce242b
在本文中,咱們討論了OpenStack和Ceph如何完美地結合在一塊兒。咱們討論了關於Glance、Cinder和Nova的一些用例。最後,咱們完成了將Ceph與這些用例集成的步驟。