编辑
2023-05-22
运维
00
请注意,本文编写于 485 天前,最后修改于 485 天前,其中某些信息可能已经过时。

目录

1.1 Ceph 介绍
1.2 部署环境介绍
1.2.1 节点信息
1.2.2 节点要求
1.2.2.1 时钟同步
1.2.2.2 主机名解析
1.2.2.3 账号权限
1.3 使用 Cephadm 部署 Ceph 集群
1.3.1 更新软件包
1.3.2 安装依赖包
1.3.3 安装 Cephadm
1.3.4 安装 Ceph 集群
1.3.5 添加主机到集群
1.3.6 部署 OSD
1.3.7 部署 Monitor
1.3.8 部署 Manager
1.3.9 为节点设置标签
1.4 总结

面对时刻增长的数据,企业需要找到一种经济、可靠、高效、可扩容的存储数据的方式。Ceph 无疑是个好选择。

本文是 “Ceph 分布式存储最佳实践” 的第一篇文章,主要包括以下主题:

  • Ceph 介绍
  • 部署环境介绍
  • 部署 Ceph 集群
  • 总结

1.1 Ceph 介绍

Ceph 是一个开源的、分布式的、可扩展的、软件定义的存储系统,可以提供块、对象和文件存储。

传统的存储系统通过一张表集中记录元数据。客户端每次发出读写请求,存储系统首先从这个表中查找元数据,得到结果后,才能执行客户端的操作请求。如果存储集群很大,这种方式可能引发性能瓶颈,也限制了存储系统的可扩展性。

Ceph 通过 CRUSH (Controlled Replication Under Scalable Hashing) 算法,在后台动态计算数据读取或写入位置,客户端直接连接 OSD,提高了数据的读写性能。通过动态计算元数据,Ceph 避免了元数据表的限制,提高了可扩展性。

Ceph 中包含了很多概念,比如 Monitor、Manager、OSD、PG、MDS 等。系列文章以部署一个高可用的 Ceph 集群作为开端,理论与实践结合,逐步讨论 Ceph 的概念及使用。因此搭建一套高可用的 Ceph 集群,是学习 “Ceph 分布式存储最佳实践” 的基础。

1.2 部署环境介绍

完成本教程需要七个节点:一个节点作为 Ansible 控制节点,六个节点部署 Ceph 集群,它们的详细角色如下。

1.2.1 节点信息

七个节点分别为 2 核 CPU、2 GB 内存的虚拟机,安装了 Rocky Linux release 9.1 操作系统。

Ansible Inventory hosts:

[ceph] ceph1.server.aiops.red ceph2.server.aiops.red ceph3.server.aiops.red ceph4.server.aiops.red ceph5.server.aiops.red ceph6.server.aiops.red

Ceph 集群主机角色如下:

主机名:ceph1.server.aiops.red, IP:10.211.55.44, 角色:cephadm、mon、mgr 主机名:ceph2.server.aiops.red, IP:10.211.55.45, 角色:mon、mgr 主机名:ceph3.server.aiops.red, IP:10.211.55.46, 角色:mon、mgr 主机名:ceph4.server.aiops.red, IP:10.211.55.48, 角色:osd, 额外磁盘:/dev/sdb、/dev/sdc、/dev/sdd 主机名:ceph5.server.aiops.red, IP:10.211.55.49, 角色:osd, 额外磁盘:/dev/sdb、/dev/sdc、/dev/sdd 主机名:ceph6.server.aiops.red, IP:10.211.55.50, 角色:osd, 额外磁盘:/dev/sdb、/dev/sdc、/dev/sdd

1.2.2 节点要求

为使安装顺利进行,节点应满足以下要求。

1.2.2.1 时钟同步

Ceph 集群各节点时钟应保持一致,这也是分布式系统的基本要求。

要自动化实现时钟同步,可以参考 “Linux 9 自动化部署 NTP 服务”。

1.2.2.2 主机名解析

Ansible 控制节点、Ceph 各节点间应能通过主机名访问。要实现主机名称解析,可以在主机的 /etc/hosts 文件中指定节点的 IP、主机名条目,或者参考 “Linux 9 自动化部署 DNS 服务” 一文配置 DNS 服务。

1.2.2.3 账号权限

Ansible 控制节点能够免密登录 Ceph 节点,并能免密执行 sudo。可以参考 “Linux 9 自动化部署 NTP 服务” 中的 “部署环境要求” 一节实现。

