原因:2017年4月14日 星期五 學(xué)習(xí)記錄。
說明:整理ceph資料。
我的博客 : http://minichao.me
前言
- 2006年Sage Weil發(fā)表了Ceph論文,啟動一個偉大的開源項目ceph。
- 本文參考文獻(xiàn)過多,包含github開源項目,UnitedStack項目等不一一引述。
- 本書主要引述于tobe的
《Ceph From Scratch》一書。
Ceph簡介
- Ceph的設(shè)計思路以及基本組件,用于理解Ceph的架構(gòu)設(shè)計、CRUSH、RADOS等概念,并且知道基于Ceph的RBD、RGW和CephFS等服務(wù)。
架構(gòu)介紹
- Ceph is a distributed object, block, and file storage platform.
- 也就是說,使用Ceph系統(tǒng)我們可以提供對象存儲、塊設(shè)備存儲和文件系統(tǒng)服務(wù),更有趣的是基于Ceph的key-value存儲和NoSQL存儲也在開發(fā)中,讓Ceph成為目前最流行的統(tǒng)一存儲系統(tǒng)。
Ceph底層提供了分布式的RADOS存儲,用與支撐上層的librados和RGW、RBD、CephFS等服務(wù)。Ceph實現(xiàn)了非常底層的object storage,是純粹的SDS,并且支持通用的ZFS、BtrFS和Ext4文件系統(tǒng),能輕易得Scale,沒有單點故障。 - 接下來馬上介紹Ceph的各個基礎(chǔ)組件。
基礎(chǔ)組件
- Object : Ceph最底層的存儲單元是Object對象,每個Object包含元數(shù)據(jù)和原始數(shù)據(jù)。
- OSD : OSD全稱Object Storage
- Device : 是負(fù)責(zé)響應(yīng)客戶端請求返回具體數(shù)據(jù)的進(jìn)程。一個Ceph集群一般都有很多個OSD。
- PG : PG全稱Placement Grouops,是一個邏輯的概念,一個PG包含多個OSD。引入PG這一層其實是為了更好的分配數(shù)據(jù)和定位數(shù)據(jù)。
- Monitor : 一個Ceph集群需要多個Monitor組成的小集群,它們通過Paxos同步數(shù)據(jù),用來保存OSD的元數(shù)據(jù)。
- RADOS : RADOS全稱Reliable Autonomic Distributed Object
- Store : 是Ceph集群的精華,用戶實現(xiàn)數(shù)據(jù)分配、Failover等集群操作。
- Libradio : Librados是Rados提供庫,因為RADOS是協(xié)議很難直接訪問,因此上層的RBD、RGW和CephFS都是通過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支持。
- CRUSH : CRUSH是Ceph使用的數(shù)據(jù)分布算法,類似一致性哈希,讓數(shù)據(jù)分配到預(yù)期的地方。
- RBD : RBD全稱RADOS block device,是Ceph對外提供的塊設(shè)備服務(wù)。
- RGW : RGW全稱RADOS gateway,是Ceph對外提供的對象存儲服務(wù),接口與S3和Swift兼容。
- MDS : MDS全稱Ceph Metadata Server,是CephFS服務(wù)依賴的元數(shù)據(jù)服務(wù)。
- CephFS : CephFS全稱Ceph File System,是Ceph對外提供的文件系統(tǒng)服務(wù)。
更多介紹
- 前面對Ceph各個組件都簡要介紹了一下。而最重要的RADOS的設(shè)計和CRUSH算法的使用,后面會有更詳細(xì)的介紹。
- 要想學(xué)好Ceph,最重要是實踐。
Ceph用法
- 本章將帶領(lǐng)大家一步一步使用Ceph,分布式系統(tǒng)的安裝和部署一般都是非常復(fù)雜的,而且很多教程不一定適用于本地的環(huán)境,我們本章所有代碼與命令都使用官方提供Docker容器,保證任何人都能輕易地使用Ceph并且得到預(yù)期的結(jié)果。
- 通過本章大家都可以掌握Ceph的基本操作命令,基于Ceph搭建自己的存儲系統(tǒng)。

