专栏首页张戈的专栏基于Docker部署ceph分布式文件系统(Luminous版本)

基于Docker部署ceph分布式文件系统(Luminous版本)

摘 要

本文记录分享了ceph分布式文件系统的详尽部署过程,既是为了方便自己后续回溯,也希望能给初次接触ceph的同学提供些许参考。

文章目录

最近在学习 K8S,其中会用到分布式文件存储系统,因此着手搭建测试了一把。为了简单方便,这里依然是基于 Docker 部署,极大地简化了部署配置的难度。

一、环境准备

文中涉及的 IP 的角色属性清单:

名称

服务器 IP

角色

备注

Ceph Cluster

192.168.1.100

MON/OSD/RBD/MDS/MGR/RGW

系统版本:Centos7.2 硬件配置: CPU:24 核 内存:64GB 硬盘:2TBx11 SATA 网卡:10G 全双工

192.168.1.101

MON/OSD/RBD/MDS/MGR/RGW

192.168.1.102

MON/OSD/RBD/MDS/MGR/RGW

在 3 台服务器进行如下初始化:

1、配置 hosts

cat >> /etc/hosts <<EOF
192.168.1.100 ceph1
192.168.1.101 ceph2
192.168.1.102 ceph3
EOF

2、建立信任关系

#在192.168.1.100(ceph1)上执行:
ssh-keygen
ssh-copy-id ceph2 
ssh-copy-id ceph3

3、磁盘初始化

Ps:本文实验服务器环境有 11 块盘,实际部署时请根据服务器实际情况对下文代码进行调整。

①、格式化

ceph 推荐使用 XFS 格式,这里服务器有 11 块盘(/dev/sdb~/dev/sdl,不含系统盘),这里循环格式化:

for i in  b c d e f g h i j k l;do  mkfs.xfs -f /dev/sd${i}1; done

②、磁盘挂载

为每块磁盘 创建一个挂载点文件夹(/data1~/data11):

mkdir -p /data{1..10}

在/etc/fstab 追加如下内容:

cat >> /etc/fstab <<EOF
/dev/sdb1 /data1 xfs defaults 0 0
/dev/sdc1 /data2 xfs defaults 0 0
/dev/sdd1 /data3 xfs defaults 0 0
/dev/sde1 /data4 xfs defaults 0 0
/dev/sdf1 /data5 xfs defaults 0 0
/dev/sdg1 /data6 xfs defaults 0 0
/dev/sdh1 /data7 xfs defaults 0 0
/dev/sdi1 /data8 xfs defaults 0 0
/dev/sdj1 /data9 xfs defaults 0 0
/dev/sdk1 /data10 xfs defaults 0 0
/dev/sdl1 /data11 xfs defaults 0 0
EOF

最后执行 mount -a 挂载,使用 df -h 查看挂载情况:

/dev/sdb1 1.9T 221M 1.9T 1% /data1
/dev/sdc1 1.9T 213M 1.9T 1% /data2
/dev/sdd1 1.9T 209M 1.9T 1% /data3
/dev/sde1 1.9T 221M 1.9T 1% /data4
/dev/sdf1 1.9T 213M 1.9T 1% /data5
/dev/sdg1 1.9T 213M 1.9T 1% /data6
/dev/sdh1 1.9T 213M 1.9T 1% /data7
/dev/sdi1 1.9T 213M 1.9T 1% /data8
/dev/sdj1 1.9T 214M 1.9T 1% /data9
/dev/sdk1 1.9T 214M 1.9T 1% /data10
/dev/sdl1 1.9T 226M 1.9T 1% /data11

4、安装 docker

可自行搞定,也可以如下使用 yum 安装:

yum install -y docker
systemctl enable docker
systemctl start docker

5、拉取 ceph 镜像

这里用到了 dockerhub 上最流行的 ceph/daemon 镜像:

docker pull ceph/daemon:latest

6、创建目录

