使用Docker搭建ceph群集(nautilus版本)
一、ceph简介
概述
Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。可以作为k8s的存储类,来方便容器持久化存储。
支持格式
- 对象存储:即radosgw,兼容S3接口。通过rest api上传、下载文件。
- 文件系统:posix接口。可以将ceph集群看做一个共享文件系统挂载到本地。
- 块存储:即rbd。有kernelrbd和librbd两种使用方式。支持快照、克隆。相当于一块硬盘挂到本地,用法和用途和硬盘一样。比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的后端存储
优势
- 统一存储:虽然ceph底层是一个分布式文件系统,但由于在上层开发了支持对象和块的接口
- 高扩展性:扩容方便、容量大。能够管理上千台服务器、EB级的容量。
- 高可靠性:支持多份强一致性副本,EC。副本能够垮主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自管理、自动修复。无单点故障,容错性强。
- 高性能:因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd)交互。
基础架构:
Ceph Node :构成Ceph集群的基础核心组件
Ceph Client :对外提供多种方式使用Ceph存储的组件
核心组件
包含OSD、Manager、MSD、Monitor
- OSD(ceph-osd):object storage daemon,对象存储进程。ceph 管理物理硬盘时,引入了OSD概念,每一块盘都会针对的运行一个OSD进程,也就是ceph 集群通过管理 OSD 来管理物理硬盘。OSD 一般功能为:存储数据、维护数据副本、数据恢复、数据再平衡以及对ceph monitor组件提供相关监控信息。
- Manager(ceph-mgr):用于收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供 ceph dashboard(ceph ui)和 resetful api。Manager组件开启高可用时,至少2个。
- Monitor(ceph-mon):维护集群的状态,包含monitor组件信息,manger 组件信息,osd组件信息,mds组件信息,crush 算法信息。还负责ceph集群的身份验证功能,client在连接ceph集群时通过此组件进行验证。Monitor组件开启高可用时,至少3个 。
- MDS(ceph-mds):Metadata server,元数据服务。为ceph 文件系统提供元数据服务(ceph 对象存储和块存储不需要MDS)。为 posix 文件系统用户提供性能良好的基础命令(ls,find等) 。
二、安装部署
环境
创建三台虚拟机,本教程采用的Linux是CentOS7.5版本,Docker的版本是19.03.13,Ceph的版本是nautilus。三台虚拟机的情况如下:
主机名称 | 主机IP | 说明 |
---|---|---|
ceph1 | 172.18.175.5 | 容器主节点(Dashbaord、mon、rgw、mgr、osd、mds) |
ceph2 | 172.18.175.6 | 容器子节点(mon、rgw、mgr、osd、mds) |
ceph3 | 172.18.175.7 | 容器子节点(mon、rgw、mgr、osd、mds) |
预检
部署Ceph之前我们需要对自身机器的环境做一个预检查。主要涉及到防火墙,主机名等设置。
1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2、关闭selinux(linux的安全子系统)
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
PS: 正式环境实际部署时,最好通过加入IP白名单的方式来操作,而不是直接关闭防火墙。
3、设置主机名,分别把三台虚拟机的主机名设置成ceph1,ceph2,ceph3。
hostnamectl set-hostname ceph1
hostnamectl set-hostname ceph2
hostnamectl set-hostname ceph3
4、在三个节点上分别执行下列命令配置host。
cat >> /etc/hosts <<EOF
172.18.175.5 ceph1
172.18.175.6 ceph2
172.18.175.7 ceph3
EOF
5、打开ntp服务
ntp服务的作用是用于同步不同机器的时间。如果不打开ntp服务的话,则有可能会出现 clock skew detected on mon.ceph1, mon.ceph2这种问题。
#查看ntp,如果状态是inactive,则表示没启动
systemctl status ntpd
#启动ntp服务
systemctl start ntpd
#设置开启自启动ntp服务
systemctl enable ntpd
部署
1、创建Ceph目录
mkdir -p /app/ceph/{
admin,etc,lib,logs}
该命令会一次创建4个指定的目录,注意逗号分隔,不能有空格。
其中:
admin文件夹下用于存储启动脚本,
etc文件夹下存放了ceph.conf等配置文件
lib文件夹下存放了各组件的密钥文件
logs文件夹下存放了ceph的日志文件。
2、 对docker内用户进行授权
chown -R 167:167 /app/ceph/ #docker内用户id是167,这里进行授权
3、安装docker(省略,三台机器)
4、 创建OSD磁盘(省略,三台机器)
mkfs.xfs -f /dev/mapper/ceph_vg-ceph_lv
mkdir -p /dev/osd
mount /dev/mapper/ceph_vg-ceph_lv /dev/osd
5、拉取ceph
这里用到了 dockerhub 上最流行的 ceph/daemon 镜像(这里需要拉取nautilus版本的ceph,latest-nautilus)
docker pull ceph/daemon:latest-nautilus
6、编写脚本(脚本都放在admin文件夹下)
[root@ceph1 admin]# cat start_mon.sh
#!/bin/bash
docker run -d --net=host \
--name