1. 程式人生 > >[OpenStack 儲存] Nova,Glance與Cinder 基於Ceph的統一儲存方案

[OpenStack 儲存] Nova,Glance與Cinder 基於Ceph的統一儲存方案

Ceph作為Linux PB級分散式檔案系統,因其靈活智慧可配置, 在軟體定義儲存的大潮中,越來越受到iass方案提供商的注意。

我們知道OpenStack中圍繞虛擬機器主要的儲存需求來自於nova中的disk,glance中的image,cinder中的虛擬硬碟,本文中,我們將全部採用ceph作為這些儲存的後端,擺脫現有部署中各搞一套的現狀。本文主要主要是對Ceph使用的總結,因個人環境不同,可能存在各種環境與包依賴等問題,本人就遇到了qemu的版本不夠,iptables等問題,歡迎交流微笑。先畫個整合邏輯圖


CEPH底層為RADOS儲存,提供訪問RADOS的是librados庫,librbd的呼叫就是基於librados,Nova只要是通過libvirt->qemu來呼叫librbd,所以我們知道暫時只有libvirtDriver支援,Cinder與Glance直接呼叫librbd。

CEPH儲存叢集中的層次結構也可見上圖,主要是先檔案條帶化為obj, obj通過hash函式對映到PG(上圖中Pool就是PG的容器),PG通過CRUSH演算法均勻對映到OSD,OSD基於檔案系統,比如xfs,ext4等等。

本文中將只使用三個osd(官方推薦是至少兩個, 一個無法應對故障), 三個監視器(主要負責接受資料上報, 提供cluster map, 至少要三個, 一個不好容災,奇數個可確保PAXOS演算法能確定一批監視器裡哪個版本的叢集執行圖是最新的) , 只放了一個mds,  這樣的搭配基本是測試環境下最小的配置了,ceph很強調它的擴充套件性, 所以越多越好, 越能體現其優勢

本文使用的系統環境: redhat6.5 四臺機器 規劃如下:

mds 192.168.122.149 裝一個mds 一個mon, 一個osd
osd 192.168.122.169 裝一個mon, 一個osd
mon 192.168.122.41 裝 一個mon, 一個osd
client 192.168.122.104 上安裝openstack all-in-one,管理節點

三臺機器組成ceph儲存叢集,hostname分別為mds,osd,mon,下文將都是使用這些短的hostname代表節點,其中在這三臺機器上都部署monitor和物件儲存osd,在mds上部署metadata伺服器mds,另外一臺機器作為openstack all-in-one環境節點 hostname:client

採用ceph-deploy來部署安裝ceph, 這個類似與我們部署openstack用的chef。非常方便。

第一步:  在管理節點上修改/etc/hosts,ceph-deploy 後面的節點引數必須使用hostname,為了能夠解析hostname,需要配置/etc/hosts,為下面貼上部分的後四行。

[[email protected] ceph ]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.122.149 mds
192.168.122.169 osd
192.168.122.41 mon
192.168.122.104 client

第二步:配置管理節點無密碼訪問其他節點,這個是方便我們使用ceph-deploy部署安裝ceph

[[email protected] install]# ssh-keygen
[[email protected] install]# ssh-copy-id mds
[[email protected] install]# ssh-copy-id ods
[[email protected] install]# ssh-copy-id mon

第三步:在client上新增yum原始檔ceph.repo 使用最新版本 firefly, 本地環境是redhat 6.5, 所以baseurl中用rhel6, 本機為64位系統,後面的目錄也使用的x86_64, 如下

[[email protected]~]# cat /etc/yum.repos.d/ceph.repo
[Ceph]
name=Cephpackages for $basearch
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
enabled=1
baseurl=http://ceph.com/rpm-firefly/rhel6/x86_64
priority=1
gpgcheck=1
type=rpm-md
[ceph-source]
name=Cephsource packages
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
enabled=1
baseurl=http://ceph.com/rpm-firefly/rhel6/SRPMS
priority=1
gpgcheck=1
type=rpm-md
[Ceph-noarch]
name=Cephnoarch packages
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
enabled=1
baseurl=http://ceph.com/rpm-firefly/rhel6/noarch
priority=1
gpgcheck=1
type=rpm-md

第四步: 安裝ceph

[[email protected]~]# yum -y install ceph-deploy
本文使用ceph-deploy來做部署,這時最好建個目錄,存放一些生成檔案,避免在其他目錄中與已有檔案交雜在一起。
[[email protected] ~]# mkdir ceph
[[email protected] ~]# cd ceph