Ceph容器
使用Docker
- 使用Ceph最簡單的方法是啟動Ceph容器,使用前必須保證本地已經(jīng)安裝好Docker。Debian/Ubuntu用戶可以通過apt-get install docker.io安裝,CentOS/Redhat用戶可以通過yum install docker安裝,Mac和Windows建議下載boot2docker來使用。
- 基本的docker命令如下:
docker images
docker pull ubuntu
docker run -i -t ubuntu /bin/bash
docker exec -i -t ubuntu /bin/bash
docker ps
Ceph容器
- Ceph社區(qū)提供了官方的docker鏡像,代碼與教程都托管到Github:https://github.com/ceph/ceph-docker
- 自動化部署教程:https://www.youtube.com/watch?v=FUSTjTBA8f8&feature=youtu.be
- Ansible部署教程:https://www.youtube.com/watch?v=DQYZU1VsqXc&feature=youtu.be
- 由于Ceph的配置文件必須指定IP地址,因此使用Ceph容器前我們必須獲得本機IP,如果是boot2docker用戶需要獲得其虛擬機IP。使用指令為
ifconfig或者ip addr,注意IP與使用網(wǎng)卡的對應(yīng)關(guān)系。
啟動Ceph
- 啟動單機版ceph非常簡單,使用下述命令。
docker@dev:~$ docker run -d --net=host -e MON_IP=10.0.2.15 -e CEPH_NETWORK=10.0.2.0/24 ceph/demo
badaf5c8fed1e0edf6f2281539669d8f6522ba54b625076190fe4d6de79745ff
- 然后可以通過docker ps來檢查容器狀態(tài)。
docker@dev:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
badaf5c8fed1 ceph/demo "/entrypoint.sh" 9 seconds ago Up 9 seconds loving_pasteur
- 這里ceph容器的ID為“badaf5c8fed1”,可以快速進(jìn)入容器。
docker@dev:~$ docker exec -i -t badaf5c8fed1 /bin/bash
root@dev:/#
基本命令
檢查狀態(tài)
- 最簡單的ceph命令是,
ceph -w,也就是watch整個ceph集群的狀態(tài)。
root@dev:/# ceph -w
cluster fee30c76-aec4-44d4-8138-763969aaa562
health HEALTH_OK
monmap e1: 1 mons at {dev=10.0.2.15:6789/0}
election epoch 2, quorum 0 dev
mdsmap e5: 1/1/1 up {0=0=up:active}
osdmap e18: 1 osds: 1 up, 1 in
pgmap v22: 120 pgs, 8 pools, 2810 bytes data, 63 objects
4519 MB used, 13115 MB / 18603 MB avail
120 active+clean
2015-07-12 06:53:58.454077 mon.0 [INF] pgmap v22: 120 pgs: 120 active+clean; 2810 bytes data, 4519 MB used, 13115 MB / 18603 MB avail
- 或者通過ceph status命令。
root@dev:/# ceph status
cluster fee30c76-aec4-44d4-8138-763969aaa562
health HEALTH_OK
monmap e1: 1 mons at {dev=10.0.2.15:6789/0}
election epoch 2, quorum 0 dev
mdsmap e5: 1/1/1 up {0=0=up:active}
osdmap e21: 1 osds: 1 up, 1 in
pgmap v30: 120 pgs, 8 pools, 2810 bytes data, 63 objects
4521 MB used, 13114 MB / 18603 MB avail
120 active+clean
RADOS命令
Pool簡介
- Pool是Ceph中的邏輯概念,不同的應(yīng)用可以使用不同的Pool。
Pool相關(guān)命令
root@dev:/# rados lspools
rbd
cephfs_data
cephfs_metadata
.rgw.root
.rgw.control
.rgw
.rgw.gc
.users.uid
- 如果想獲得特定Pool的數(shù)據(jù)。
root@dev:/# rados -p .rgw ls
root@dev:/# rados -p .rgw.root ls
default.region
region_info.default
zone_info.default
容量相關(guān)
- 獲得當(dāng)前OSD所用容量。
root@dev:/# rados df
pool name KB objects clones degraded unfound rd rd KB wr wr KB
.rgw 0 0 0 0 0 0 0 0 0
.rgw.control 0 8 0 0 0 0 0 0 0
.rgw.gc 0 32 0 0 0 288 256 192 0
.rgw.root 1 3 0 0 0 0 0 3 3
.users.uid 0 0 0 0 0 0 0 0 0
cephfs_data 0 0 0 0 0 0 0 0 0
cephfs_metadata 2 20 0 0 0 0 0 31 8
rbd 0 0 0 0 0 0 0 0 0
total used 4630192 63
total avail 13428976
total space 19049892
Bucket命令
創(chuàng)建Bucket
root@dev:/# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 1.00000 root default
-2 1.00000 host dev
0 1.00000 osd.0 up 1.00000 1.00000
root@dev:/# ceph osd crush add-bucket rack01 rack
added bucket rack01 type rack to crush map
root@dev:/# ceph osd crush add-bucket rack02 rack
added bucket rack02 type rack to crush map
root@dev:/# ceph osd crush add-bucket rack03 rack
added bucket rack03 type rack to crush map
root@dev:/# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-5 0 rack rack03
-4 0 rack rack02
-3 0 rack rack01
-1 1.00000 root default
-2 1.00000 host dev
0 1.00000 osd.0 up 1.00000 1.00000
移動Rack
root@dev:/# ceph osd crush move rack01 root=default
moved item id -3 name 'rack01' to location {root=default} in crush map
root@dev:/# ceph osd crush move rack02 root=default
moved item id -4 name 'rack02' to location {root=default} in crush map
root@dev:/# ceph osd crush move rack03 root=default
moved item id -5 name 'rack03' to location {root=default} in crush map
root@dev:/# ceph osd tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 1.00000 root default
-2 1.00000 host dev
0 1.00000 osd.0 up 1.00000 1.00000
-3 0 rack rack01
-4 0 rack rack02
-5 0 rack rack03
Object操作
創(chuàng)建Pool
root@dev:/# ceph osd pool create web-services 128 128
pool 'web-services' created
root@dev:/# rados lspools
rbd
cephfs_data
cephfs_metadata
.rgw.root
.rgw.control
.rgw
.rgw.gc
.users.uid
web-services
添加Object
root@dev:/# echo "Hello Ceph, You are Awesome like MJ" > /tmp/helloceph
root@dev:/# rados -p web-services put object1 /tmp/helloceph
root@dev:/# rados -p web-services ls
object1
root@dev:/# ceph osd map web-services object1
osdmap e29 pool 'web-services' (8) object 'object1' -> pg 8.bac5debc (8.3c) -> up ([0], p0) acting ([0], p0)
查看Object
root@dev:/# cd /var/lib/ceph/osd/
root@dev:/var/lib/ceph/osd# ls ceph-0/current/8.3c_head/
__head_0000003C__8 object1__head_BAC5DEBC__8
root@dev:/var/lib/ceph/osd# cat ceph-0/current/8.3c_head/object1__head_BAC5DEBC__8
Hello Ceph, You are Awesome like MJ
Ceph架構(gòu)
- 前面粗略地介紹了Ceph、RADOS、CRUSH等概念和用法,本章將重點剖析具體的架構(gòu)與算法,詳細(xì)介紹其設(shè)計和實現(xiàn)細(xì)節(jié)。
<div align="center">

