Ceph 分布式存储部署指南 编号 系统 角色 IP Ceph版本 硬件配置 主机名 1 Rocky9.4 bootstrap,mon,mgr,osd 192.168.8.3 Squid 4C/4G/500G*4 ceph001.xiaohui.cn 2 Rocky9.4 mon,mgr,osd 192.168.8.4 Squid 4C/4G/500G*4 ceph002.xiaohui.cn 3 Rocky9.4 mon,mgr,osd 192.168.8.5 Squid 4C/4G/500G*4 ceph003.xiaohui.cn
1 2 3 4 5 6 7 作者:李晓辉 联系方式: 1. 微信:Lxh_Chat 2. 邮箱:939958092@qq.com
Ceph基本介绍 随着数据量的迅猛增长和数据存储需求的日益复杂化,传统的存储解决方案越来越难以满足现代企业的需求。在这种背景下,分布式存储系统应运而生,为企业提供了更高效、更灵活的存储解决方案。
Ceph作为一种开源的分布式存储系统,以其高可扩展性、高可靠性和高性能的特点,受到了广泛的关注和应用。Ceph支持对象存储、块存储和文件系统等多种存储接口,能够满足各种业务场景下的存储需求。
本文将基于Rocky 9.4操作系统,详细介绍如何用容器化的方式从零开始部署一个Ceph分布式存储集群。通过本指南,你将能够掌握Ceph的安装、配置和管理方法,为企业的存储需求提供强有力的支持。
本次部署将以容器化的方式部署Ceph,部署工具为cephadm ,Cephadm 是 Ceph 集群管理的现代化工具,它简化了容器化 Ceph 部署的复杂性。Cephadm 的设计目标是简化 Ceph 集群的部署和管理,使其更加易用和灵活。通过容器化的方式,Cephadm 提供了一种标准化的方法来操作 Ceph 集群,有效减少了运维复杂度。
先决条件准备 除非另有说明,不然先决条件需在每个节点准备
主机名和解析 设置主机名
根据解析,在每个节点设置合适的主机名,以下以第一台为例
1 hostnamectl hostname ceph001.xiaohui.cn
准备好集群之间的解析
1 2 3 4 5 6 7 cat > /etc/hosts <<-'EOF' 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.8.3 ceph001.xiaohui.cn ceph001 192.168.8.4 ceph002.xiaohui.cn ceph002 192.168.8.5 ceph003.xiaohui.cn ceph003 EOF
准备软件仓库 这里向系统中添加了squid版本的Ceph仓库,并使用南京大学进行仓库加速
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 cat > /etc/yum.repos.d/ceph.repo <<-'EOF' [ceph] name =Ceph packages for x86_64 baseurl =https://mirrors.nju.edu.cn/ceph/rpm-squid/el9/x86_64 enabled =1 priority =2 gpgcheck =1 gpgkey =https://mirrors.nju.edu.cn/ceph/keys/release.asc[ceph-noarch] name =Ceph noarch packagesbaseurl =https://mirrors.nju.edu.cn/ceph/rpm-squid/el9/noarchenabled =1 priority =2 gpgcheck =1 gpgkey =https://mirrors.nju.edu.cn/ceph/keys/release.asc[ceph-source] name =Ceph source packagesbaseurl =https://mirrors.nju.edu.cn/ceph/rpm-squid/el9/SRPMSenabled =0 priority =2 gpgcheck =1 gpgkey =https://mirrors.nju.edu.cn/ceph/keys/release.ascEOF
生产软件包缓存,方便稍后使用
安装必备软件包 以下软件安装,可能会更新systemd这种关键组件,所以安装后,请重启一下服务器
Python 3 Systemd Podman Chrony LVM2 1 dnf install podman chrony lvm2 systemd python3 bash-completion wget curl epel-release -y
重启服务器
开启ntp同步 默认从公网同步,需要可以自己指定时间源,我这里使用ntp.aliyun.com
编辑这个配置文件,在最开头的地方添加这一行即可
1 2 3 4 vim /etc/chrony.conf ... pool ntp.aliyun.com iburst ...
1 2 systemctl enable chronyd --now systemctl restart chronyd
安装cephadm Cephadm 是一种用于管理 Ceph 集群的工具,
安装cephadm工具就够了,我这里安装ceph-common软件包是为了在主机上执行ceph、rados等各种ceph命令,因为cephadm是容器化部署Ceph,所以宿主机上并没有安装这些命令,我们安装了ceph-common
之后,就不必每次都登录容器执行了,更高效
1 dnf install cephadm ceph-common -y
至此,所有先决条件部署完成
部署新集群 Cephadm bootstrap 是初始化 Ceph 集群的第一步。它通过引导命令创建一个小型的初始 Ceph 集群,使其包含一个监视器(MON)和一个管理器(MGR)。这是整个 Ceph 集群部署和管理过程的基础步骤。
Cephadm bootstrap 命令将会执行以下操作:
在本地主机上为新集群创建一个监视器(Monitor)和一个管理器(Manager)守护进程 。
为 Ceph 集群生成一个新的 SSH 密钥,并将其添加到 root 用户的 /root/.ssh/authorized_keys 文件中。
将公钥 的副本写入 /etc/ceph/ceph.pub 文件中。
写入一个最小配置文件 到 /etc/ceph/ceph.conf 文件中。该文件用于与 Ceph 守护进程通信。
将 client.admin 管理员 (特权)密钥的副本写入 /etc/ceph/ceph.client.admin.keyring 文件中。
为引导主机添加 _admin 标签 。默认情况下,带有此标签的任何主机将(也)会获得 /etc/ceph/ceph.conf 和 /etc/ceph/ceph.client.admin.keyring 文件的副本。
本次部署采用多节点方式,如果你是单机部署或者FQDN部署,需要注意加参数
单节点需要加:--single-host-defaults
主机名是FQDN时需要加--allow-fqdn-hostname
只有一个节点的时候,请加上–single-host-defaults参数
1 cephadm bootstrap --mon-ip 192.168.8.3 --single-host-defaults --initial-dashboard-user admin --initial-dashboard-password LiXiaohui --dashboard-password-noupdate --allow-fqdn-hostname
多节点的时候,用下面的方式,不用加上面的参数,这是本次采用的方法。
1 cephadm bootstrap --mon-ip 192.168.8.3 --initial-dashboard-user admin --initial-dashboard-password LiXiaohui --dashboard-password-noupdate --allow-fqdn-hostname
输出
这里要记住密码
1 2 3 4 5 6 7 Ceph Dashboard is now available at: URL: https://ceph001.xiaohui.cn:8443/ User: admin Password: LiXiaohui ... Bootstrap complete.
然后就可以用浏览器打开 https://192.168.8.3:8443
ceph的网页界面了,当然,你可以本地hosts解析为这个地址,用域名访问,打开时,需要同意自签名证书的警告
打开界面并使用密码登录后,界面长这样
从页面上可以看到,已经提示我们需要先扩展集群,而且左上角的dashboard后也是黄色的警告,那我们来加点硬盘到集群中,毕竟是分布式存储,一个硬盘都没有就过分了
部署OSD 在 Ceph 中,OSD(Object Storage Daemon)是存储集群的核心组件之一。它们的主要职责是存储数据、处理数据复制、恢复、回填和重均衡操作。
Ceph OSD 的关键概念
数据存储 :
OSD 负责实际存储数据对象。每个 OSD 通常对应一个物理存储设备(如硬盘或 SSD)。 数据复制 :
为了确保数据的高可用性和持久性,OSD 之间会相互复制数据。Ceph 使用 CRUSH 算法决定数据的存放位置。 数据恢复 :
当一个 OSD 出现故障或下线时,集群会自动从其他 OSD 中恢复数据,并将其复制到新的 OSD 上。 回填和重均衡 :
监控和管理 :
OSD 通过心跳机制向 Ceph 集群报告其状态,确保集群的健康和一致性。 了解了Ceph OSD之后,我们来添加一些OSD到集群中,完成Ceph集群扩容
查看现有硬盘,我还有nvme0n2、3、4空闲
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@ceph001 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 1024M 0 rom nvme0n1 259:0 0 500G 0 disk ├─nvme0n1p1 259:1 0 600M 0 part /boot/efi ├─nvme0n1p2 259:2 0 1G 0 part /boot └─nvme0n1p3 259:3 0 498.4G 0 part ├─rl-root 253:0 0 494.5G 0 lvm /var/lib/containers/storage/overlay │ / └─rl-swap 253:1 0 3.9G 0 lvm [SWAP] nvme0n2 259:4 0 500G 0 disk nvme0n3 259:5 0 500G 0 disk nvme0n4 259:6 0 500G 0 disk
添加osd进程到集群中
1 2 3 4 5 6 [root@ceph001 ~]# ceph orch daemon add osd ceph001.xiaohui.cn:/dev/nvme0n2 Created osd(s) 0 on host 'ceph001.xiaohui.cn' [root@ceph001 ~]# ceph orch daemon add osd ceph001.xiaohui.cn:/dev/nvme0n3 Created osd(s) 1 on host 'ceph001.xiaohui.cn' [root@ceph001 ~]# ceph orch daemon add osd ceph001.xiaohui.cn:/dev/nvme0n4 Created osd(s) 2 on host 'ceph001.xiaohui.cn'
看看集群里现有的OSD列表
1 2 3 4 5 6 7 [root@ceph001 ~]# ceph osd crush tree ID CLASS WEIGHT TYPE NAME -1 1.46489 root default -3 1.46489 host ceph001 0 ssd 0.48830 osd.0 1 ssd 0.48830 osd.1 2 ssd 0.48830 osd.2
除了手工添加OSD之外,也可以开启自动添加osd功能
在 Ceph 中使用 --all-available-devices
选项时,将会自动检测并使用系统中所有可用的存储设备作为 OSD。这样可以简化OSD的添加过程,无需手动指定每个设备。
1 2 [root@ceph001 ~]# ceph orch apply osd --all-available-devices Scheduled osd.all-available-devices update...
添加主机到集群 需要注意,新主机必须满足此文章的先决条件准备章节
先看看现有集群主机列表
1 2 3 4 [root@ceph001 ~]# ceph orch host ls --detail HOST ADDR LABELS STATUS VENDOR/MODEL CPU RAM HDD SSD NIC ceph001.xiaohui.cn 192.168.8.3 _admin VMware, Inc. (VMware20,1) 4C/4T 4 GiB - 4/2.1TB 1 1 hosts in cluster
将集群的SSH密钥分发到所有主机的root用户的authorized_keys文件中,以便能够免密操作
1 2 3 4 5 6 7 8 [root@ceph001 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph001.xiaohui.cn Are you sure you want to continue connecting (yes /no/[fingerprint])? yes [root@ceph001 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph002.xiaohui.cn Are you sure you want to continue connecting (yes /no/[fingerprint])? yes [root@ceph001 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph003.xiaohui.cn Are you sure you want to continue connecting (yes /no/[fingerprint])? yes
添加主机到集群列表
这里需要同时指定主机名和其对应的IP地址,添加主机后,新主机将会自动触发容器镜像下载以及容器的启动,可能需要一会儿才能就绪,而且由于我们在前面做了自动添加osd的动作,新主机上的硬盘将自动添加到集群中
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@ceph001 ~]# ceph orch host add ceph002.xiaohui.cn 192.168.8.4 Added host 'ceph002.xiaohui.cn' with addr '192.168.8.4' [root@ceph001 ~]# ceph orch host add ceph003.xiaohui.cn 192.168.8.5 Added host 'ceph003.xiaohui.cn' with addr '192.168.8.5' [root@ceph001 ~]# ceph orch host ls --detail HOST ADDR LABELS STATUS VENDOR/MODEL CPU RAM HDD SSD NIC ceph001.xiaohui.cn 192.168.8.3 _admin VMware, Inc. (VMware20,1) 4C/4T 4 GiB - 4/2.1TB 1 ceph002.xiaohui.cn 192.168.8.4 VMware, Inc. (VMware20,1) 4C/4T 4 GiB - 4/2.1TB 1 ceph003.xiaohui.cn 192.168.8.5 VMware, Inc. (VMware20,1) 4C/4T 4 GiB - 4/2.1TB 1 3 hosts in cluster
将机器添加到集群中需要一段时间才会生效,具体可以使用以下命令查看服务是否都正常
如果正常,全部都会处于running
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [root@ceph001 ~]# ceph orch ps NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID alertmanager.ceph001 ceph001.xiaohui.cn *:9093,9094 running (27s) 8s ago 32m 18.8M - 0.25.0 c8568f914cd2 2f0b6ad11766 ceph-exporter.ceph001 ceph001.xiaohui.cn running (34m) 8s ago 34m 9214k - 19.2.0 37996728e013 479b5a8f8b33 ceph-exporter.ceph002 ceph002.xiaohui.cn running (5m) 9s ago 5m 5234k - 19.2.0 37996728e013 09e884621b9a ceph-exporter.ceph003 ceph003.xiaohui.cn running (88s) 9s ago 88s 5288k - 19.2.0 37996728e013 0012fbf12b44 crash.ceph001 ceph001.xiaohui.cn running (34m) 8s ago 34m 6899k - 19.2.0 37996728e013 b70200d6456c crash.ceph002 ceph002.xiaohui.cn running (5m) 9s ago 5m 6899k - 19.2.0 37996728e013 96cb9630e62e crash.ceph003 ceph003.xiaohui.cn running (87s) 9s ago 87s 6899k - 19.2.0 37996728e013 71d8f8eff1d4 grafana.ceph001 ceph001.xiaohui.cn *:3000 running (22m) 8s ago 24m 81.2M - 9.4.12 2bacad6d85d8 cfd07c39c19d mgr.ceph001.bbzwee ceph001.xiaohui.cn *:9283,8765,8443 running (35m) 8s ago 35m 516M - 19.2.0 37996728e013 3d6940571f92 mgr.ceph002.lekmef ceph002.xiaohui.cn *:8443,9283,8765 running (4m) 9s ago 4m 438M - 19.2.0 37996728e013 f165588a0ce8 mon.ceph001 ceph001.xiaohui.cn running (35m) 8s ago 35m 62.3M 2048M 19.2.0 37996728e013 e880599904c0 mon.ceph002 ceph002.xiaohui.cn running (4m) 9s ago 4m 35.0M 2048M 19.2.0 37996728e013 9701777a219f mon.ceph003 ceph003.xiaohui.cn running (46s) 9s ago 46s 25.2M 2048M 19.2.0 37996728e013 a9855ed37e90 node-exporter.ceph001 ceph001.xiaohui.cn *:9100 running (34m) 8s ago 34m 16.7M - 1.5.0 0da6a335fe13 941dc192a4ab node-exporter.ceph002 ceph002.xiaohui.cn *:9100 running (4m) 9s ago 4m 17.6M - 1.5.0 0da6a335fe13 cd66538982b9 node-exporter.ceph003 ceph003.xiaohui.cn *:9100 running (70s) 9s ago 70s 15.4M - 1.5.0 0da6a335fe13 25a86d870585 osd.0 ceph001.xiaohui.cn running (21m) 8s ago 21m 48.1M 4096M 19.2.0 37996728e013 922842fa1476 osd.1 ceph001.xiaohui.cn running (20m) 8s ago 20m 48.9M 4096M 19.2.0 37996728e013 8443e06e5959 osd.2 ceph001.xiaohui.cn running (20m) 8s ago 20m 49.5M 4096M 19.2.0 37996728e013 925ad2d10234 osd.3 ceph002.xiaohui.cn running (4m) 9s ago 4m 39.7M 4096M 19.2.0 37996728e013 5e210c3a282b osd.4 ceph002.xiaohui.cn running (4m) 9s ago 4m 41.5M 4096M 19.2.0 37996728e013 129c9aa7857f osd.5 ceph002.xiaohui.cn running (4m) 9s ago 4m 37.2M 4096M 19.2.0 37996728e013 47929e2f7933 osd.6 ceph003.xiaohui.cn running (54s) 9s ago 54s 36.2M 4096M 19.2.0 37996728e013 93871c278bdf osd.7 ceph003.xiaohui.cn running (52s) 9s ago 52s 36.1M 4096M 19.2.0 37996728e013 6bc5b2af98c5 osd.8 ceph003.xiaohui.cn running (49s) 9s ago 49s 36.7M 4096M 19.2.0 37996728e013 4bced2338a51 prometheus.ceph001 ceph001.xiaohui.cn *:9095 running (25s) 8s ago 22m 43.2M - 2.43.0 a07b618ecd1d c765d30f432d
分配新的管理权限 为了方便管理,我们将ceph002.xiaohui.cn
这台机器也添加为管理机器
在分配管理权限之前,我们先来看一下此时ceph002.xiaohui.cn
这个主机的配置文件和密钥情况,从下面的情况来看,没有密钥和配置文件
1 2 [root@ceph002 ~]# ls /etc/ceph rbdmap
确认没权限获取集群信息
1 2 [root@ceph003 ~]# ceph -s Error initializing cluster client: ObjectNotFound('RADOS object not found (error calling conf_read_file)' )
分配_admin标签给它
1 2 [root@ceph001 ~]# ceph orch host label add ceph002.xiaohui.cn _admin Added label _admin to host ceph002.xiaohui.cn
确认标签
1 2 3 4 5 6 [root@ceph001 ~]# ceph orch host ls --detail HOST ADDR LABELS STATUS VENDOR/MODEL CPU RAM HDD SSD NIC ceph001.xiaohui.cn 192.168.8.3 _admin VMware, Inc. (VMware20,1) 4C/4T 4 GiB - 4/2.1TB 1 ceph002.xiaohui.cn 192.168.8.4 _admin VMware, Inc. (VMware20,1) 4C/4T 4 GiB - 4/2.1TB 1 ceph003.xiaohui.cn 192.168.8.5 VMware, Inc. (VMware20,1) 4C/4T 4 GiB - 4/2.1TB 1 3 hosts in cluster
确认配置文件、密钥的状态
1 2 [root@ceph002 ~]# ls /etc/ceph ceph.client.admin.keyring ceph.conf rbdmap
确认ceph002.xiaohui.cn
拥有管理权限,下面的命令执行成功,即可代表它成功获取到了集群信息,权限正常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@ceph002 ~]# ceph -s cluster: id : 2abd00ee-d3d7-11ef-ac68-000c29ac059a health: HEALTH_OK services: mon: 3 daemons, quorum ceph001,ceph002,ceph003 (age 9m) mgr: ceph001.bbzwee(active, since 31m), standbys: ceph002.lekmef osd: 9 osds: 9 up (since 9m), 9 in (since 9m) data: pools: 1 pools, 1 pgs objects: 2 objects, 449 KiB usage: 243 MiB used, 4.4 TiB / 4.4 TiB avail pgs: 1 active+clean
确认集群状态 我们既然已经添加了新的主机和新的OSD到集群,此时在dashboard上的黄色应该是绿色了,我们用命令来查一下集群状态
集群为HEALTH_OK
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [root@ceph001 ~]# ceph -s cluster: id : 2abd00ee-d3d7-11ef-ac68-000c29ac059a health: HEALTH_OK services: mon: 3 daemons, quorum ceph001,ceph002,ceph003 (age 7s) mgr: ceph001.bbzwee(active, since 22m), standbys: ceph002.lekmef osd: 9 osds: 9 up (since 4s), 9 in (since 26s) data: pools: 1 pools, 1 pgs objects: 2 objects, 449 KiB usage: 243 MiB used, 4.4 TiB / 4.4 TiB avail pgs: 1 active+clean io: recovery: 87 KiB/s, 0 objects/s progress: Global Recovery Event (0s) [............................]
到此,我们的集群部署就已经结束