Ceph 之 塊設備、文件系統、對象存儲的使用
![1521770916999323.png 技術分享圖片](http://s1.51cto.com/images/20180323/1521770916999323.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![1521771461255911.png 技術分享圖片](http://s1.51cto.com/images/20180323/1521771461255911.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
上面左邊是我的個人微信,如需進一步溝通,請加微信。 右邊是我的公眾號“Openstack私有雲”,如有興趣,請關註。
繼上篇《Ceph 之 使用ceph-deploy部署ceph集群》,ceph集群搭建完成之後,接下來就是使用了,ceph集群可以提供給塊設備、文件系統、對象存儲 進行使用,其中塊設備的應用最成熟和廣泛,可以用在生產系統;對象存儲也很成熟,可以用在生產系統;文件系統據官網說還不是特別穩定,不建議在生產系統中使用。再重復一下環境:
環境:
系統centos7.4
ceph版本 ceph version 10.2.10
測試服務器為kvm虛擬機(openstack虛擬機)
服務器分配如下:
節點 | 服務 | cluster network |
---|---|---|
ceph-1(admin-node) | osd.{1,2,},mon.ceph-1 | eth0:192.168.1.161/24 |
ceph-2 | osd.{3,4},mon.ceph-2 | eth0:192.168.1.162/24 |
ceph-3 | osd.{5,6},mon.ceph-3 | eth0:192.168.1.163/24 |
節點 | 服務 | cluster network |
---|---|---|
control03(client) | ceph client | eth0:192.168.1.132/24 |
ceph每個節點在原來系統盤的基礎上增加2塊osd盤/dev/vdb 、/dev/vdc,集群共有6個osd
進程,3個monitor
進程。管理節點用作執行
ceph-deploy
命令,使用ceph-1節點充當。 節點control03上面與ceph集群獨立作為ceph集群的使用者(client),同一個局域網,是另一個openstack的一個控制節點,這裏僅作測試用,與openstack沒有聯系。大家應該大概猜測到了後續我的思路是什麽,openstack可以使用外部ceph集群,只需要在部署的時候進行相應的配置修改,就能夠實現,這種架構我認為是一個不錯的選擇。
一、塊設備的使用
我是參照官網進行的操作,其中塊設備的操作網址:
http://docs.ceph.com/docs/master/start/quick-rbd/
邏輯還是很簡單,首先是將客戶端納入到ceph集群中,這裏有一個概念,就是客戶端和ceph集群可以分開的,也可以是合在一起的,一般較小規模的是合在一起,比如我的環境下面,3個node節點的ceph集群,直接3個節點就可以使用ceph集群,不需要重新ceph-deploy install和ceph-deploy admin 。具體步驟如下:
1、客戶端安裝。在客戶端節點上進行ceph-deploy install <client節點名>和ceph-deploy admin <client節點名>操作,如果在集群節點本身使用,可以跳過這一步;註意,在執行之前,雙方的/etc/hosts文件添加主機紀錄能夠解析雙方主機名稱,然後ssh密鑰拷貝,使ceph admin節點可以直接免密ssh登陸客戶端。
ssh-copy-id <client節點名> ceph-deploy install <client節點名> ceph-deploy admin <client節點名>
2、創建pool池。在admin節點上(隨便哪一個,只要執行過ceph-deploy admin命令的節點即可)執行下面的命令:
ceph osd pool create rbd 64 //其中rbd是pool的名稱 註:官網上的命令是: rbd pool init <pool-name> , 在我的環境中rbd命令沒有pool子命令,應該是版本原因。
3、配置塊設備。在客戶端側創建image鏡像,映射鏡像到塊設備,格式化塊設備,mount塊設備,其中後面兩步和其他塊設備的使用一樣的。
a.創建image鏡像
命令格式: #rbd create foo --size 4096 --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] rbd create foo --size 4096 --image-feature layering //創建一個名字為foo的鏡像,如果沒有制定pool名稱,那麽默認是rbd
b.映射鏡像到塊設備
命令格式:#rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] rbd map foo //將foo鏡像映射到塊設備
c.格式化塊設備
命令格式:mkfs.ext4 -m0 /dev/rbd/rbd/foo //-m0 表示不保留空間為0 mkfs.ext4 /dev/rbd/rbd/foo
d.mount塊設備
mkdir /mnt/foo mount /dev/rbd/rbd/foo /mnt/foo cd /mnt/foo
二. 對象存儲的使用
和塊存儲一樣,首先是安裝客戶端,創建網關實例,在需要的情況下更改相關配置。
1.安裝客戶端。在admin端執行:
命令格式:#ceph-deploy install --rgw <client-node> [<client-node> ...] ceph-deploy install --rgw control03
2.創建網關實例。在admin端執行:
ceph-deploy rgw create <client-node> ceph-deploy rgw create control03 註意,實例rgw默認的端口是7480 ,如果需要更改端口,可以通過修改配置文件ceph.conf實現,具體詳見官網:http://docs.ceph.com/docs/master/start/quick-rgw/
3.使用對象存儲網關。
ceph對象存儲網關為應用提供 RESTful 類型的對象存儲接口,其接口方式支持 S3(兼容 Amazon S3 RESTful API) 和 Swift(兼容 OpenStack Swift API) 兩種類型。其中swift場景,比如可以在openstack中直接使用ceph對象存儲網關作為swift的存儲。這裏不做詳細記錄。
三.文件系統的使用
Ceph FS是一個支持POSIX接口的文件系統。文件系統對於客戶端來說可以方便的掛載到本地使用。Ceph FS構建在RADOS之上,繼承RADOS的容錯性和擴展性,支持冗余副本和數據高可靠性。
MDS
MDS(Metadata Server)即元數據Server主要負責Ceph FS集群中文件和目錄的管理。 元數據主要記錄數據的屬性,如文件存儲位置、大小、存儲時間等,同時負責文件查找、文件記錄、存儲位置記錄、訪問授權等。
MDS與ceph-mon和ceph-osd類似也是一個Daemon進程,可以像MON和OSD一樣在多節點部署實現冗余。MDS進程可以被配置為活躍或者被動狀態,活躍的MDS為主MDS,其他的MDS處於備用狀態,當主MDS節點故障時,備用MDS節點會接管其工作並被提升為主節點。
MDS部署
在admin節點(ceph-1)運行ceph-deploy命令部署mds到control03上:
命令格式:#ceph-deploy mds create {host-name}[:{daemon-name}] [{host-name}[:{daemon-name}] ...] ceph-deploy mds create control03
創建CephFS
CephFS需要使用兩個Pool來分別存儲數據和元數據,下面我們分別創建fs_data和fs_metadata兩個Pool。設置pg_num為128:
ceph osd pool create fs_data 128 ceph osd pool create fs_metadata 128 ceph osd lspools 以上命令可以在隨便一個有admin權限的節點運行,即可以在ceph-1上也可以在contro03上執行,因為這2個節點都執行過ceph-deploy admin命令。
接下來創建一個CephFS:
ceph fs new cephfs fs_metadata fs_data
使用下面的命令可以查看創建的CephFS:
ceph fs ls name: cephfs, metadata pool: fs_metadata, data pools: [fs_data ]
掛載CephFS
客戶端訪問Ceph FS有兩種方式:
Kernel內核驅動:Linux內核從2.6.34版本開始加入對CephFS的原聲支持
Ceph FS FUSE: FUSE即Filesystem in Userspace
因為我們的系統內核版本滿足要求,所以我們以Kernel驅動方式掛載前面創建的那個CephFS:
mkdir /mnt/mycephfs mount -t ceph 192.168.1.161:6789,192.168.1.162:6789,192.168.1.163:6789:/ /mnt/mycephfs -o name=admin,secret=AQDVMQZbVNKEHhAAn0bzjYQpAgP5W1gKwtnthw== 註:上面的secret是ceph admin的密鑰,在文件/etc/ceph/ceph.client.admin.keyring中;如果集群中有多個文件系統,可以通過參數 -o mds_namespace=myfs 專門指定。 df -h Filesystem Size Used Avail Use% Mounted on 192.168.1.161:6789,192.168.1.162:6789,192.168.1.163:6789:/ 210G 496M 210G 1% /mnt/mycephfs
卸載Ceph文件系統:
umount /mnt/mycephfs
總結:
集群服務器和客戶端服務器可以分開也可以復用,總的來說使用ceph-deploy部署工具可以非常方便的部署塊設備/對象存儲/文件系統客戶端程序及相關配置,概念上也比較清晰。
進一步的,可以通過部署獨立的ceph集群給openstack使用,這樣openstack本身部署的時候不要啟用ceph,在使用塊設備/對象存儲的相關組建上配置使用外部ceph集群,可以有更靈活的架構選擇,比如塊設備使用一個快速固態硬盤存儲池,對象存儲使用慢速硬盤存儲池,這樣對隔離故障域也很有好處。
Ceph 之 塊設備、文件系統、對象存儲的使用