建立一個叢集包含mds osd mon

[[email protected] ceph]# ceph-deploy new mds mon osd # 必須使用hostname

安裝ceph在三個節點上。

[[email protected] ceph]# ceph-deploy install mds mon osd

安裝monitor

[[email protected] ceph]# ceph-deploy mon create mds mon osd
收集keyring檔案,Note: 做這個時候,這個如果mds mon osd上防火牆開著, 會收集不到,建議關掉,不然就要通過iptables設定相關rule,

不關報的錯是:[ceph_deploy.gatherkeys][WARNIN]Unable to find /var/lib/ceph/bootstrap-mds/ceph.keyring

[[email protected] ceph]# ceph-deploy gatherkeys mds #用其中一個節點即可
[[email protected] ceph]# ls
ceph.bootstrap-mds.keyring  ceph.bootstrap-osd.keyring  ceph.client.admin.keyring  ceph.conf  ceph.log  ceph.mon.keyring
建立osd,預設是基於xfs檔案系統,並激活。
[[email protected] ceph]# ceph-deploy osd prepare mds:/opt/ceph mds:/opt/cephmon:/opt/ceph
[[email protected] ceph]# ceph-deploy osd activate mds:/opt/ceph mds:/opt/cephmon:/opt/ceph
建立metadata伺服器
[[email protected] ceph]# ceph-deploy mds create mds
這裡插一段[如果只做ceph與openstack整合,請無視它]

* 如果到此位止,我們僅想把這個檔案系統mountclient端,我們需要安裝ceph-fuse

[[email protected] ceph]# yum -y install ceph-fuse
[[email protected] ceph]#
[[email protected] ceph]# ceph-fuse -m 192.168.122.169:6789 /mnt/ceph
ceph-fuse[24569]:starting ceph client
ceph-fuse[24569]:starting fuse
[[email protected] ceph]# df
Filesystem 1K-blocks Used Available Use%Mounted on
/dev/mapper/vg_client-lv_root 18069936 2791420 14360604 17% /
tmpfs 812188 4 812184 1%/dev/shm
/dev/vda1 495844 34541 435703 8% /boot
/etc/swift/data/drives/images/swift.img 1038336 32976 1005360 4% /etc/swift/data/drives/sdb1
ceph-fuse 54304768 25591808 28712960 48%/mnt/ceph #這一行

第五步: 整合到nova,glance 和cinder的使用上
[[email protected] ceph]# yum install ceph
[[email protected] ceph]# rados mkpool volumes
[[email protected] ceph]# rados mkpool images
[[email protected] ceph]# ceph osd pool set volumes size 3
[[email protected] ceph]# ceph osd pool set images size 3 
[[email protected] ceph]# ceph osd lspools
0data,1 metadata,2 rbd,4 volumes,5 images,

keyring

[[email protected] ceph]# 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/client.volumes.keyring
[[email protected] ceph]# ceph auth get-or-create client.images mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' -o /etc/ceph/client.images.keyring 

在ceph.conf 中加上後面的幾行。

[[email protected]]# cat /etc/ceph/ceph.conf
[global]
auth_service_required= cephx
filestore_xattr_use_omap= true
auth_client_required= cephx
auth_cluster_required= cephx
mon_host= 192.168.122.149,192.168.122.169,192.168.122.41
mon_initial_members= mds, osd, mon
fsid= 3493ee7b-ce67-47ce-9ce1-f5d6b219a709

[client.volumes] #此行開始是加的
keyring= /etc/ceph/client.volumes.keyring
[client.images]
keyring= /etc/ceph/client.images.keyring

一定要加上,不然glance image upload的時候會報如下錯

Requestreturned failure status.

500Internal Server Error

GL-F9EE247Failed to upload image 1c3d2523-9752-4644-89c2-b066428144fd

(HTTP500)

本文中安裝的qemu,libvirt均為新版本,版本過低可能存在rbd的支援問題。編譯安裝的方法為qemu安裝libvirt安裝

問題: qemu版本問題,必須能支援rbd格式的,因為libvirt就是通過qemu相關命令與ceph儲存互動,可通過"qemu-img–help”察看。

qemu-img version 0.12.1,

Supported formats: raw cow qcow vdi vmdk cloop dmg bochs vpc vvfat qcow2 qedvhdx parallels nbd blkdebug host_cdrom host_floppy host_device filegluster gluster gluster gluster