mkdir /data/ceph/{admin,etc,lib,logs}
chown -R 167:167 /data/ceph/  #docker内用户id是167,这里进行授权

7、内核优化

#调整内核参数
cat >> /etc/sysctl.conf << EOF
kernel.pid_max=4194303
vm.swappiness = 0
EOF
sysctl -p
 
# read_ahead, 通过数据预读并且记载到随机访问内存方式提高磁盘读操作,根据一些Ceph的公开分享,8192是比较理想的值
echo "8192" > /sys/block/sda/queue/read_ahead_kb
 
# I/O Scheduler,关于I/O Scheculder的调整,简单说SSD要用noop,SATA/SAS使用deadline。
echo "deadline" > /sys/block/sd[x]/queue/scheduler
echo "noop" > /sys/block/sd[x]/queue/scheduler

8、其他配置

把容器内的 ceph 命令 alias 到本地,方便使用,其他 ceph 相关命令也可以参考添加:

echo 'alias ceph="docker exec mon ceph"' >> /etc/profile
source /etc/profile

三、部署 ceph

Ps:以下操作均在 192.168.1.100(ceph1)上进行。

1、编写脚本

vim /data/ceph/admin/start_mon.sh

#!/bin/bash
docker run -d --net=host \
    --name=mon \
    --restart=always \
    -v /etc/localtime:/etc/localtime \
    -v /data/ceph/etc:/etc/ceph \
    -v /data/ceph/lib:/var/lib/ceph \
    -v /data/ceph/logs:/var/log/ceph \
    -e MON_IP=192.168.1.100,192.168.1.101,192.168.1.102 \
    -e CEPH_PUBLIC_NETWORK=192.168.1.0/24 \
    ceph/daemon:latest mon

Ps:Monitor 节点这里有个很关键的配置:MON_IP 和 CEPH_PUBLIC_NETWORK 要写全,比如本文有 3 台服务器,那么 MAN_IP 需要写上 3 个 IP,而且如果 IP 跨网段,那么 CEPH_PUBLIC_NETWORK 必须写上所有网段,否则就会像网上大部分已有教程一样,只指定一个 IP 和一个网段是无法启动的!

vim /data/ceph/admin/start_osd.sh

#!/bin/bash
# 这里表示有11个分区,及从data1-data11,请根据实际情况修改(必须确保所有节点osd数量总和是奇数,否则就减少某一节点的osd启动数):
for i in {1..11};do
    docker ps | grep -w osd_data${i} && continue
    docker ps -a | grep -w osd_data${i} && docker rm -f osd_data${i}
 
    docker run -d \
    --name=osd_data${i} \
    --net=host \
    --restart=always \
    --privileged=true \
    --pid=host \
    -v /etc/localtime:/etc/localtime \
    -v /data/ceph/etc:/etc/ceph \
    -v /data/ceph/lib:/var/lib/ceph \
    -v /data/ceph/logs:/var/log/ceph \
    -v /data${i}/osd:/var/lib/ceph/osd \
    ceph/deamon:latest osd_directory
done

vim /data/ceph/admin/start_mds.sh

#!/bin/bash
docker run -d \
    --net=host \
    --name=mds \
    --restart=always \
    --privileged=true \
    -v /etc/localtime:/etc/localtime \
    -v /data/ceph/etc:/etc/ceph \
    -v /data/ceph/lib/:/var/lib/ceph/ \
    -v /data/ceph/logs/:/var/log/ceph/ \
    -e CEPHFS_CREATE=0 \ &nbsp; #0表示不自动创建文件系统(推荐),1表示自动创建
    -e CEPHFS_METADATA_POOL_PG=512 \
    -e CEPHFS_DATA_POOL_PG=512 \
    ceph/daemon:latest mds

vim /data/ceph/admin/start_mgr.sh

