使用Ceph-deploy部署Ceph集群
Ceph简介
Ceph的LTS
版本是Nautilus
,它在2019年发布。
Ceph的主要组件
Ceph 是一个分布式存储系统,由多个组件构成,主要包括以下几个组件:
-
Monitor:
- 一个Ceph集群需要多个Monitor组成的小集群,用来保存OSD的元数据。
-
OSD
- OSD 全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD,Ceph最终数据也是由OSD保存到磁盘上的。
-
MDS
- MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。如果不使用文件存储,则不需要安装。
-
Object
- Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
-
PG
- OSD的PG,意思是
放置组
。 - PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。
- OSD的PG,意思是
-
RADOS
- RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
-
Libradio
- Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。
-
CRUSH
- CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
-
RBD
- RBD全称RADOS block device,是Ceph对外提供的块设备服务。
-
RGW
- RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容,如果不使用对象存储则不需要安装。
-
CephFS
- CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。
需要注意的是,Ceph 的每个组件都可以运行在多台服务器上形成一个分布式集群,以实现高可用性和数据冗余等特性。此外,Ceph 还支持多种存储后端,包括 FileStore
和 Bluestore
两种主要类型,以便为不同的应用场景提供更好的性能和容错能力。
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