环境
-
系统版本:Redhat7.8
-
Ceph的docker镜像版本:octopus
-
Docker版本:20.10.8
介绍
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
Ceph特点
-
高性能
- 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
- 考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
- 能够支持上千个存储节点的规模,支持TB到PB级的数据。
-
高可用性
- 副本数可以灵活控制。
- 支持故障域分隔,数据强一致性。
- 多种故障场景自动进行修复自愈。
- 没有单点故障,自动管理。
-
高可扩展性
- 去中心化。
- 扩展灵活。
- 随着节点增加而线性增长。
-
特性丰富
- 支持三种存储接口:块存储、文件存储、对象存储。
- 支持自定义接口,支持多种语言驱动。
架构规划
前期准备
部署Ceph之前我们需要对自身机器的环境做一个前期操作。主要涉及到防火墙,主机名等设置。
- 关闭防火墙
- 关闭selinux(linux的安全子系统)
正式环境实际部署时,最好通过加入IP白名单的方式来操作,而不是直接关闭防火墙。
- 设置主机名,分别把三台虚拟机的主机名设置成想设置的名称,本文为obptest2,obptest3,obptest4。
- SSH免密登陆配置
- 在三个节点上分别执行下列命令配置host,需将ip与主机名替换为自己服务器的
- 在主节点obptest2配置免密登录到obptest3和obptest4
下面命令在主节点obptest2上执行。
- 内核参数优化
- 打开ntp服务
ntp服务的作用是用于同步不同机器的时间。如果不打开ntp服务的话,则有可能会出现 clock skew detected on mon.obptest2, mon.obptest3这种问题。
- 安装docker
所有节点均需安装,具体安装步骤见:Docker安装教程
- 其他配置
将容器内的ceph命令alias到本地,方便使用,其他命令也以参考添加
部署
创建Ceph目录
- 创建目录
在宿主机上创建Ceph目录与容器建立映射,便于直接操纵管理Ceph配置文件,以root身份在主节点obptest2上创建文件夹,命令如下:
该命令会一次创建5个指定的目录,注意逗号分隔,不能有空格。其中:
- admin文件夹下用于存储启动脚本
- etc文件夹下存放了ceph.conf等配置文件
- lib文件夹下存放了各组件的密钥文件
- logs文件夹下存放了ceph的日志文件
- data文件夹用于挂载文件
- 对docker内用户进行授权
拉取Ceph镜像
拉取时注意版本,不要贸然采用最新版,有些会存在缺陷,安装的时候会出现问题,这里采用的nautilus版本。
启动MON服务
三台节点上都需安装Mon服务。先在主节点操作。
- 在主节点的/app/ceph/admin目录下创建start_mon.sh脚本:
-
name参数,指定节点名称, 这里设为ceph-mon
-
建立宿主机与容器的目录映射关系,包含etc、lib、logs目录
-
MON_IP 参数指定mon服务的节点IP信息
-
CEPH_PUBLIC_NETWORK参数,指定mon的ip网段信息,如果跨网段需写上所有的网段(注意这里是24位,将最后一位改为0就可以)。
-
最后指定镜像版本, mon为参数, 代表启动的是mon服务,不能乱填。
-
给脚本增加权限:
- 启动mon服务:
- 创建Ceph配置文件
配置内容及说明:
- 检查mon服务状态
出现HEALTH_OK代表服务启动成功:
常见问题
-
若容器启动失败,可使用命令
若出现
可将启动脚本与配置文件mon ip参数暂时改为一个本机IP,如
然后删除现有问题容器,重新执行脚本,即可正常创建容器,容器启动后,再修改启动脚本与配置文件改回多IP形式,重启容器,即可正常启动
-
若容器启动失败,查看容器日志,提示如下信息
Existing mon, trying to rejoin cluster abort这时需修改容器内的启动脚本
重启容器即可恢复正常
-
容器启动成功,查看状态发现如下信息:
可以执行
然后重启容器即可恢复正常
-
将主节点配置复制到其他两个节点, 覆盖/app/ceph/目录
复制完成,修改相关配置信息后,分别在其他两个节点启动mon服务
-
检查集群状态
这里我们只搭建了三个mon节点, 正常的话可以看到已成功组建集群:
启动OSD服务
OSD服务是对象存储守护进程,负责把对象存储到本地文件系统,必须要有一块独立的磁盘作为存储,如果没有独立磁盘则需要在Linux下面创建一个虚拟磁盘进行挂载。
以下步骤在三台节点依次进行
- 创建OSD磁盘
下面分别介绍两种挂载方式:
(1) 无独立磁盘
如果没有独立磁盘,我们可以创建一个虚拟磁盘进行挂载,步骤如下:
- 初始化10T的镜像文件:
- 将镜像文件虚拟成块设备:
- 格式化:
- 挂载文件系统,就是将loop0磁盘挂载到/dev/osd目录下,
(2) 有独立磁盘
- 直接格式化
- 挂载文件系统:
(3)查看挂载结果
- 在主节点的/app/ceph/admin目录下创建start_osd.sh脚本:
这里我们采用的是osd_directory镜像模式,如果有独立磁盘的话,也可以采用osd_ceph_disk模式,无需格式化,直接指定设备名称即可,如
OSD_DEVICE=/dev/sdb
- 给脚本增加权限:
- 创建OSD密钥文件
三台mon节点都需执行,且该命令是在容器mon节点服务上执行
- 启动服务:
- 检查启动状态
osd的个数最好维持在奇数个
启动mgr服务
需依次在3台节点上执行
- 在/app/ceph/admin目录下创建start_mgr.sh脚本:
这个脚本是用于启动mgr组件,它的主要作用是分担和扩展monitor的部分功能,提供图形化的管理界面以便我们更好的管理ceph存储系统。其启动脚本比较简单,在此不再赘述。
- 启动mgr服务:
- 检查启动状态
启动rgw服务
需依次在3台节点上执行
- 在/app/ceph/admin目录下创建start_rgw.sh脚本:
该脚本主要是用于启动rgw组件,rgw(Rados GateWay)作为对象存储网关系统,一方面扮演RADOS集群客户端角色,为对象存储应用提供数据存储,另一方面扮演HTTP服务端角色,接受并解析互联网传送的数据。
- 创建rgw密钥文件
三台mon节点都需执行,且该命令是在容器mon节点服务上执行
- 启动服务:
- 检查启动状态
启动mds服务
需依次在3台节点上执行
- 在/app/ceph/admin目录下创建start_mds.sh脚本:
说明
-
CEPHFS_CREATE:是为METADATA服务生成文件系统,0表示不自动创建文件系统(默认值),1表示自动创建。
-
CEPHFS_DATA_POOL_PG:是数据池的数量,默认为8。
-
CEPHFS_METADATA_POOL_PG:是元数据池的数量,默认为8。
-
启动服务:
- 检查启动状态
安装Dashboard管理后台
仅在主节点执行
- 首先确定主节点,找到mgr为active的那个节点,如下:
这里的主节点就是obptest2节点
- 开启dashboard功能
- 创建证书
- 创建登陆用户与密码
- 配置外部访问端口
- 配置外部访问IP
- 关闭https(如果没有证书或内网访问, 可以关闭)
- 重启Mgr DashBoard服务
- 查看Mgr DashBoard服务信息
管理控制台界面:
创建FS文件系统
在主节点执行即可
- 创建Data Pool
- 创建Metadata Pool
如果受mon_max_pg_per_osd限制, 不能设为128,可以调小点, 改为64
- 创建CephFS
将上面的数据池与元数据池关联, 创建cephfs的文件系统
- 查看FS信息
查看整个集群信息
至此, 整个集群就已经搭建完毕,可以查看整个集群信息,我们规划的所有节点都已创建成功并加入集群
评论区