</div>
論文介紹
簡介
- Ceph是Sega本人的博士論文作品,想了解Ceph的架構(gòu)設(shè)計最好的方式是閱讀Sega的論文,其博士論文我們稱之為長論文,后來整理成三篇較短的論文。
長論文
- 長論文包含了RADOS、CRUSH等所有內(nèi)容的介紹,但篇幅相當(dāng)長,如果感興趣可以閱讀,標(biāo)題為《CEPH: RELIABLE, SCALABLE, AND HIGH-PERFORMANCE DISTRIBUTED STORAGE》,地址 http://ceph.com/papers/weil-thesis.pdf 。
CRUSH論文
- CRUSH論文論文標(biāo)題為《CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data》,地址 http://ceph.com/papers/weil-crush-sc06.pdf ,介紹了CRUSH的設(shè)計與實現(xiàn)細(xì)節(jié)。
RADOS
- RADOS論文論文標(biāo)題為《RADOS: A Scalable, Reliable Storage Service for Petabyte-scale Storage Clusters》,地址為 http://ceph.com/papers/weil-rados-pdsw07.pdf ,介紹了RADOS的設(shè)計與實現(xiàn)細(xì)節(jié)。
CephFS論文
- CephFS論文標(biāo)題為《Ceph: A Scalable, High-Performance Distributed File System》,地址為 http://ceph.com/papers/weil-ceph-osdi06.pdf ,介紹了Ceph的基本架構(gòu)和Ceph的設(shè)計與實現(xiàn)細(xì)節(jié)。
CRUSH詳解
CRUSH簡介
- CRUSH全稱
Controlled Replication Under Scalable Hashing,是一種數(shù)據(jù)分發(fā)算法,類似于哈希和一致性哈希。哈希的問題在于數(shù)據(jù)增長時不能動態(tài)加Bucket,一致性哈希的問題在于增加Bucket時數(shù)據(jù)遷移量比較大,其他數(shù)據(jù)分發(fā)算法依賴中心的Metadata服務(wù)器來存儲元數(shù)據(jù)效率較低,CRUSH則是通過計算、接受多維參數(shù)的來解決動態(tài)數(shù)據(jù)分發(fā)的場景。
算法基礎(chǔ)
- 在學(xué)習(xí)CRUSH之前,需要了解以下的內(nèi)容。
- CRUSH算法接受的參數(shù)包括cluster map,也就是硬盤分布的邏輯位置,例如這有多少個機房、多少個機柜、硬盤是如何分布的等等。cluster map是類似樹的多層結(jié)果,子節(jié)點是真正存儲數(shù)據(jù)的device,每個device都有id和權(quán)重,中間節(jié)點是bucket,bucket有多種類型用于不同的查詢算法,例如一個機柜一個機架一個機房就是bucket。
- 另一個參數(shù)是placement rules,它指定了一份數(shù)據(jù)有多少備份,數(shù)據(jù)的分布有什么限制條件,例如同一份數(shù)據(jù)不能放在同一個機柜里等的功能。每個rule就是一系列操作,take操作就是就是選一個bucket,select操作就是選擇n個類型是t的項,emit操作就是提交最后的返回結(jié)果。select要考慮的東西主要包括是否沖突、是否有失敗和負(fù)載問題。
- 算法的還有一個輸入是整數(shù)x,輸出則是一個包含n個目標(biāo)的列表R,例如三備份的話輸出可能是[1, 3, 5]。
算法解讀
<div align="center">