在满足了以上要求后,开始部署 Ceph 高可用集群。

1.3 使用 Cephadm 部署 Ceph 集群

在安装 Ceph 集群自身时,使用 cephadm 工具;在对主机进行操作时,可以使用 Ansible 自动化工具。

1.3.1 更新软件包

Ceph 节点是新装的操作系统,最好统一执行软件包的更新操作。可以通过 Ansible 完成,以下是自动更新软件包、并在更新完成后重启操作系统的 Ansible Playbook:

upgrade_packages.yaml

#!/usr/bin/env ansible-playbook --- - name: upgrade packages play hosts: ceph gather_facts: false become: true tasks: - name: upgrade packages task ansible.builtin.dnf: update_cache: true name: "*" state: latest register: upgradeResult - name: Reboot system task reboot: when: upgradeResult.changed ...

执行此 Playbook,完成软件包更新:

$ ansible-playbook upgrade_packages.yaml

此操作在 Ansible 节点上执行。

1.3.2 安装依赖包

cephadm 部署 Ceph 集群时,依赖 Python3、Systemd、Podman、LVM2,这些工具 Rocky Linux 9 默认已经安装了。

也可以通过以下 Playbook,执行安装:

ceph-dependent.yaml

--- - name: install cephadm dependent packages hosts: ceph become: true gather_facts: false tasks: - name: install packages dnf: name: - python3 - lvm2 - podman state: present ...

在 Ansible 控制节点上执行:

[aiops@automate-host ceph]$ ansible-playbook ceph-dependent.yaml

1.3.3 安装 Cephadm

登录 ceph1.server.aiops.red 主机,执行以下操作。

安装 ceph repo:

[root@ceph1 ~]# dnf search release-ceph Last metadata expiration check: 0:00:45 ago on Sun 05 Feb 2023 11:53:21 AM CST. =========== Name Matched: release-ceph =========== centos-release-ceph-pacific.noarch : Ceph Pacific packages from the CentOS Storage SIG repository centos-release-ceph-quincy.noarch : Ceph Quincy packages from the CentOS Storage SIG repository [root@ceph1 ~]# dnf install -y centos-release-ceph-quincy

安装 cephadm

[root@ceph1 ~]# dnf install -y cephadm

cephadm 通过容器部署 Ceph 集群,因此用到了几个镜像。可以通过编辑该文件查看:

[root@ceph1 ~]# vim $(which cephadm) # 在打开的编辑器中搜索 images 关键字

安装 ceph 客户端:

[root@ceph1 ~]# cephadm install ceph-common

1.3.4 安装 Ceph 集群

在 Ceph 集群的第一台主机上,执行 cephadm bootstrap 命令创建 Ceph 集群,该命令会创建第一个 Monitor 守护进程,Monitor 守护进程需要监听在一个地址上,因此需要为该命令提供一个 IP 地址:

root@ceph1 ~]# cephadm bootstrap --mon-ip 10.211.55.44 --allow-fqdn-hostname

安装过程将持续一段时间,因为需要下载运行服务所需的容器镜像。

安装完成后,注意类似以下的输出内容:

Ceph Dashboard is now available at: URL: https://ceph1.server.aiops.red:8443/ User: admin Password: cpjxlxldcz

通过此信息,可以在浏览器中登录 Ceph 集群的 Dashboard。第一次登录,需要修改密码。

image-20230522163846264图 1-1, Ceph Cluster Dashboard

集群处于非健康状态。可以通过 ceph -s 命令查看详细信息:

[root@ceph1 ~]# ceph -s cluster: id: 53522672-a50a-11ed-93ad-001c42a83cc8 health: HEALTH_WARN OSD count 0 < osd_pool_default_size 3 services: mon: 1 daemons, quorum ceph1.server.aiops.red (age 18m) mgr: ceph1.server.aiops.red.obitbj(active, since 16m) osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs:

提示 OSD 的数量小于三。

1.3.5 添加主机到集群

将主机添加到集群,需要执行以下步骤:

首先,将部署集群时生成的公钥 /etc/ceph/ceph.pub 添加到新主机的 root 用户,该步骤可以通过 Ansible Playbook 完成。将 /etc/ceph/ceph.pub 文件从 ceph1.server.aiops.red 主机拷贝到 Ansible 主机,在 Ansible 主机上编辑 Playbook 文件。

copy_pub.yaml

