Ubuntu系统中基于Docker单机搭建Ceph集群

ubuntu:18.04

0.拉取镜像
docker pull ceph/daemon
  • ceph/mon、ceph/osd…等一个一个镜像拉取是比较旧的方法
1.初始化ceph挂载目录
 rm -rf /etc/ceph /var/lib/ceph /var/log/ceph
 mkdir -p /etc/ceph /var/lib/ceph /var/log/ceph
2.创建Ceph专用网络
docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network
docker network inspect ceph-network
3.启动mon节点
docker run -itd
--name monnode --network ceph-network --ip 172.20.0.10 --restart always -v
/etc/ceph:/etc/ceph -v /var/lib/ceph/:/var/lib/ceph/ -v
/var/log/ceph/:/var/log/ceph/ -e CLUSTER=ceph -e WEIGHT=1.0 -e
MON_IP=172.20.0.10 -e MON_NAME=monnode -e CEPH_PUBLIC_NETWORK=172.20.0.0/16
ceph/daemon mon
  • –ip:设置的是容器的IP
  • ceph/daemon mon:中的mon是参数,不可随意更改
  • 学习中,参数配置可能会有多余的
docker logs monnode	# 查看日志
docker exec monnode ceph -s 	# 查看集群的健康状态

4.创建osd节点
  • 创建osd节点前先执行,不然会报错(执行一次即可)
docker exec monnode ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring
docker run -itd
--privileged=true --name osdnode1 --network ceph-network -e CLUSTER=ceph -e
WEIGHT=1.0 -e MON_NAME=monnode -e MON_IP=172.20.0.10 -v /etc/ceph:/etc/ceph -v
/var/lib/ceph/:/var/lib/ceph/ -v /var/lib/ceph/osd/1:/var/lib/ceph/osd -e
OSD_TYPE=directory -v /etc/localtime:/etc/localtime:ro ceph/daemon osd
  • 创建三个(分别为:osdnode0、osdnode1、osdnode2)
  • 每次修改参数:–name、-v /var/lib/ceph/osd/1
  • 每次创建完与mon同样查看相应的log和集群状态,以便及时发现错误
  • osd节点启动可能会慢一些
  • docker logs osdnode0可能会有报错如下,改错应该是无伤大雅
ceph-0.1 | 2020-02-27 18:25:51.787 7f5aa2934700 -1 osd.0 4 set_numa_affinity unable to identify public interface 'eth0' numa node: (2) No such file or directory
5.创建mgr节点
docker run -itd --privileged=true --restart=always --name mgrnode
--network ceph-network -e CLUSTER=ceph --pid=container:monnode -v
/etc/ceph:/etc/ceph -v /var/lib/ceph/:/var/lib/ceph/ ceph/daemon mgr
  • 需要注意的参数:–pid
6.创建gateway节点
docker exec monnode ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring
docker run -itd
--privileged=true --name rgwnode --network ceph-network -e CLUSTER=ceph -v
/var/lib/ceph/:/var/lib/ceph/ -v /etc/ceph:/etc/ceph -v
/etc/localtime:/etc/localtime:ro -e RGW_NAME=rgw0 ceph/daemon rgw
7.再创建两个mon节点
  • monnode1节点,IP为172.20.0.13
docker run -itd
--privileged=true --name monnode1 --ip 172.20.0.13 --network ceph-network -e
CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=monnode1 -e MON_IP=172.20.0.13 -e
CEPH_PUBLIC_NETWORK=172.20.0.0/16 -v /etc/ceph:/etc/ceph -v
/var/lib/ceph/:/var/lib/ceph/ -v /var/log/ceph/:/var/log/ceph/ ceph/daemon mon
  • monnode2节点,IP为172.20.0.11
  • IP是随便设置的
docker run -itd
--privileged=true --name monnode2 --ip 172.20.0.11 --network ceph-network -e
CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=monnode2 -e MON_IP=172.20.0.11 -e
CEPH_PUBLIC_NETWORK=172.20.0.0/16 -v /etc/ceph:/etc/ceph -v
/var/lib/ceph/:/var/lib/ceph/ -v /var/log/ceph/:/var/log/ceph/ ceph/daemon mon
8.查看集群状态
docker exec monnode ceph -s

在这里插入图片描述

9.后续问题
9.1 mon节点启动失败
  • monnode2节点重启失败
  • docker logs monnode2查看日志,发现
Existing mon, trying to rejoin cluster...
  • 解决方法:
    复制容器的脚本:
docker cp monnode2:/opt/ceph-container/bin/start_mon.sh .

修改以下内容:

# 注释此行,直接将v2v1复制为2,代表是走V2协议, 以指定IP方式加入集群
#v2v1=$(ceph-conf -c /etc/ceph/${CLUSTER}.conf 'mon host' | tr ',' '\n' | grep -c ${MON_IP})
v2v1=2

再将脚本复制到容器内:

docker cp start_mon.sh monnode2:/opt/ceph-container/bin/start_mon.sh

再重启monode2即可!!!
参考:
https://blog.csdn.net/hxx688/article/details/103440967

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值