Ceph理解

原因: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

  • 啟動單機版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

簡介

啟動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 就可以看到以下管理界面。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ceph簡介 Ceph是一個分布式存儲系統(tǒng),誕生于2004年,是最早致力于開發(fā)下一代高性能分布式文件系統(tǒng)的項目。隨...
    愛吃土豆的程序猿閱讀 6,173評論 0 21
  • 第一章 OpenStack基礎(chǔ) OpenStack管理的資源及提供的服務(wù)OpenStack做為一個操作系統(tǒng),...
    sgt_tiger閱讀 13,242評論 4 72
  • 系統(tǒng)環(huán)境: centos73.10.0-514.26.2.el7.x86_64 機器數(shù)量:五臺 硬盤:四塊一塊為系...
    think_lonely閱讀 5,053評論 0 5
  • 集群管理 每次用命令啟動、重啟、停止Ceph守護(hù)進(jìn)程(或整個集群)時,必須指定至少一個選項和一個命令,還可能要指定...
    Arteezy_Xie閱讀 19,922評論 0 19
  • 一、概述 Ceph是一個分布式存儲系統(tǒng),誕生于2004年,最早致力于開發(fā)下一代高性能分布式文件系統(tǒng)的項目。隨著云計...
    魏鎮(zhèn)坪閱讀 49,907評論 3 54

友情鏈接更多精彩內(nèi)容