</div>
- 圖雖然很復(fù)雜,但如果理解了幾個基本操作的含義就很好讀下來了,這里是三個操作的偽代碼,take和emit很好理解,select主要是遍歷當(dāng)前bucket,如果出現(xiàn)重復(fù)、失敗或者超載就跳過,其中稍微復(fù)雜的“first n”部分是一旦遇到失敗,第一種情況是直接使用多備份,第二種情況是使用erasing code基本可以忽略??粗旅娴膱D就更好理解具體的算法了
<div align="center">

</div>
CRUSH總結(jié)
算法總結(jié)
- CRUSH與一致性哈希最大的區(qū)別在于接受的參數(shù)多了cluster map和placement rules,這樣就可以根據(jù)目前cluster的狀態(tài)動態(tài)調(diào)整數(shù)據(jù)位置,同時通過算法得到一致的結(jié)果。
算法補充
- 前面介紹了bucket根據(jù)不同場景有四種類型,分別是Uniform、List、Tree和Straw,他們對應(yīng)運行數(shù)據(jù)和數(shù)據(jù)遷移量有不同的tradeoff,目前大家都在用Straw因此不太需要關(guān)系其他。
- 目前erasing code可以大大減小三備份的數(shù)據(jù)量,但除了會導(dǎo)致數(shù)據(jù)恢復(fù)慢,部分ceph支持的功能也是不能直接用的,而且功能仍在開發(fā)中不建議使用。
RADOS詳解
- RADOS是ceph實現(xiàn)高可用、數(shù)據(jù)自動恢復(fù)的框架,設(shè)計的點比較多后面在詳細(xì)介紹。
<div align="center">

</div>
RBD
- 本章將介紹使用ceph搭建塊設(shè)備服務(wù)。
<div align="center">

