Ceph-集群内分布式存储解决方案及基于Docker的部署
打造集群高可用分布式存储
Ceph
很早以前在玩集群的时候就折腾过分布式存储服务来作为跨节点的数据共享和可靠存储,以前尝试过GlusterFS,但是由于读写速度实在是太低,就放弃了。见基于GlusterFS设计 Docker集群存储方案。
后来的解决方案是所有机器都挂载了 NAS ,读写速度是提升上去了,但是存在着几个问题:
一是 NAS 的单点故障问题,虽然 NAS 做过了RAID,但是故障率还是很高。(后来的事实证明,NAS 确实坏了,集群所有数据都丢了)
另一个是安全性问题,NFS 协议没有验证机制(或者说需要设置),存在安全性问题。
规模受限,当集群规模扩大到数十个节点时,读写性能就很受影响了。
最近接触到了 Ceph,看上去比 GlusterFS 要好很多,正好最近在实验室折腾集群docker化,搞大数据的人连抗单点故障的分布式存储都没有着实是让人嘲笑的。(以及前几天因为服务器故障,组里的服务全挂了,好几天都没恢复,实验室官网也访问不了,想想还是蛮尴尬的。。。)
关于 Ceph 的介绍,就不搬运了,最近事多,也没怎么深入研究。
部署
使用了 5 个节点,系统都是刚装上的 CentOS Linux release 7.6.1810 (Core)。
Ceph 集群中必需的有:
若干个 monitor (mon) 服务
若干个 数据存储 (osd) 服务
独立的管理 (mgr) 服务,在 luminous 之后是必须的
此外,还有可选的 mds 服务等,这个服务仅在需要使用 CephFS 时才需要
因为倾向于所有东西都放在docekr里,尽量保持宿主机的纯净,所以不太想安装ceph的客户端,而且发现 centos 默认就能挂载ceph类型的文件系统,所以采用了 CephFS 方式,需要部署一个 mds 服务。
以下是每个节点上规划的 Ceph 服务。
hostname ip roles
node1 192.168.1.1 mon, mgr, mds
node2 192.168.1.2 mon, osd
node3 192.168.1.3 osd
node4 192.168.1.4 mon, osd
node5 192.168.1.5 osd
node1 节点作为 master 节点,重要的服务都放在这上面,为了保持该节点的性能,该节点不部署 osd 服务。(实际上,该服务器在真实集群中作为跳板机使用,且做了RAID,磁盘空间较小)
理论上还是存在单点故障,不过考虑到node1作为跳板机,它挂了,所有节点都连不上,而且即便是挂了,数据也不会丢失,在可以接受的范围之内。
以下服务都是基于 docker 部署的,可以说,本次部署 Ceph 不需要宿主机安装任何额外的软件。
部署 monitor
首先在 node1 上执行以下命令启动一个 mon 服务 (需要提前新建 /data/ceph/etc 以及 /data/ceph/lib 目录)
docker run \
--name=ceph_mon \
-d \
--net=host \
--restart=always \
-v /data/ceph/etc:/etc/ceph \
-v /data/ceph/lib:/var/lib/ceph \
-e MON_IP=192.168.1.1 \
-e CEPH_PUBLIC_NETWORK=192.168.1.1/24 \
ceph/daemon mon
待服务启动一段时间后(自动初始化,容器启动后数十秒即可)。
使用命令 docker exec -it ceph_mon ceph -s 查看当前集群情况,如果一切正常,会看到结果里显示 HEALTH_OK。
a690e4459f321b5b9a298efe077159be.md.png
使用命令 docker rm -f ceph_mon 停止mon服务,然后编辑 /data/eph/etc/ceph.conf 并在最后添加两行:
osd max object name len = 256
osd max object namespace len = 64
具体原因稍后再说。
使用命令 scp -r /data/ceph 192.168.1.x:/data 将生成的配置文件复制到其他节点上(/data目录都预先建立好了)。
然后在 node1、node2、node4 上执行上述命令,启动另外两个 mon 服务(需要修改其中的 MON_IP 为各自节点的IP)。
再次执行命令 docker exec -it ceph_mon ceph -s 查看当前集群情况,多刷新几次,这次应该就能看到集群内有了三个mon服务。
部署 mgr
在 node1 节点上执行命令,启动一个 mgr 服务
docker run \
--name ceph_mgr \
-d \
--net=host \
--restart=always \
-v /data/ceph/etc:/etc/ceph \
-v /data/ceph/lib:/var/lib/ceph/ \
ceph/daemon mgr
部署 mds
在 node1 节点上执行命令,启动一个 mds 服务
docker run \
--name ceph_mds \
-d \
--net=host \
--restart=always \
-v /data/ceph/lib:/var/lib/ceph/ \
-v /data/ceph/etc:/etc/ceph \
-e CEPHFS_CREATE=1 \
ceph/daemon mds
部署 osd 服务
在 node2、node3、node4、node5 上执行以下命令,来启动四个 osd 服务。
docker run \
--name=ceph_osd \
-d \
--net=host \
--restart=always \
-v /data/ceph/etc:/etc/ceph \
-v /data/ceph/lib:/var/lib/ceph/ \
ceph/daemon osd_directory
说明
关于 osd 的挂载问题,一般教程里是选择一整块硬盘,然后全部交由osd管理,不过之前安装系统的时候没有考虑到这些,两块盘已经分配好了,没法重新分配。此外其他的服务也会占用磁盘空间,CephFS 目前没有经过长时间使用,不敢保证可用性。一开始考虑使用 dd 创建一个文件然后 loset 模拟成一块硬盘来交由 osd 管理,但是某次重启机器后发现该osd无法恢复,所以放弃了这种做法,直接采用外挂现有目录的形式。虽然在性能上有一定的损失,但是不失为一种当前环境下的可选方案。
再来说一下前面提到的修改配置文件的问题,同样是因为硬盘已经分配好了,采用了 ext4 的文件格式,而 osd 默认是 XFS 格式,ext4存储xattrs的大小有限制,使得OSD信息不能安全的保存。所以需要修改配置文件来解决。
当然了,最好的情况下还是选择一整块硬盘,然后交由 osd 自己去管理,这种情况下启动 osd 服务的命令就不是上述所说的了。
客户端挂载
docker exec -it ceph_mon ceph auth ls 然后找到一行 client.admin ,后面有一个secret串,记录下来,假设是 SECRET。
在集群中的每个节点上执行命令 mount -t ceph 192.168.1.1:6789:/ /mnt -o name=admin,secret=SECRET 就可以将CephFS 挂载到 /mnt 目录了,不需要安装任何额外的软件支持。
对比 GlusterFS
相对 GlusterFS 来说,CephFS 在速度上可能要更快一些,而且ceph的挂载有权限验证机制,即便是暴露在复杂网络环境下也能一定程度上保护数据安全。
而且,GlusterFS 在创建卷上略显复杂,需要自行指定所有的分布节点,而ceph只需要设置副本数目即可,不用关心数据分布的问题。
ceph 的osd节点加入非常简单,只需要复制配置文件然后启动osd服务即可,ceph集群会自动将数据重新分发,在遇到部分osd当机的时候仍然能保证服务,以及使用 ceph osd out N 命令来下线3号osd,并开始重新均衡数据。
e7880488873e4de180a862cbcf497a5d.md.png
本文所涉及的所有命令脚本可以在 newnius/scripts 找到。
参考
Ceph介绍及原理架构分享
Ceph osd启动报错osd init failed (36) File name too long
在Docker里运行Ceph
Bootstrap your Ceph cluster in Docker
使用Docker快速部署Ceph集群
使用 Docker 部署 Ceph 集群
ceph存储 ceph-deploy部署挂载目录的osd
ceph/ceph
ceph/daemon
Adding/Removing OSDs
Ceph: properly remove an OSD
losetup命令
Ceph运维告诉你分布式存储的那些“坑”
ceph中对象读写的顺序性及并发性保证
Post author: Newnius
Post link: https://blog.newnius.com/ceph-distributed-storage-in-cluster-docker.html
Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Ceph-集群内分布式存储解决方案及基于Docker的部署的更多相关文章
- 高可用OpenStack(Queen版)集群-13.分布式存储Ceph
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- 基于Ubuntu 18.04.5 LTS 部署Ceph集群测试及Ceph RDB的使用。
1.ceph简介 Ceph在一个统一的系统中独特地提供对象.块和文件存储 1.1 ceph官网架构图 1.2 架构解释 CEPH 对象存储 CEPH 块设备 CEPH 文件系统 RESTful 接 ...
- 基于Docker UI 配置ceph集群
前言 前一篇介绍了docker在命令行下面进行的ceph部署,本篇用docker的UI进行ceph的部署,目前来说市面上还没有一款能够比较简单就能直接在OS上面去部署Ceph的管理平台,这是因为OS的 ...
- [自动化]基于kolla-ceph的自动化部署ceph集群
kolla-ceph来源: 项目中的部分代码来自于kolla和kolla-ansible kolla-ceph的介绍: 1.镜像的构建很方便, 基于容器的方式部署,创建.删除方便 2.kolla-ce ...
- [自动化]基于kolla的自动化部署ceph集群
kolla-ceph来源: 项目中的部分代码来自于kolla和kolla-ansible kolla-ceph的介绍: 1.镜像的构建很方便, 基于容器的方式部署,创建.删除方便 2.kolla-ce ...
- 分布式存储ceph集群实践
1.环境规划,三台主机 10.213.14.51/24 10.213.14.52/24 10.213.14.53/24 集群网络 172.140.140.11. ...
- ceph集群部署(基于jewel版)
环境 两个节点:ceph1.ceph2 ceph1: mon.mds.osd.0.osd.1 ceph2: osd.2.osd.3 网络配置: ceph1: 管理网络,eth0,10.0.0.20 存 ...
- 分布式存储系统之Ceph集群启用Dashboard及使用Prometheus监控Ceph
前文我们了解了Ceph之上的RadosGW基础使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16768998.html:今天我们来聊一聊Ceph启 ...
- 使用虚拟机CentOS7部署CEPH集群
第1章 CEPH部署 1.1 简单介绍 Ceph的部署模式下主要包含以下几个类型的节点 Ø CephOSDs: A Ceph OSD 进程主要用来存储数据,处理数据的replication,恢复 ...
- CEPH集群操作入门--配置
参考文档:CEPH官网集群操作文档 概述 Ceph存储集群是所有Ceph部署的基础. 基于RADOS,Ceph存储集群由两种类型的守护进程组成:Ceph OSD守护进程(OSD)将数据作为对象 ...
随机推荐
- Dotnetbar自定义DateTimeInput(时间)控件的显示格式,使其同时显示日期和时间
DateTimeInput控件已有的几种格式可以在Format属性中选择: 但这几种格式仍无法满足我的要求怎么办? 例如想将显示格式定为类似这样的格式:2010-06-11 20:02:52,两步搞定 ...
- IDEA导入他人的项目时提示“project sdk is not defined”的解决办法
IDEA导入他人的项目时提示"project sdk is not defined"的解决办法 1.在IDEA中,在有问题的项目上单击鼠标右键,然后选择"Open Mod ...
- 多云架构,JuiceFS 如何实现一致性与低延迟的数据分发
随着大模型的普及,GPU 算力成为稀缺资源,单一数据中心或云区域的 GPU 资源常常难以满足用户的全面需求.同时,跨地域团队的协作需求也推动了企业在不同云平台之间调度数据和计算任务.多云架构正逐渐成为 ...
- CDS标准视图:设备信息 I_EquipmentData
视图名称:I_EquipmentData 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'Equipment Data' @VDM.viewType: #COM ...
- CF div3 995 (A~G)
期末周之第三把网瘾(真是越来越放肆了...).这次赛时了一把div 3 , 又一次只做出了A~E,写完E后剩下的题没时间看了(受了些寝室噪音的干扰,最后二十分钟才出).赛后看了下F和G,感觉也是一时半 ...
- 了解GraphRAG
了解GraphRAG 转载:从零实现大模型-GraphRAG,构建LLM中的关系数据库 开源地址:https://github.com/microsoft/graphrag 论文:From Local ...
- Integer包装类中的IntegerCache结构
public void test3() { Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i = ...
- sql注入学校后台
有运气成分,遇到两个学校,子域名查询了一下发现有登录平台,然后就直接sql了 payload:admin'or 1=1--+ 很离谱,这年头这两学校还能直接被sql进入后台. 然后进学校后台后就可以直 ...
- 极客时间《Redis核心技术与实战》阅读笔记
极客时间<Redis核心技术与实战>阅读笔记 数据结构 为了实现从键到值的快速访问,Redis 使用了一个哈希表来保存所有键值对. 哈希桶中的元素保存的并不 ...
- “天翼云息壤杯”高校AI大赛云南赛区启动!
11月19日,首届全国"天翼云息壤杯"高校AI大赛云南赛区启动仪式在昆明理工大学举行.本次赛事由中国电信云南公司(以下简称"云南电信")和云南省计算机学会智能计 ...