#!/bin/bash
docker run -d --net=host \
    --name=mgr \
    --restart=always \
    --privileged=true \
    -v /etc/localtime:/etc/localtime \
    -v /data/ceph/etc:/etc/ceph \
    -v /data/ceph/lib:/var/lib/ceph \
    -v /data/ceph/logs:/var/log/ceph \
    ceph/daemon:latest mgr

vim /data/ceph/admin/start_rgw.sh

#!/bin/bash
docker run -d \
    --net=host \
    --name=rgw \
    --restart=always \
    --privileged=true \
    -v /etc/localtime:/etc/localtime \
    -v /data/ceph/etc:/etc/ceph \
    -v /data/ceph/lib:/var/lib/ceph \
    -v /data/ceph/logs:/var/log/ceph \
    ceph/daemon:latest rgw

vim /data/ceph/admin/start_rdb.sh

#!/bin/bash
docker run -d \
    --net=host \
    --name=rbd \
    --restart=always \
    --privileged=true \
    -v /etc/localtime:/etc/localtime \
    -v /data/ceph/etc:/etc/ceph \
    -v /data/ceph/lib:/var/lib/ceph \
    -v /data/ceph/logs:/var/log/ceph \
    ceph/daemon:latest rbd_mirror

2、启动 mon

①、在 192.168.1.100(ceph1)上运行 start_mon.sh,成功启动后会生成配置数据。接着 ceph 主配置文件,在追加如下内容:

cat >>/data/ceph/etc/ceph.conf <<EOF
# 容忍更多的时钟误差
mon clock drift allowed = 2
mon clock drift warn backoff = 30
# 允许删除pool
mon_allow_pool_delete = true
 
[mgr]
# 开启WEB仪表盘
mgr modules = dashboard
EOF

②、拷贝所有数据(已包含脚本)到另外 2 台服务器:

scp -r /data/ceph ceph2:/data/
scp -r /data/ceph ceph3:/data/

③、通过远程 ssh,在 ceph2 和 ceph3 上依次启动 mon:

ssh ceph2 bash /data/ceph/admin/start_mon.sh
ssh ceph3 bash /data/ceph/admin/start_mon.sh

④、查看集群状态 ceph -s

如果能够看到 ceph2 和 ceph3 则表示集群创建成功,此时应该是 HEALTH_WARN 状态,因为还没有创建 osd。

2、启动 OSD

虽然 ceph/daemon 这个 docker 镜像支持一个镜像来启动多个 osd,映射到多块分区,但是为了方便管理,我们需要为每一块磁盘创建一个 osd。

在 3 台服务器上依次执行 start_osd.sh 脚本:

bash /data/ceph/admin/start_osd.sh
ssh ceph2 bash /data/ceph/admin/start_osd.sh
ssh ceph3 bash /data/ceph/admin/start_osd.sh

全部 osd 都启动后,稍等片刻后执行 ceph -s 查看状态,应该可以看到多了如下信息(总共 33 块盘,33 个 OSD 节点):

osd: 33 osds: 33 up, 33 in (33个osd,启动33,注册33)

3、启动 MDS

bash /data/ceph/admin/start_osd.sh
ssh ceph2 bash /data/ceph/admin/start_osd.sh
ssh ceph2 bash /data/ceph/admin/start_osd.sh

4、创建文件系统

# 创建data pool
ceph osd pool create cephfs_data 512 512
 
# 创建 metadata pool
ceph osd pool create cephfs_metadata 512 512
 
# 创建 cephfs
ceph fs new iyuwnei cephfs_metadata cephfs_data
 
# 查看信息
ceph fs ls
 
name: iyunwei, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

5、启动 MGR

MGR 是 ceph 自带的仪表盘监控,可以在一台服务器上单点启动也可以多点启动实现多活:

bash /data/ceph/admin/start_mgr.sh
ssh ceph2 bash /data/ceph/admin/start_mgr.sh
ssh ceph3 bash /data/ceph/admin/start_mgr.sh