--- - name: initialization ssh key play hosts: ceph gather_facts: false become: true tasks: - name: initialization ssh key task ansible.builtin.authorized_key: comment: aiops user public key user: root key: "{{ lookup('file', '/home/aiops/playbooks/test/ceph/ceph.pub') }}" ...

在 Ansible 节点上执行 copy_pub.yaml Playbook 文件,完成 SSH 公钥的添加:

[aiops@automate-host ceph]$ ansible-playbook copy_pub.yaml

然后,为 Ceph 集群添加节点,此步骤在 cephadm (ceph1.server.aiops.erd) 节点上完成:

[root@ceph1 ~]# ceph orch host add ceph2.server.aiops.red Added host 'ceph2.server.aiops.red' with addr '10.211.55.45' [root@ceph1 ~]# ceph orch host add ceph3.server.aiops.red Added host 'ceph3.server.aiops.red' with addr '10.211.55.46' ...

将所有节点加入 Ceph 集群。

查看集群中的节点:

[root@ceph1 ~]# ceph orch host ls HOST ADDR LABELS STATUS ceph1.server.aiops.red 10.211.55.44 _admin ceph2.server.aiops.red 10.211.55.45 ceph3.server.aiops.red 10.211.55.46 ceph4.server.aiops.red 10.211.55.48 ceph5.server.aiops.red 10.211.55.49 ceph6.server.aiops.red 10.211.55.50 6 hosts in cluster

因为缺少 OSD,集群状态处于非健康状态,接下来将 OSD 部署到集群。

1.3.6 部署 OSD

OSD (Object Storage Daemon) 用来存储数据,处理数据的复制、恢复以及再平衡,并通过检查其他 OSD 的心跳,为 Monitor、Manager 提供一些监控信息。通常,需要至少三个 OSD 来实现冗余和高可用性。

查看集群中可用设备:

ceph orch device ls

image-20230522163810701图 1-2 列出 Ceph 集群中可用的设备

将集群中任何可用的设备作为 OSD:

[root@ceph1 ~]# ceph orch apply osd --all-available-devices Scheduled osd.all-available-devices update...

再次检查集群状态:

ceph -s

image-20230522163816811图 1-3, 集群状态变为健康

集群健康状态变为 OK。

查看 OSD:

ceph osd tree

image-20230522163821529图 1-4, 查看 OSD 信息

1.3.7 部署 Monitor

Ceph Monitor (ceph-mon) 维护集群状态的 maps,包括 monitor map、manager map、OSD map、MDS map 以及 CURSH map。这些 maps 是重要的集群状态,需要 Ceph 守护进程互相协调。Monitors 也负责管理守护进程和客户端之间的认证。通常需要至少三个 monitors 实现冗余和高可用性。

通过 ceph -s 或 Dashboard 页面的 Cluster-Hosts 可以看到,默认启动了 5 个 mon。一个或多个 mon 实例形成一个 Paxos 集群,提供可靠性。可以使用 --placement 选项将 mon 部署在指定的节点上:

ceph orch apply mon --placement="ceph1.server.aiops.red,ceph2.server.aiops.red,ceph3.server.aiops.red"

image-20230522163825511图 1-5, 部署 mon

1.3.8 部署 Manager

Ceph Manager daemon (ceph-mgr) 负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph Manager 守护进程还托管 Python 模块来管理和暴露 Ceph 集群的信息,包括基于 Web 的 Ceph Dashboard 和 REST API。通常需要至少两个 Managers 来实现高可用性。

通常与监控守护程序一起运行,以提供额外的监控和接口给外部监控和管理系统:

ceph orch apply mgr --placement="ceph1.server.aiops.red,ceph2.server.aiops.red,ceph3.server.aiops.red"

image-20230522163829444图 1-6, 部署 mgr

1.3.9 为节点设置标签

Orchestrator 支持为主机分配标签。每个主机可以有多个标签:

ceph orch host label add ceph4.server.aiops.red osd-node

image-20230522163833123图 1-7, 为主机设置标签

1.4 总结

本章是 “Ceph 分布式存储最佳实践” 的开篇,主要介绍了 Ceph 集群的部署,以及一些基本概念。通过对本章的学习,你将能够在基于 RPM 的 Linux 系统上部署 Ceph 分布式集群,并对集群做一些基本操作,如部署 OSD、Monitor、Manager,设置标签等。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Gustav

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!