使用Ceph-deploy部署Ceph集群

使用Ceph-deploy部署Ceph集群

  • Ceph简介
    • Ceph的主要组件
    • Ceph网络
  • Ceph部署工具比较
    • ceph-deploy---适合新手练习
    • Cephadm---官方推荐
    • ROOK---官方推荐
    • DeepSea
  • Ceph集群规划
  • RHEL8搭建Ceph集群
    • 添加host及ssh免密
    • 初始化节点安装Ceph软件包
    • 初始化Ceph集群
      • 清理ceph上的旧版包和数据
      • 开始初始化Ceph集群
      • 查看生成的配置文件
    • 为Node安装指定版本的Ceph
    • 部署MON节点
    • 部署集群配置和秘钥环文件至各节点
    • 部署mgr节点
    • 添加OSD节点
      • OSD节点创建分区
      • 将OSD节点加入集群
      • 检查OSD的状态
    • 扩展mon节点
    • 扩展mgr节点--`非必需执行`
  • 备用配置

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这一层其实是为了更好的分配数据和定位数据。
  • 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 还支持多种存储后端,包括 FileStoreBluestore 两种主要类型,以便为不同的应用场景提供更好的性能和容错能力。


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 集群的规划,需要考虑以下几个方面:

  1. 存储需求:首先需要确定存储需求的大小和类型,比如需要存储的数据类型、数据量、访问频率等。这些因素将影响集群的硬件规格和配置。
  2. 硬件选型:根据存储需求的大小和类型,选择适当的硬件,包括 CPU、内存、硬盘、网络等。
  3. 节点数量:Ceph 集群由多个节点组成,节点的数量取决于存储需求和可用性要求。一般来说,至少需要 3 个节点来实现数据副本备份和故障恢复。
  4. 数据分布策略:Ceph 支持多种数据分布策略,比如均衡分布、故障域感知分布等。根据数据类型、数据量和可用性要求等因素选择合适的数据分布策略。
  5. 安全机制:Ceph 提供了多种安全机制,比如访问控制、加密传输等。根据实际需求选择合适的安全机制。
  6. 备份策略:Ceph 集群需要定期备份以应对可能的故障和数据丢失。选择合适的备份策略和工具,并定期测试备份的可用性。

总之,Ceph 集群的规划需要根据实际需求进行综合考虑和权衡,确保集群的可用性、可扩展性和安全性。


RHEL8搭建Ceph集群

https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/4/pdf/installation_guide/red_hat_ceph_storage-4-installation_guide-zh-cn.pdf

参考: https://www.ethanzhang.xyz/ceph%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97%E5%8F%8A%E5%9C%A8openshift%E7%9A%84%E5%BA%94%E7%94%A8/#22-%E5%AE%89%E8%A3%85%E4%BA%8B%E5%AE%9C%E4%BA%8B%E9%A1%B9


添加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.keyringceph.conf
使用Ceph-deploy部署Ceph集群_第1张图片
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-deploy部署Ceph集群_第2张图片
该命令会执行以下步骤:

  1. 在指定的主机上安装 Ceph 软件包和依赖项。
  2. 生成集群配置文件 ceph.conf 和密钥环(keyring)文件 ceph.client.admin.keyring
  3. 创建初始监视器节点,并将其添加到集群中。
  4. 生成并输出其他 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)