</div>
RBD命令
檢查Pool
- Ceph啟動后默認(rèn)創(chuàng)建rbd這個pool,使用rbd命令默認(rèn)使用它,我們也可以創(chuàng)建新的pool。
rados lspools
ceph osd pool create rbd_pool 1024
創(chuàng)建image
- 使用rbd命令創(chuàng)建image,創(chuàng)建后發(fā)現(xiàn)rbd這個pool會多一個
rbd_directory的object。
rbd create test_image --size 1024
rbd ls
rbd --image test_image info
rados -p rbd ls
修改image大小
- 增加Image大小可以直接使用resize子命令,如果縮小就需要添加--allow-shrink參數(shù)保證安全。
rbd --image test_image resize --size 2000
rbd --image test_image resize --size 1000 --allow-shrink
使用Image
- 通過map子命令可以把鏡像映射成本地塊設(shè)備,然后就可以格式化和mount了。
rbd map test_image
rbd showmapped
mkfs.ext4 /dev/rbd0
mount /dev/rbd0 /mnt/
移除Image
umount /dev/rbd0
rbd unmap /dev/rbd0
rbd showmapped
刪除Image
- 刪除和Linux類似使用rm命令即可。
rbd --image test_image rm
RBD快照
創(chuàng)建快照
- 通過snap子命令可以創(chuàng)建和查看快照。
rbd snap create --image test_image --snap test_snap
rbd snap ls --image test_image
快照回滾
- 使用snap rollback就可以回滾快照,由于快照命名是鏡像名后面加@,我們還可以下面的簡便寫法。
rbd snap rollback --image test_image --snap test_snap
rbd snap rollback rbd/test_image@test_snap
刪除快照
- 刪除快照也很簡單,使用rm子命令,如果想清理所有快照可以使用purge子命令,注意Ceph刪除是異步的不會立即釋放空間。
rbd snap rm --image test_image --snap test_snap
rbd snap purge --image test_image
保護(hù)快照
- 保護(hù)快照可以防止用戶誤刪數(shù)據(jù),這是clone前必須做的。
rbd snap protect --image test_image --snap test_snap
- 要想不保護(hù)快照也很容易,使用unprotect子命令即可。
rbd snap unprotect --image test_image --snap test_snap
RBD克隆
創(chuàng)建clone
- RBD克隆就是通過快照克隆出新的可讀可寫的Image,創(chuàng)建前需要創(chuàng)建format為2的鏡像快照。
rbd create test_image2 --size 1024 --image-format 2
rbd snap create --image test_image2 --snap test_snap2
rbd snap protect --image test_image2 --snap test_snap2
- 通過clone子命令就可以創(chuàng)建clone了。
rbd clone --image test_image2 --snap test_snap2 test_clone
列舉clone
- 通過children子命令可以列舉這個快照的所有克隆。
rbd children --image test_image2 --snap test_snap2
填充克隆
- 填充克隆也就是把快照數(shù)據(jù)flatten到clone中,如果你想刪除快照你需要flatten所有的子Image。
rbd flatten --image test_clone
RBD和Qemu
使用Qemu
- 官方Qemu已經(jīng)支持librbd,使用Qemu創(chuàng)建鏡像前需要安裝工具。
apt-get install -y qemu-utils
創(chuàng)建鏡像
- 創(chuàng)建鏡像非常簡單,使用qemu-img命令,注意目前RBD只支持raw格式鏡像。
qemu-img create -f raw rbd:rbd/test_image3 1G
修改鏡像大小
- 修改鏡像大小可以使用resize子命令。
qemu-img resize rbd:rbd/test_image3 2G
查看鏡像信息
- 通過info可以獲取Qemu鏡像信息。
qemu-img info rbd:rbd/test_image3
RBD和Virsh
安裝Virsh
- Virsh是通用的虛擬化技術(shù)抽象層,可以統(tǒng)一管理Qemu/
- KVM、Xen和LXC等,要結(jié)合Virsh和RBD使用,我們需要安裝對應(yīng)工具。
apt-get install -y virt-manager
RBD和Openstack
OpenStack介紹
- OpenStack開源的云平臺,其中Nova提供虛擬機服務(wù),Glance提供鏡像服務(wù),Cinder提供塊設(shè)備服務(wù)。因為OpenStack是Python實現(xiàn)的,因此RBD與OpenStack集成需要安裝下面的軟件。
apt-get install -y python-ceph
Nova與RBD
- 修改nova.conf配置文件。
libvirt_images_type=rbd
libvirt_images_rbd_pool=volumes
libvirt_images_rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user=cinder
rbd_secret_uuid=457eb676-33da-42ec-9a8c-9293d545c337
libvirt_inject_password=false
libvirt_inject_key=false
libvirt_inject_partition=-2
Glance與RBD
- 修改glance-api.conf配置文件。
default_store=rbd
rbd_store_user=glance
rbd_store_pool=images
show_image_direct_url=True
Cinder與RBD
- 修改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
glance_api_version=2
backup_driver=cinder.backup.drivers.ceph
backup_ceph_conf=/etc/ceph/ceph.conf
backup_ceph_user=cinder-backup
backup_ceph_chunk_size=134217728
backup_ceph_pool=backups
backup_ceph_stripe_unit=0
backup_ceph_stripe_count=0
restore_discard_excess_bytes=true
Python librbd
安裝librbd
- Ceph官方提供Python庫來訪問RBD,通過以下命令可以安裝。
apt-get install -y python-ceph
創(chuàng)建Image
- 使用librbd創(chuàng)建Image也很簡單,下面是示例代碼。
import rados
import rbd
cluster = rados.Rados(conffile='/etc/ceph/ceph.conf')
cluster.connect()
ioctx = cluster.open_ioctx('rbd')
rbd_inst = rbd.RBD()
size = 1024**3
image_name = "test_image"
rbd_inst.create(ioctx, image_name, size)
image = rbd.Image(ioctx, image_name)
data = 'foo' * 200
image.write(data, 0)
image.close()
ioctx.close()
cluster.shutdown()
- 也可以把下面代碼保存成文件直接執(zhí)行。
cluster = rados.Rados(conffile='/etc/ceph/ceph.conf')
try:
ioctx = cluster.open_ioctx('rbd')
try:
rbd_inst = rbd.RBD()
size = 1024**3
image_name = "test_image"
rbd_inst.create(ioctx, image_name, size)
image = rbd.Image(ioctx, image_name)
try:
data = 'foo' * 200
image.write(data, 0)
finally:
image.close()
finally:
ioctx.close()
finally:
cluster.shutdown()
- 或者這樣。
with rados.Rados(conffile='/etc/ceph/ceph.conf') as cluster:
with cluster.open_ioctx('rbd') as ioctx:
rbd_inst = rbd.RBD()
size = 1024**3
image_name = "test_image"
rbd_inst.create(ioctx, image_name, size)
with rbd.Image(ioctx, image_name) as image:
data = 'foo' * 200
image.write(data, 0)
RGW
- RGW是ceph提供對象存儲服務(wù),本章將介紹RGW的搭建和使用,從而提供類似S3和Swift服務(wù)。
通過本章你可以在本地起ceph的S3服務(wù),然后使用命令行或者SDK工具來訪問對象存儲服務(wù),并且使用ceph管理用戶和quota。
<div align="center">