启动后,在 ceph1 节点上执行如下命令激活仪表盘:

ceph mgr module enable dashboard
ceph config-key put mgr/dashboard/server_addr 0.0.0.0
ceph config-key put mgr/dashboard/server_port 7000 #指定为7000端口,这里可以自定义修改

启动成功后,通过浏览器访问 http://192.168.1.100:7000 即可看到如下仪表盘:

Ps:如果这里使用多节点 mgr,可以在前面套一层 nginx 代理即可。关于更多 mgr 的配置可以参考的官方文档:http://docs.ceph.com/docs/master/mgr/dashboardhttps://ceph.com/planet/ceph-luminous-%E6%96%B0%E5%8A%9F%E8%83%BD%E4%B9%8B%E5%86%85%E7%BD%AEdashboard/

6、启动其他组件

①、启动 RGW

bash /data/ceph/admin/start_rgw.sh
ssh ceph1 bash /data/ceph/admin/start_rgw.sh
ssh ceph2 bash /data/ceph/admin/start_rgw.sh

②、启动 RBD

bash /data/ceph/admin/start_rbd.sh
ssh ceph1 bash /data/ceph/admin/start_rbd.sh
ssh ceph2 bash /data/ceph/admin/start_rbd.sh

7、最终状态

①、docker ps

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES
b301b60b362f        ceph/daemon:latest   "/entrypoint.sh rgw"     2 weeks ago         Up 2 weeks                              rgw
15fea1a996bd        ceph/daemon:latest   "/entrypoint.sh mgr"     2 weeks ago         Up 2 weeks                              mgr
00896fe89924        ceph/daemon:latest   "/entrypoint.sh rbd_m"   2 weeks ago         Up 2 weeks                              rbd
d5e9430a6ea1        ceph/daemon:latest   "/entrypoint.sh mds"     2 weeks ago         Up 2 weeks                              mds
05fc2ee09c42        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data11
9de8cc2728cf        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data10
fc0263931fa8        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data9
05eb72085c60        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data8
ec94192d0be4        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data7
506d7b5ee6bb        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data6
6e1a2c0ecccc        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data5
0d62f76624e8        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data4
c60a502b8b5f        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data3
693b52b8a60d        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data2
1e776d7df07a        ceph/daemon:latest   "/entrypoint.sh osd_d"   2 weeks ago         Up 2 weeks                              osd_data1
bdc22da7de73        ceph/daemon:latest   "/entrypoint.sh mon"     2 weeks ago         Up 2 weeks                              mon

②、ceph -s

 cluster:
    id:     843ea71c-786d-4c6e-b19d-9c20c47982e8
    health: HEALTH_OK
 
  services:
    mon:        3 daemons, quorum ceph1,ceph3,ceph2
    mgr:        ceph1(active), standbys: ceph2, ceph3
    mds:        iyunwei-1/1/1 up  {0=ceph1=up:active}, 2 up:standby
    osd:        33 osds: 33 up, 33 in
    rbd-mirror: 3 daemons active
    rgw:        3 daemons active
 
  data:
    pools:   6 pools, 1056 pgs
    objects: 2361 objects, 3213 MB
    usage:   10288 MB used, 61439 GB / 61449 GB avail
    pgs:     1056 active+clean
 
  io:
    client: 170 B/s rd, 2299 B/s wr, 0 op/s rd, 1 op/s wr

③、ceph mon dump

dumped monmap epoch 3
epoch 3
fsid 843ea71c-786d-4c6e-b19d-9c20c47982e8
last_changed 2018-04-23 14:38:34.095243
created 2018-04-23 14:35:59.641766
0: 192.168.1.100:6789/0 mon.ceph1
1: 192.168.1.101:6789/0 mon.ceph2
2: 192.168.1.102:6789/0 mon.ceph3

四、cephfs 挂载

