申明:基本安装是按照http://dockone.io/article/436来进行的,但原文中ceph集群的搭建不够完整,我这里会做一些补充及说明。
1、 下载mon和osd镜像
[root@ubuntu1 ~]# docker pull index.alauda.cn/georce/mon:hammer
[root@ubuntu1 ~]# docker pull index.alauda.cn/georce/osd:hammer
2、 一条命令搭建mon
[root@ubuntu1~]# 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的日志
[root@ubuntu1 ~]# docker logs -f mon
4、 编辑ceph配置文件
[root@ubuntu1 ~]# 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
[root@ubuntu1 ~]# docker restart mon
6、 两条命令创建osd
[root@ubuntu1 ~]# docker exec mon ceph osd create 生成osd的id
[root@ubuntu1 ~]# 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集群状态
[root@ubuntu1 ~]# docker exec -it mon ceph -s
集群默认会有一个叫做rbd的pool,默认副本是1,也就是说只有一个osd,pg应该也会达成active+clean, 但事实上pg没有达成active+clean的,不清楚原因。但一个副本显然没有意义,因此我们再增加osd。
那篇文章到此就结束了,这里继续补充如下。
8、 再创建一个osd
[root@ubuntu1 ~]# docker exec mon ceph osdcreate 生成osd的id
[root@ubuntu1 ~]# 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、 注意保持第一个几点的防火墙开放必要的端口 6789-6810等,能关最好先将防火墙关掉
2、 从第一个几点拷贝/etc/ceph目录到第二个节点
3、 开始创建osd,还是两条命令,但要注意,第一条命令只能在第一个几点上执行
[root@ubuntu1 ~]# docker exec mon ceph osdcreate 生成osd的id
[root@ubuntu2~]# 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上,分布如下:
root@ubuntu1:~# 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
root@ubuntu1:~# 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的技术我们也更容易对osd进行资源限制,但除此之外,好像也没有什么特别有意义的地方。