使用Ceph-deploy部署Ceph集群
Ceph简介
Ceph的LTS版本是Nautilus,它在2019年发布。
Ceph的核心概念
工作方式:
- 数据(Object)放进盒子(Pool),
- Pool 被分成小块(PG),
- 由大脑(RADOS)控制,
- 通过地图(CRUSH)决定放哪儿,
- 而 Librados 是让人能操作这一切的“遥控器”。
RADOS(Ceph底层)
- RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
Libradio(应用和RADOS的桥梁)
- Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。
Crush(数据地图)
- Crush是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
PG(归置组)
PG就是目录。ls /var/lib/ceph/osd/ceph-0/current/
Object是文件,PG就是目录。管理、转移、备份的时候以目录为单位方便多了。
- OSD的
PG,意思是归置组。 - PG全称
Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。
Object(文件)
- Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
Ceph的主要组件
Ceph 是一个分布式存储系统,由多个组件构成,主要包括以下几个组件:
需要注意的是,Ceph 的每个组件都可以运行在多台服务器上形成一个分布式集群,以实现高可用性和数据冗余等特性。此外,Ceph 还支持多种存储后端,包括 FileStore 和 Bluestore 两种主要类型,以便为不同的应用场景提供更好的性能和容错能力。
OSD(硬盘)
- OSD 全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD,Ceph最终数据也是由OSD保存到磁盘上的。
Monitor:
- 一个Ceph集群需要多个Monitor组成的小集群,用来保存OSD的元数据。
负责记录整个集群的状态,比如哪些服务器在线、数据分布情况等。它就像 Ceph 的“联络员”,保证大家都知道谁在干活、数据在哪里。