ceph 目前支持对象存储(RGW)、块存储 RDB 以及 CephFS 文件系统这 3 种功能。本文主要记录 ceph 部署,所以这里仅测试下 CephFS 的简单挂载,对其他 2 种感兴趣的同学可以自行测试。

1、网络策略

如果公司内部有网络策略限制(比如我这边),那么先要保证挂载的客户端到 OSD 端口是畅通的。其中,每一个 OSD 都会启动一个端口,从 6789 一次递增,即第一个 OSD 是 6789,第二个则是 6790。

2、安装 ceph-fuse

由于本文使用的最新版的 ceph,而公司内部 yum 源能支持的 ceph-fuse 版本太低,会导致挂载卡死不成功问题。所以这里推荐使用官方最新 rpm 包安装:

yum install -y libibverbs gperftools-libs
rpm -Uvh ceph-fuse-12.2.4-0.el7.x86_64.rpm

Ps:更多版本下载地址:http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/

3、查看 ceph id 和 key

这里图简单,就不再创建新用户,直接使用已有的 admin 用户,所以我们要在 ceph 节点上查看 admin 的密钥:

①、ID

上文中的 ceph -s 或 ceph mon dump 信息中都有 ceph 的 ID 信息,即:

843ea71c-786d-4c6e-b19d-9c20c47982e8

②、KEY

cat etc/ceph.client.admin.keyring

[client.admin]
        key = AQDOft1a7JulLhAABGhKyP/v/RfeRvfWHWOwoA==
        auid = 0
        caps mds = "allow"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"

4、创建配置文件

根据上述拿到的 ID 和 KEY,如下创建配置文件:

mkdir /data/ceph
 
cat >> /data/ceph/cephfs.conf <<EOF
[global]
fsid = 843ea71c-786d-4c6e-b19d-9c20c47982e8
mon_host = 10.49.88.209,10.175.139.165,10.175.139.164
 
[client]
client_mountpoint = /
EOF
 
cat >> cephfs.keyring  <<EOF
[client.admin]
        key = AQDOft1a7JulLhAABGhKyP/v/RfeRvfWHWOwoA==
EOF

5、启动挂载

test -d /mnt/ceph_ext || mkdir /mnt/ceph_ext
ceph-fuse /mnt/ceph_ext -n client.admin -k /data/ceph/cephfs.keyring -c /data/ceph/cephfs.conf

6、测试读写速度

这里用 dd 简单测试下,数值仅供参考。

# 测试写入
[root@localhost:/mnt/ceph_ext/backup]# cd /mnt/ceph_ext
[root@localhost:/mnt/ceph_ext/backup]# dd if=/dev/zero of=test bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 5.15503 s, 203 MB/s
 
# 测试读取
[root@localhost:/mnt/ceph_ext/backup]# cd /mnt/ceph_ext
[root@localhost:/mnt/ceph_ext/backup]# dd if=test of=test2 bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 8.69913 s, 121 MB/s
 
# 测试读写
[root@localhost:/mnt/ceph_ext/backup]# cd /mnt/ceph_ext
[root@localhost:/mnt/ceph_ext/backup]# dd if=test of=test2 bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 5.43514 s, 193 MB/s

五、小结

本文分享了基于 Docker 快速拉起了一个 ceph 集群,并对 cephfs 文件系统做了简单的挂载测试。由于篇幅有限,文章未分享 ceph 的对象存储和块存储,也没有做针对性的优化和更专业的测试(因为我也是新手)。希望对初次接触 ceph,想快速入门的同学有所帮助!

0

分享

hitokoto()

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('<div id="' + s + '"></div>'); (window.slotbydup=window.slotbydup || []).push({ id: '5538464', container: s, size: '836,100', display: 'inlay-fix' });})();

  • 2018年05月12日
  • 1
  • 4
  • A+