</div>
RGW介紹
- RGW全稱Rados Gateway,是ceph封裝RADOS接口而提供的gateway服務(wù),并且實現(xiàn)S3和Swift兼容的接口,也就是說用戶可以使用S3或Swift的命令行工具或SDK來使用RGW。
- RGW對象存儲也可以作為docker registry的后端,相對與本地存儲,將docker鏡像存儲到RGW后端可以保證即使機器宕機或者操作系統(tǒng)crush也不會丟失數(shù)據(jù)。
<div align="center">

</div>
RGW用法
使用RGW
- RGW同時提供了S3和Swift兼容的接口,因此只要啟動了RGW服務(wù),就可以像使用S3或Swift那樣訪問RGW的object和bucket了。
- 本地啟動RGW的命令也很簡單,啟動ceph/demo鏡像即可,命令如下:
docker run -d --net=host -e MON_IP=10.251.0.105 -e CEPH_NETWORK=10.251.0.0/24 ceph/demo
用戶操作
- 查看用戶信息:
radosgw-admin user info --uid=mona
Bucket操作
- 查看bucket信息。
root@dev:~# radosgw-admin bucket stats
[]
S3用法
創(chuàng)建用戶
root@dev:/# radosgw-admin user create --uid=mona --display-name="Monika Singh" --email=mona@example.com
{
"user_id": "mona",
"display_name": "Monika Singh",
"email": "mona@example.com",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{
"user": "mona",
"access_key": "2196PJ0MA6FLHCVKVFDW",
"secret_key": "eO1\/dmEOEU5LlooexlWwcqJYZrt3Gzp\/nBXsQCwz"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}
添加Capabilities
radosgw-admin caps add --uid=mona --caps="users=*"
radosgw-admin caps add --uid=mona --caps="buckets=*"
radosgw-admin caps add --uid=mona --caps="metadata=*"
radosgw-admin caps add --uid=mona --caps="zone=*"
安裝s3cmd
apt-get install python-setuptools
git clone https://github.com/s3tools/s3cmd.git
cd s3cmd/
python setup.py install
使用s3cmd
- 必須提前設(shè)置.s3cfg文件。
s3cmd ls
Swift用法
創(chuàng)建用戶
root@dev:~# radosgw-admin subuser create --uid=mona --subuser=mona:swift --access=full --secret=secretkey --key-type=swift
{
"user_id": "mona",
"display_name": "Monika Singh",
"email": "mona@example.com",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [
{
"id": "mona:swift",
"permissions": "<none>"
}
],
"keys": [
{
"user": "mona",
"access_key": "2196PJ0MA6FLHCVKVFDW",
"secret_key": "eO1\/dmEOEU5LlooexlWwcqJYZrt3Gzp\/nBXsQCwz"
},
{
"user": "mona:swift",
"access_key": "2FTDLNGGOWALF1ZS5XHY",
"secret_key": ""
}
],
"swift_keys": [
{
"user": "mona:swift",
"secret_key": "secretkey"
}
],
"caps": [
{
"type": "buckets",
"perm": "*"
},
{
"type": "metadata",
"perm": "*"
},
{
"type": "users",
"perm": "*"
},
{
"type": "zone",
"perm": "*"
}
],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}
安裝Swift客戶端
apt-get install python-pip
pip install python-swiftclient
Swift命令
swift -V 1.0 -A http://localhost/auth -U mona:swift -K secretkey post example-bucket
swift -V 1.0 -A http://localhost/auth -U mona:swift -K secretkey list
CephFS
- 這一章計劃介紹CephFS的搭建和使用。
由于CephFS仍未能上Production環(huán)境,本章內(nèi)容將在CephFS穩(wěn)定后繼續(xù)完善。
Ceph監(jiān)控
- 這一章將介紹Ceph的監(jiān)控與運維,搭建Ceph是一次性的工作,但運維Ceph卻是長久的任務(wù),幸運的是Ceph本身提供了很好的監(jiān)控管理工具,方便我們管理Ceph集群。
- 通過本章我們可以學(xué)到Ceph官方提供的ceph-rest-api,并帶領(lǐng)大家一步一步實現(xiàn)基于ceph-rest-api的Web監(jiān)控管理工具。

Ceph-rest-api
簡介
- Ceph-rest-api是Ceph官方提供的RESTful API接口,啟動其進(jìn)程后我們可以通過HTTP接口來收集Ceph集群狀態(tài)與數(shù)據(jù),并且進(jìn)行起停OSD等管理操作。
- 詳細(xì)的API文檔可參考 https://dmsimard.com/2014/01/01/documentation-for-ceph-rest-api/ 。
啟動API
- 因為ceph-rest-api需要管理一個ceph集群,我們建議通過ceph/demo來啟動。
docker run -d --net=host -e MON_IP=10.0.2.15 -e CEPH_NETWORK=10.0.2.0/24 ceph/demo
ceph-rest-api -n client.admin
- 這樣在啟動單機版ceph的同時,也啟動了ceph-rest-api。
測試API
- 通過簡單的curl命令即可獲得集群的狀態(tài)信息。
root@dev:/# curl 127.0.0.1:5000/api/v0.1/health
HEALTH_OK
- 或者查詢更復(fù)雜的數(shù)據(jù)。
root@dev:/# curl 127.0.0.1:5000/api/v0.1/osd/tree
ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 1.00000 root default
-2 1.00000 host dev
0 1.00000 osd.0 up 1.00000 1.00000
-3 0 rack rack01
-4 0 rack rack02
-5 0 rack rack03
Ceph-web
監(jiān)控工具
- 前面提到過的ceph-rest-api,為我們提供了HTTP接口來訪問Ceph集群的狀態(tài)信息,但是只有ceph-rest-api遠(yuǎn)遠(yuǎn)不夠,我們需要更友好的Web管理工具。這里我們將介紹開源的ceph-web項目,是非常簡單的Web前端,通過ceph-rest-api獲得數(shù)據(jù)并展示。
Ceph-web
- 為了不增加API的復(fù)雜性,ceph-web遵循官方ceph-rest-api的接口,只是提供HTTP服務(wù)器并展示Ceph的數(shù)據(jù),開源地址 https://github.com/tobegit3hub/ceph-web 。
- 目前ceph-web已經(jīng)支持通過容器運行,執(zhí)行下述命令即可一鍵啟動Ceph監(jiān)控工具。
docker run -d --net=host tobegit3hub/ceph-web
- 這樣通過瀏覽器打開 http://127.0.0.1:8080 就可以看到以下管理界面。