MDS–非必须
- MDS全称
Ceph Metadata Server,是CephFS服务依赖的元数据服务。 - 专门负责 Ceph 文件系统(CephFS)的文件名、目录结构等信息。
- 如果你要用 Ceph 当作文件系统使用,就需要 MDS。
- 如果不使用文件存储,则
不需要安装。
Mgr
是 Ceph 的“管家”,负责收集监控数据、提供仪表盘(Dashboard),帮助管理员更好地管理和观察集群状态。
RGW–非必须
- RGW全称RADOS gateway,是Ceph对外提供的
对象存储服务,接口与S3和Swift兼容 - 可以把它理解为一个“网关”,让外部通过标准方式访问 Ceph 数据。
- 如果不使用对象存储则
不需要安装。
RBD
- RBD全称RADOS block device,是Ceph对外提供的
块设备服务。
Ceph的三种存储类型
块存储(RBD)
- 创建存储池(Pool):
在Ceph集群中,你需要先创建一个存储池,用于存储RBD镜像。
通常使用 ceph osd pool create 命令来创建,例如:ceph osd pool create rbd_pool 10 1,创建一个名为rbd_pool的池,有10个放置组(PG),复制因子为1。
还可以选择其他存储池类型,如纠删码存储池,以提高存储效率和冗余能力。 - 创建RBD镜像(Image):
在创建的存储池中,你需要创建一个RBD镜像,它相当于一个虚拟的块设备。
使用 rbd create 命令创建镜像,例如:rbd create my_image --pool rbd_pool --size 10G,创建一个名为my_image的镜像,大小为10GB,存储在rbd_pool中。
可以设置镜像的大小、数据分层等参数。 - 映射到内核设备(Map):
使用 rbd map 命令将RBD镜像映射到内核设备,从而创建一个虚拟的块设备。
例如:rbd map my_image --pool rbd_pool,将my_image镜像映射到内核设备。
映射后,你会在 /dev/rbd 目录下找到对应的设备文件,比如 /dev/rbd0。 - 格式化和挂载:
将映射后的设备文件格式化为所需的格式,如 xfs
文件存储(CephFS)
CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。
使用Ceph客户端来挂载CephFS。
对象存储(Object)
使用s3客户端来访问数据,和minio差不多。
Ceph网络
| 服务名 | 端口号 | 描述 |
|---|---|---|
| Monitor | 6789/tcp | 与Ceph集群通信 |
| Monitor | 3300/tcp | |
| MGR | 7000/tcp | Ceph管理面板 |
| MGR | 8003/tcp | Ceph Restful API管理 with HTTPS |
| MGR | 9283/tcp | Prometheus插件通信接口 |
| OSD | 6800-7300/tcp | 每个OSD在这个范围内使用3个端口,一个用来与客户端和监视器进行通信,一个用来与集群中其他的OSD进行通信,最后一个用来在集群中发送心跳包 |
| RADOS 网关 | 7480/tcp | 默认RADOS网管端口为7480,你可以修改为80/443(如果使用TLS) |
| 8443 | Dashboard |
# 放通Monitor节点3300TCP端口、6789TCP端口
firewall-cmd --zone=public --add-port=3300/tcp --permanent
firewall-cmd --zone=public --add-port=6789/tcp --permanent
# 放通OSD节点6800-7300TCP端口
firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
# 放行Dashboard
firewall-cmd --zone=public --add-port=8443/tcp --permanent
# 放行Prometheus插件通信接口
firewall-cmd --zone=public --add-port=9283/tcp --permanent
# 重载firewall--使以上配置生效
firewall-cmd --reload
# 查看防火墙规则
firewall-cmd --list-all
Ceph部署工具比较
ceph-deploy—适合新手练习
易于上手、使用简单,并且支持快速安装和配置 Ceph 集群的各个组件。
已被ceph官方弃用。
https://docs.ceph.com/en/latest/install/
Cephadm—官方推荐
https://docs.ceph.com/en/latest/install/
Cephadm安装和管理 Ceph 集群,该集群使用容器和 systemd,并与 CLI 和仪表板 GUI 紧密集成。
cephadm 仅支持 Octopus 和更新版本。
cephadm 与编排 API 完全集成,并完全支持用于管理集群部署的 CLI 和仪表板功能。
cephadm 需要容器支持(以 Podman 或 Docker 的形式)和 Python3。
ROOK—官方推荐
它将 Ceph 存储作为 Kubernetes 的一部分集成到容器编排中,使得在 Kubernetes 上部署和管理 Ceph 集群变得更加容易。
DeepSea
提供了一系列高级特性和自动化功能,例如负载均衡、故障转移、备份和恢复等,能够帮助您更好地管理和维护 Ceph 集群。
Ceph集群规划
对于 Ceph 集群的规划,需要考虑以下几个方面:
- 存储需求:首先需要确定存储需求的大小和类型,比如需要存储的数据类型、数据量、访问频率等。这些因素将影响集群的硬件规格和配置。
- 硬件选型:根据存储需求的大小和类型,选择适当的硬件,包括 CPU、内存、硬盘、网络等。
- 节点数量:Ceph 集群由多个节点组成,节点的数量取决于存储需求和可用性要求。一般来说,至少需要 3 个节点来实现数据副本备份和故障恢复。
- 数据分布策略:Ceph 支持多种数据分布策略,比如均衡分布、故障域感知分布等。根据数据类型、数据量和可用性要求等因素选择合适的数据分布策略。
- 安全机制:Ceph 提供了多种安全机制,比如访问控制、加密传输等。根据实际需求选择合适的安全机制。
- 备份策略:Ceph 集群需要定期备份以应对可能的故障和数据丢失。选择合适的备份策略和工具,并定期测试备份的可用性。
总之,Ceph 集群的规划需要根据实际需求进行综合考虑和权衡,确保集群的可用性、可扩展性和安全性。
RHEL8搭建Ceph集群
添加host及ssh免密
| 角色 | 主机名 | Public IP | 集群IP | 额外磁盘 | 备注 |
|---|---|---|---|---|---|
| mon,mgr,osd | node1 | ceph-mgr不是必须的 | |||
| mon,osd | node2 | OSB至少需要2台 | |||
| mon,mgr,osd | node3 | MON至少需要3台 |
初始化节点安装Ceph软件包
在初始化节点(node1)上执行
# 安装 Ceph 存储库:
dnf install -y https://download.ceph.com/rpm-octopus/el8/noarch/ceph-release-1-1.el8.noarch.rpm
# 更新软件包索引:
dnf update -y
# 安装 Ceph:
dnf install -y ceph
# 安装ceph部署工具
yum install -y python-setuptools ceph-deploy
# 安装ceph组件
dnf install -y ceph-mon ceph-osd
初始化Ceph集群
在node1执行。
# 创建一个新的 Ceph 集群目录,并进入该目录
mkdir cephcluster
cd cephcluster/
清理ceph上的旧版包和数据
在node1执行。
# 清除远程主机/var/lib/ceph /etc/ceph中的包和数据
ceph-deploy uninstall node1 node2 node3
# 清除/var/lib/ceph及/etc/ceph下ceph目录及以下内容全部
ceph-deploy purge node1 node2 node3
# 清除my-cluster目录中的认证密钥文件
ceph-deploy purgedata node1 node2 node3
# 从本地目录中删除身份验证密钥。
ceph-deploy forgetkeys
开始初始化Ceph集群
在node1执行。
在当前目录中创建一个新的 Ceph 配置文件,例如 ceph.conf:
这里的 node1、node2、node3 是集群中的节点名称,根据实际情况进行替换。
# 向Ceph存储集群中添加三个新节点
## new 新建一个 Ceph 集群
## node1 node2 node3 要添加到集群中的新节点名称
ceph-deploy new node1 node2 node3
# 必须参数
## --cluster-network就是私网(存储网)的网络地址,非主机地址
## --public-network是外网的网络地址
## node1是本机的主机名
ceph-deploy new --cluster-network 192.168.1.0/24 --public-network 172.18.2.3/24 node1
执行完该名了会创建ceph.mon.keyring和ceph.conf
ceph.mon.keyring是ceph的通信密钥文件。
查看生成的配置文件
[global]
# 集群的唯一ID,该值在集群内所有节点上必须保持一致。
fsid =
# 初始监视器节点的逗号分隔列表,监视器节点用于管理集群。
mon_initial_members =
# 一个逗号分隔的主机名或IP地址列表,表示可以找到监视器节点的位置。如果未定义 "mon_initial_members" 参数,则使用此参数来发现初始监视器节点。
mon_host =
# 集群守护程序之间通信所需的身份验证协议,默认为 cephx。
auth_cluster_required = cephx
# 客户端与集群服务之间通信所需的身份验证协议,默认为 cephx。
auth_service_required = cephx
# 客户端连接到集群所需的身份验证协议,默认为 cephx。
auth_client_required = cephx
# Ceph客户端连接的网络,一般三方监控也是监控这个地址
public_network = 172.18.2.0/24
# 私网(存储网)的网络地址,非主机地址
cluster_network = 192.168.1.0/24
为Node安装指定版本的Ceph
在node1执行。
# 为指定node 安装指定版本的ceph
## --release 参数指定要安装的 Ceph 版本是 nautilus。
## --no-adjust-repos 在不修改源代码库的情况下安装包
## Ceph的LTS版本是Nautilus,它在2019年发布
ceph-deploy install --release nautilus node1 node2 node3 --no-adjust-repos
部署MON节点
在node1执行。
使用 ceph-deploy 工具将 MON 节点添加到 Ceph 集群中。
这个命令只是创建了单个监视器节点,高可用和高容错集群,建议至少三个监视器节点,并使用quorum来确保在其中一个节点故障时仍然能够继续运行。
在部署节点上为新的 MON 节点生成配置文件并推送到集群中,会在所有 MON 节点上安装 ceph-mon 软件包。
# 监控节点初始化
# 创建初始的监视器(Monitor)节点
ceph-deploy mon create-initial