所属分类:大数据

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://zhangge.net/复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Ceph Luminous版本DashBoard预览

    今天来聊一聊Ceph新版本功能,Ceph会在今年秋季发布一个长期支持稳定版本Luminous(12.x.x),现在已经出RC版了,Luminous版本新增了很多...

    DevinGeng
  • Ceph|历史

    直至 2017 年底,上游 Ceph 项目都采取每年发布两个稳定版本的做法。自“Mimic”发行版起,Ceph 项目将按 9 个月发布计划运作。直至“Lumin...

    heidsoft
  • ceph luminous 新功能之内置dashboard

    ceph luminous版本新增加了很多有意思的功能,这个也是一个长期支持版本,所以这些新功能的特性还是很值得期待的,从底层的存储改造,消息方式的改变,以及一...

    用户2772802
  • 安装Ceph集群(二)

    用户8639654
  • Ceph 12.2.0 正式版本发布, 代号 Luminous

    Ceph 是一个可扩展的分布式存储系统,性能卓越,安全可靠。 Ceph 12.2.0 正式版已发布。这是Luminous v12.2.x长期稳定版本的第一个版本...

    Debian中国
  • ceph-Luminous对ipv6的支持

    需求 随着ipv6使用得越来越广,很多网络设施逐步地需要支持ipv6,而ceph作为可大规模部署的分布式存储系统,ipv6的支持是必选的,本文主要介绍ceph ...

    院长技术
  • Ceph-Luminous对ipv6的支持

    需求 随着ipv6使用得越来越广,很多网络设施逐步地需要支持ipv6,而ceph作为可大规模部署的分布式存储系统,ipv6的支持是必选的,本文主要介绍ceph ...

    院长技术
  • ceph-简介及安装(luminous)版

    Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式的存储系统。Ceph 独一无二地用统一的系统提供了对象、块、和文件存储功能,它可靠性高、管理简...

    yuezhimi
  • linux ceph原理及搭建

    Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较...

    葫芦
  • CentOS 7.9通过ceph-ansible安装ceph集群笔记

    生产环境建议多网络模式,测试环境可以多网络,也可以单网络模式,需要注意的是的,测试服务器4个磁盘,一个系统盘。2个osd(vdb,vdc),一个日志盘(vdd)

    Mars.zhang
  • CephFS 介绍及使用经验分享

    消息: Client name failing to respond to cache pressure

    Lucien168
  • ceph在信创操作系统和服务器上安装

    之前想通过cephadm的方式去部署,结果发现cephadm不支持kylin v10的操作系统,那么剩下的就只有手动部署和编译安装的方式,kylin v10系统...

    没有故事的陈师傅
  • Luminous监控界面中文语言包

    之前有各种ceph的管理平台,在部署方面大部分都比较麻烦,现在在luminous版本当中有一个原生的dashboard,虽然目前这个只能看,但是从界面上面,从接...

    用户2772802
  • [pve][ceph]升级pve6的ceph版本Luminous到Nautilus

    上次把集群节点的pve版本从v5升级到v6,这次把分布式存储ceph的版本从Luminous(v12)升级到Nautilus(v14)。

    用户9314062
  • Ceph亚太峰会RGW议题分享

    用户1260683
  • Ceph RGW bucket 自动分片介绍和存在的问题

    工作中存储集群使用了 Ceph 技术,所用的是版本是 Luminous 12.2.4,因为刚刚上手 Ceph,不少概念和问题也都是头一次听说,比如这次的自动分片...

    用户2443625
  • OpenStack(Pike)连接 Ceph RBD

    请注意,本文档假设 Ceph 和 OpenStack 环境已经可用,在此基础上,配置 OpenStack 使用 Ceph RBD 作为镜像和卷的后端存储。

    用户2443625
  • kubernetes使用ceph存储卷

    最近我在kubernetes中使用了ceph的rbd及cephfs存储卷,遇到了一些问题,并逐一解决了,在这里记录一下。

    jeremyxu

扫码关注云+社区

领取腾讯云代金券