1. 程式人生 > >run ceph in docker

run ceph in docker

日誌 aud run size 添加 bytes ive star rim

申明:基本安裝是依照http://dockone.io/article/436來進行的,但原文中ceph集群的搭建不夠完整。我這裏會做一些補充及說明。


1、 下載mon和osd鏡像

[[email protected] ~]# docker pull index.alauda.cn/georce/mon:hammer

[[email protected] ~]# docker pull index.alauda.cn/georce/osd:hammer

2、 一條命令搭建mon

[[email protected]~]# docker run -itd --name=mon

--net=host -e MON_NAME=mymon -e MON_IP=192.168.1.100 -v /etc/ceph:/etc/ceph index.alauda.cn/georce/mon:hammer

這裏網絡選取了主機模式,另外須要註意的就是mon的ip。也就是本機的ip,這條命令會將映射本機/etc/ceph文件夾到container中。

命令運行完畢後,會在該文件夾中創建出ceph須要的文件。

3、 查看mon的日誌

[[email protected] ~]# docker logs -f mon

4、 編輯ceph配置文件

[[email protected]

/* */ ~]# vi ceph.conf

[global]

fsid = 4efc5ee7-8982-4bf4-808b-15372862fb78

mon initial members = mymon

mon host = 192.168.1.100

auth cluster required = cephx

auth service required = cephx

auth client required = cephx

osd crush chooseleaf type = 0

osd journal size = 100

osd pool default pg num = 8

osd pool default pgp num = 8

osd pool default size = 1

public network = 192.168.1.0/24

cluster network = 192.168.1.0/24

5、 重新啟動mon

[[email protected] ~]# docker restart mon

6、 兩條命令創建osd

[[email protected] ~]# docker exec mon ceph osd create 生成osd的id

[[email protected] ~]# docker run -itd --name=osd0 --net=host -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=mymon -e MON_IP=192.168.1.100 -v /etc/ceph:/etc/ceph -v /opt/osd/0:/var/lib/ceph/osd/ceph-0 index.alauda.cn/georce/osd:hammer

註意osd的文件夾,也就是會說直接將host的文件夾映射到容器裏供osd使用。這是一種方式。事實上還有第二種方式,就是將設備穿透到container裏,然後由container格式化及創建文件系統來使用磁盤。

7、 查看ceph集群狀態

[[email protected] ~]# docker exec -it mon ceph -s

集群默認會有一個叫做rbd的pool。默認副本是1。也就是說僅僅有一個osd,pg應該也會達成active+clean, 但其實pg沒有達成active+clean的。不清楚原因。

但一個副本顯然沒有意義。因此我們再添加osd。

那篇文章到此就結束了。這裏繼續補充例如以下。


8、 再創建一個osd

[[email protected] ~]# docker exec mon ceph osdcreate 生成osd的id

[[email protected] ~]# docker run -itd --name=osd1--net=host -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=mymon -eMON_IP=192.168.1.100 -v /etc/ceph:/etc/ceph -v /opt/osd/1:/var/lib/ceph/osd/ceph-1index.alauda.cn/georce/osd:hammer

我們又創建了一個osd,但pg還沒有達到active+clean狀態。

至此。我們在一個節點上。執行了三個容器,當中一個是mon,另外兩個各自是一個osd。但將osd都執行在一個host上沒有意義,因此我們在還有一個host上也開啟兩個osd。


在另外一個節點上:

1、 註意保持第一個幾點的防火墻開放必要的port 6789-6810等,能關最好先將防火墻關掉

2、 從第一個幾點拷貝/etc/ceph文件夾到第二個節點

3、 開始創建osd。還是兩條命令。但要註意,第一條命令僅僅能在第一個幾點上運行

[[email protected] ~]# docker exec mon ceph osdcreate 生成osd的id

[[email protected]~]# docker run -itd--name=osd1 --net=host -e CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=mymon -eMON_IP=192.168.1.100 -v /etc/ceph:/etc/ceph -v /opt/osd/2:/var/lib/ceph/osd/ceph-2index.alauda.cn/georce/osd:hammer

4、 相同的命令能夠創建新的osd


至此,如今ceph集群包括一個mon。四個osd分布在兩個host上,分布例如以下:

[email protected]:~# ceph osd tree

ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY

-1 4.00000 root default

-2 2.00000 host ubuntu1

0 1.00000 osd.0 up 1.00000 1.00000

1 1.00000 osd.1 up 1.00000 1.00000

-3 2.00000 host ubuntu2

3 1.00000 osd.3 up 1.00000 1.00000

2 1.00000 osd.2 up 1.00000 1.00000


假設pg沒有達成active+claen狀態,我們能夠刪除默認的pool(叫rbd),然後重建一個pool,而且將副本數改動為2.


10、刪除原來的pool。然後新建一個pool。

新建的pool中全部pg都達成了active+clean狀態。

ceph osd pool create volumes 64 64

ceph osd pool set volumes size 2

[email protected]:~# ceph -s

cluster f116eaa2-c97b-4351-b264-6cab9963dd9a

health HEALTH_OK

monmap e1: 1 mons at {mymon=10.10.10.61:6789/0}

election epoch 1, quorum 0 mymon

osdmap e34: 4 osds: 4 up, 4 in

pgmap v152: 128 pgs, 2 pools, 0 bytes data, 0 objects

10503 MB used, 65443 MB / 80106 MB avail

128 active+clean


新節點創建osd,須要註意的就是防火墻和配置文件。

這也僅僅是一個體驗,不須要我們去解決ceph安裝過程中包依賴的問題,確實便捷了非常多,但除此之外,利用docker的技術我們也更easy對osd進行資源限制。但除此之外,好像也沒有什麽特別有意義的地方。



run ceph in docker