该命令会执行以下步骤:
- 在指定的主机上安装 Ceph 软件包和依赖项。
- 生成集群配置文件
ceph.conf和密钥环(keyring)文件ceph.client.admin.keyring。 - 创建
初始监视器节点,并将其添加到集群中。 - 生成并输出其他
OSD节点加入集群所需的命令。
部署集群配置和秘钥环文件至各节点
# 查看ceph集群健康状态
ceph health
# 或
ceph -s
# 将节点(node1、node2 和 node3)指定为Ceph管理员
## 会将/etc/ceph/ceph.client.admin.keyring密钥环文件分发给这3台机器
ceph-deploy admin node1 node2 node3
会将集群配置文件 ceph.conf 和密钥环(keyring)文件 ceph.client.admin.keyring拷贝到各节点的/etc/ceph/目录下。
部署mgr节点
# 部署mgr角色
ceph-deploy mgr create node1
# 查看ceph状态,可以看到mgr在node1上
ceph -s
添加OSD节点
在node1执行。
在具有足够硬件资源和磁盘空间的机器上设置 Ceph 存储节点。可以使用以下命令在其中一个节点上初始化 Ceph 存储集群:
OSD节点创建分区
在 所有OSD 节点上创建一个用于存储数据的分区,并将其格式化为 XFS 文件系统:
# 创建一个新的 GPT(GUID 分区表)标签的分区表
parted /dev/sdb mklabel gpt
# 为/dev/sdb创建1个新的主分区,XFS,使用所有可用空间
## -1 表示使用整个可用空间作为分区的结束位置
parted /dev/sdb mkpart primary xfs 1 -1
# 格式化为xfs
mkfs.xfs /dev/sdb1
将OSD节点加入集群
在 OSD 节点上使用 ceph-deploy 工具添加 OSD:
这里的 node1 是 OSD 节点名称,/dev/sdb1 是用于存储数据的分区。
# 创建 OSD(Object Storage Daemon)节点
ceph-deploy osd create <node_name>:<partition_path>
# 如果多台机器上的磁盘路径不一致
ceph-deploy osd create node1:/dev/sdb node2:/dev/sdc node3:/dev/sdd
## 指定多个磁盘来创建多个OSD节点
ceph-deploy osd create node1 --data /dev/sdb,/dev/sdc
ceph-deploy osd create node2 --data /dev/sdb,/dev/sdc
ceph-deploy osd create node3 --data /dev/sdb,/dev/sdc
# 检查Ceph存储群集的状态
ceph -s
# 显示 Ceph 存储集群的 OSD 树形图
## 该命令会列出所有 OSD 的 ID、所在节点、状态以及其它相关信息,并将它们按照拓扑结构组织成一棵树。
ceph osd tree
检查OSD的状态
# 检查OSD的状态
ceph osd status
扩展mon节点
# 将 node2 和 node3 节点添加到 Ceph 存储集群中作为监视器(MON)
ceph-deploy mon add node2 node3
# 显示当前 Ceph 存储集群中监视器(MON)的状态信息
ceph mon stat
# 显示 Ceph 存储集群中所有监视器(MON)的详细信息
ceph mon dump
扩展mgr节点–非必需执行
从 Ceph Nautilus 版本开始,不再需要手动创建 MGR,而是默认情况下自动启用。Nautilus及以上版本可以忽略该命令。
# 将 node2 和 node3 节点添加到 Ceph 存储集群中作为Ceph管理节器(MGR)
ceph-deploy mgr create node2 node3
# 检查Ceph存储群集的状态
ceph -s
备用配置
如果用 ceph-deploy 工具来部署cpeh。可能需要在ceph集群所有机器上创建一个名为 ceph-deploy 的用户,并将其添加到 sudoers 文件中。
# 创建eph-deploy用户
sudo useradd -m ceph-deploy
# 为eph-deploy用户设置密码
sudo passwd ceph-deploy
# 将eph-deploy用户添加到wheel管理员组
sudo usermod -aG wheel ceph-deploy
# 为eph-deploy用户配置sudo提权
echo "ceph-deploy ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph-deploy
# 权限设置为0440
sudo chmod 0440 /etc/sudoers.d/ceph-deploy
本文介绍了如何使用Ceph-deploy部署Ceph存储集群,包括Ceph的主要组件如Monitor、OSD、MDS等,以及Ceph网络配置。文章对比了Cephadm和ROOK等部署工具,并提供了RHEL8环境下Ceph集群的规划和搭建步骤,包括添加主机、安装软件包、初始化节点、配置OSD等。此外,还讨论了Ceph的扩展和高可用性设置。
1757

被折叠的 条评论
为什么被折叠?