可以看到0.12.1不支援rbd,要裝0.15以上的】

為了整合nova, 先做如下給libvirt建立金鑰的操作,這個金鑰在qemu執行建立image命令時會使用到,應在nova-compute服務執行的節點上執行如下操作。本文使用all-in-one,所以直接在client節點執行

[[email protected] ~]#ceph auth get-key client.volumes | ssh client tee client.volumes.key #ssh後緊跟的是本機的hostname
[[email protected] ~]# cat > secret.xml << EOF
<secret ephemeral = 'no' private = 'no'>
<usage type = 'ceph'>
<name>client.volumes secret</name>
</usage>
</secret>
EOF
[[email protected] ~]# sudo virsh secret-define --file secret.xml
Secret ce31d8b1-62b5-1561-a489-be305336520a created

[[email protected] ~]# sudo virsh secret-set-value --secret ce31d8b1-62b5-1561-a489-be305336520a --base64 $(cat client.volumes.key) &&rm client.volumes.key secret.xml
Secret value set

rm:是否刪除普通檔案 "client.volumes.key"?y
rm:是否刪除普通檔案 "secret.xml"?y
修改配置檔案

/etc/glance/glance-api.conf

default_store = rbd
show_image_direct_url = True
bd_store_user = images
rbd_store_pool = images
/etc/cinder/cinder.conf
volume_driver=cinder.volume.drivers.rbd.RBDDriver
rbd_pool=volumes
rbd_user=volumes
rbd_secret_uuid=ce31d8b1-62b5-1561-a489-be305336520a

/etc/nova/nova.conf

images_type=rbd
images_rbd_pool=volumes
rbd_user=volumes
rbd_secret_uuid=ce31d8b1-62b5-1561-a489-be305336520a

接著重啟glance-api, cinder-volume,nova-compute

[[email protected]]# service openstack-glance-api restart
Stoppingopenstack-glance-api: [ OK ]
Startingopenstack-glance-api: [ OK ]
[[email protected]]# glance image-create --disk-format qcow2 --is-public True --container-format bare --file cirros-0.3.1-x86_64-disk.img --name cirros
+------------------+--------------------------------------+
|Property | Value |
+------------------+--------------------------------------+
|checksum | d972013792949d0d3ba628fbe8685bce |
|container_format | bare |
|created_at | 2014-06-24T08:49:43 |
|deleted | False |
|deleted_at | None |
|disk_format | qcow2 |
|id | 77b79879-addb-4a22-b750-7f0ef51ec154 |
|is_public | True |
|min_disk | 0 |
|min_ram | 0 |
|name | cirros |
|owner | f17fbd28fa184a39830f14a2e01a3b70 |
|protected | False |
|size | 13147648 |
|status | active |
|updated_at | 2014-06-24T08:50:01 |
|virtual_size | None |
+------------------+--------------------------------------+
[[email protected]]# glance index
ID Name DiskFormat Container Format Size
------------------------------------------------------------------ ---------------------------------------- --------------
77b79879-addb-4a22-b750-7f0ef51ec154cirros qcow2 bare 13147648

[[email protected] ceph]# service openstack-cinder-volume restart
Stopping openstack-cinder-volume:                          [  OK  ]
Starting openstack-cinder-volume:                          [  OK  ]
[[email protected] ceph]# cinder create –display-name test-ceph 1
[[email protected] ceph]# cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| ID | Status | Display Name | Size| Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
|1cc908d0-bbe9-4008-a10f-80cf1aa53afb | available | test-ceph | 1 | None | false | |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
[[email protected] ceph]# service openstack-nova-compute restart
Stopping openstack-nova-compute:                          [  OK  ]
Starting openstack-nova-compute:                          [  OK  ]
[[email protected] ceph]# nova boot --image image1 --flavor 1 xiao-new  
[[email protected] ceph]# nova list
+--------------------------------------+-----------+--------+------------+-------------+---------------------+
| ID                                   | Name      | Status | Task State | Power State | Networks            |
+--------------------------------------+-----------+--------+------------+-------------+---------------------+
| f6b04300-2d60-47d3-a65b-2d4ce32eeced | xiao-new | ACTIVE  | -   | Running     | net_local=10.0.1.33 |
+--------------------------------------+-----------+--------+------------+-------------+---------------------+
最後附上ceph相關資料的連結