Ceph 分布式存储 部署

Ceph 分布式存储 部署

Ceph 集群安装介绍

Ceph 集群安装方式

官方推荐部署方式

  • Cephadm:基于容器部署,支持 Octopus 及以后版本,部署完成后可通过命令行和图形界面进行ceph集群的管理。
  • Rook:基于 kubernetes 部署,支持 Nautilus 及以后版本,部署完成后可通过命令行和图形界面进行ceph集群的管理,同时可通过 kubernetes 对组件所在 pod 进行管理。

其他部署方式

  • ceph-ansible,通过ansible进行ceph部署
  • ceph-deploy,已经不再维护,不建议使用该方式部署
  • DeepSea,通过salt进行ceph部署
  • 手动部署

Ceph 集群 最小硬件规格

此处的最小硬件规格指的是在实际生产中的规格,实验手册中的规格会比此表中的规格小。

关于OSD的资源需注意:

  • 每增加一个osd服务,就需要增加列出的资源。
  • OSD的CPU资源最少是1核,后续根据带宽和IOPS进行调整,每200-500MB/s增加一核,或者每1000-3000IOPS增加一核。
  • OSD的内存可以选择2G-4G,可以实现基本功能,但是会有卡顿。

Ceph 服务端口

服务 端口 描述
MON 6789、 3300 用于Ceph集群内部通信端口
OSD 6800-7300 每个osd占用四个端口,分别用于通过public网络与客户端和MON通信、 通过cluster网络或public网络与其他OSD数据通信、通过cluster网络或 public进行心跳数据包交换,其中用于心跳通信的端口需两个
MDS 6800-7300 用于与元数据服务器通信
MGR 8443 用于以SSL的方式登录ceph的图形化页面
RESTful 管理模块 8003 用于以SSL的方式与RESTful管理模块通信
Prometheus 管理模块 9283 用于与ceph的Prometheus插件通信
Prometheus 告警管理 9093 用于与Prometheus的告警管理服务通信
Prometheus 节点导出器 9100 用于与Prometheus节点导出器进程通信
Grafana 服务器 3000 用于与Grafana服务通信
RGW 80 用于RADOSGW通信,如果client.rgw的配置为空, cephadm就使用默认 的80端口
Ceph iSCSI 网关 9287 用于与ceph iSCSI网关通信

说明:

  1. 所有端口都是TCP协议。
  2. 在实验手册中,为了降低安装难度,直接关闭了firewalld及SELinux。

Cephadm 简介

  • Cephadm 是一个ceph全生命周期管理工具, 通过"引导( bootstrapping ) " 可创建一个包含一个MON和一个MGR的单节点集群, 后续可通过自带的编排接口进行集群的扩容、 主机添加、 服务部署。

  • Cephadm 使用容器部署 Ceph,大大降低了部署 Ceph 集群的复杂性和包依赖性。

  • cephadm 软件包安装在集群第一个节点中,该节点充当引导节点。Cephadm 是部署新集群时启动的第一个守护程序,同时也是管理器守护程序 (MGR) 中的一个模块。

Cephadm 与其他服务交互

  • Cephadm 登录容器注册表来拉取 Ceph 镜像并在使用该镜像的节点上部署服务。

  • Cephadm 使用 SSH 连接,向集群添加新主机、添加存储或监控这些主机。

Cephadm 管理接口

Ceph 使用容器化部署,首先创建一个最小的集群,只有一个主机(引导节点)和两个守护进程(监视器和管理器守护进程)。

Ceph 提供两个管理接口:Ceph CLIDashboard GUI,用于配置 Ceph 守护进程和服务以及扩展或收缩集群。

cephadm 工具与 Ceph Manager 编排模块交互,Ceph Manager Orchestrator 再与其他组件交互:

Ceph CLI 接口

cephadm shell 命令启动一个容器化版本的 shell,容器中安装了所有必需的 Ceph 包。该命令应该只在引导节点中运行,因为在引导集群时只有该节点可以访问 /etc/ceph 中的管理密钥环。

实际情况,在集群中其他节点也可以执行,例如ceph1。

bash 复制代码
[root@ceph1 ~]# cephadm shell
Inferring fsid 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
Using recent ceph image quay.io/ceph/ceph@sha256:f15b41add2c01a65229b0db515d2dd57925636ea39678ccc682a49e2e9713d98
[ceph: root@ceph1 /]# 

还可以通过容器化的 shell 直接运行命令:cephadm shell -- command

bash 复制代码
[root@ceph1 ~]# cephadm shell -- ceph status
Inferring fsid 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
Using recent ceph image quay.io/ceph/ceph@sha256:f15b41add2c01a65229b0db515d2dd57925636ea39678ccc682a49e2e9713d98
  cluster:
    id:     2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph1.laogao.cloud,ceph2,ceph3 (age 12m)
    mgr: ceph2.oetbal(active, since 11m), standbys: ceph1.laogao.cloud.zoqmbt, ceph3.npaxvt
    osd: 9 osds: 9 up (since 12m), 9 in (since 3w)

  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   2.6 GiB used, 177 GiB / 180 GiB avail
    pgs:     1 active+clean

为了操作方便,可以直接在物理主机执行ceph命令,需要安装ceph-common软件包。

bash 复制代码
[root@ceph1 ~]# dnf install -y ceph-common
[root@ceph1 ~]# ceph status
Ceph Dashboard 接口

Ceph Dashboard GUI 是一个基于 Web 的应用程序,用于监视和管理集群。 Ceph Dashboard GUI 得到了增强,可通过此界面执行许多集群任务,比 Ceph CLI 更直观的方式提供集群信息。

与 Ceph CLI 一样,Dashboard GUI Web 是 ceph-mgr 守护进程的一个模块。 默认情况下,Ceph 在创建集群时将 Dashboard GUI 部署在引导节点,并使用 TCP 端口 8443。

Ceph Dashboard GUI 提供以下功能:

  • 用户和角色管理,用户可以创建具有多个权限和角色的不同用户帐户。
  • 单点登录,仪表板 GUI 允许通过外部身份提供者进行身份验证。
  • 审计,用户可以将仪表板配置为记录所有 REST API 请求。
  • 安全,默认情况下,仪表板使用 SSL/TLS 来保护所有 HTTP 连接。

Ceph Dashboard GUI 还实现了集群管理和监控功能:

  • 管理功能
    • 使用 CRUSH 地图查看集群层次结构
    • 启用、编辑和禁用管理器模块
    • 创建、删除和管理 OSD
    • 管理 iSCSI
    • 管理池
  • 监控功能
    • 检查整体集群健康状况
    • 查看集群中的主机及其服务
    • 查看日志
    • 查看集群警报
    • 检查集群容量

下图显示了仪表板 GUI 的状态屏幕,可以快速查看一些重要的集群参数,例如集群状态、集群中的主机数量或 OSD 数量。

Ceph 集群安装过程

Ceph 集群环境说明

部署方法:cephadm

操作系统:Centos Stream 8(最小化安装)

硬件配置:2 cpu、4G memory、1个系统盘+3个20G数据盘

本教材共使用7台虚拟机:

  • 客户端:client
  • 主集群:ceph1、ceph2、ceph3
  • 备集群:ceph4、ceph5、ceph6
主机名 IP 地址 角色
client.laogao.cloud 192.168.108.10 客户端节点
ceph1.laogao.cloud 192.168.108.11 主集群-ceph 节点
ceph2.laogao.cloud 192.168.108.12 主集群-ceph 节点
ceph3.laogao.cloud 192.168.108.13 主集群-ceph 节点
ceph4.laogao.cloud 192.168.108.14 备集群-ceph 节点
ceph5.laogao.cloud 192.168.108.15 备集群-ceph 节点
ceph6.laogao.cloud 192.168.108.16 备集群-ceph 节点

网络拓扑如下图所示:

准备虚拟机模板

基于CentOS-Stream-8-template模板克隆出ceph-template

根据实验硬件要求,更改ceph-template硬件配置。

bash 复制代码
# 1 配置主机名解析
[root@localhost ~]# cat >> /etc/hosts << EOF

###### ceph ######
192.168.108.10 client.laogao.cloud client
192.168.108.11 ceph1.laogao.cloud ceph1
192.168.108.12 ceph2.laogao.cloud ceph2
192.168.108.13 ceph3.laogao.cloud ceph3
192.168.108.14 ceph4.laogao.cloud ceph4
192.168.108.15 ceph5.laogao.cloud ceph5
192.168.108.16 ceph6.laogao.cloud ceph6
EOF

# 2 关闭 SELinux
[root@localhost ~]# sed -ri 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

# 3 关闭防火墙
[root@localhost ~]# systemctl disable firewalld --now

# 4 配置yum仓库
[root@localhost ~]# cat << 'EOF' > /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph 
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/storage/x86_64/ceph-pacific
enabled=1
gpgcheck=0
EOF

# 5 安装基础软件包
[root@localhost ~]# dnf install -y bash-completion vim lrzsz unzip rsync sshpass tar

# 6 配置时间同步
[root@localhost ~]# dnf install -y chrony
[root@localhost ~]# systemctl enable chronyd --now

# 7 安装 cephadm
[root@localhost ~]# dnf install -y cephadm
[root@localhost ~]# cephadm --help
usage: cephadm [-h] [--image IMAGE] [--docker] [--data-dir DATA_DIR]
               [--log-dir LOG_DIR] [--logrotate-dir LOGROTATE_DIR]
               [--sysctl-dir SYSCTL_DIR] [--unit-dir UNIT_DIR] [--verbose]
               [--timeout TIMEOUT] [--retry RETRY] [--env ENV]
               [--no-container-init]
               {version,pull,inspect-image,ls,list-networks,adopt,rm-daemon,rm-cluster,run,shell,enter,ceph-volume,zap-osds,unit,logs,bootstrap,deploy,check-host,prepare-host,add-repo,rm-repo,install,registry-login,gather-facts,exporter,host-maintenance,disk-rescan}
               ...

Bootstrap Ceph daemons with systemd and containers.

positional arguments:
  {version,pull,inspect-image,ls,list-networks,adopt,rm-daemon,rm-cluster,run,shell,enter,ceph-volume,zap-osds,unit,logs,bootstrap,deploy,check-host,prepare-host,add-repo,rm-repo,install,registry-login,gather-facts,exporter,host-maintenance,disk-rescan}
                        sub-command
    version             get ceph version from container
    pull                pull the default container image
    inspect-image       inspect local container image
    ls                  list daemon instances on this host
......

# 安装 cephadm 的时候,会自动安装官方推荐的容器引擎 podman
[root@localhost ~]# rpm -q podman
podman-4.9.4-0.1.module_el8+971+3d3df00d.x86_64

# 8 提前下载镜像
[root@localhost ~]# podman pull quay.io/ceph/ceph:v16  
[root@localhost ~]# podman pull quay.io/ceph/ceph-grafana:8.3.5
[root@localhost ~]# podman pull quay.io/prometheus/node-exporter:v1.3.1
[root@localhost ~]# podman pull quay.io/prometheus/alertmanager:v0.23.0
[root@localhost ~]# podman pull quay.io/prometheus/prometheus:v2.33.4

#  准备配置主机脚本
[root@localhost ~]# cat > /usr/local/bin/sethost <<'EOF'
#/bin/bash
hostnamectl set-hostname ceph$1.laogao.cloud
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.1$1/24 ipv4.gateway 192.168.108.2 ipv4.dns 192.168.108.2
init 0
EOF

[root@localhost ~]# chmod +x /usr/local/bin/sethost

关机虚拟机,并打快照。

准备集群节点

使用完全克隆方式,克隆出其他虚拟机,并配置主机名和IP地址。

bash 复制代码
#ceph1到ceph6按以下修改
[root@localhost ~]# sethost 1     #ceph1用1,ceph2到ceph6分别为2-6

#client做以下修改
[root@localhost ~]# hostnamectl set-hostname client.laogao.cloud
[root@localhost ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.10/24 ipv4x.gateway 192.168.108.2 ipv4.dns 192.168.108.2

Ceph 集群初始化

Ceph 初始化

bash 复制代码
    [root@ceph1 ~]# cephadm bootstrap --mon-ip 192.168.108.11 --allow-fqdn-hostname --initial-dashboard-user admin --initial-dashboard-password laogao@123 --dashboard-password-noupdate

选项说明

  • --mon-ip 192.168.108.11,指定 monitor ip。
  • --allow-fqdn-hostname,指定允许使用长名称。当主机名是长名称时,初始化时必须使用该参数。
  • --initial-dashboard-user admin,指定 Web UI 登录的管理员账户。
  • --initial-dashboard-password laogao@123,指定 Web UI 登录的管理员账户对应密码。
  • --dashboard-password-noupdate,指定不要更新 Web UI 登录密码。

输出信息如下

yaml 复制代码
Verifying podman|docker is present...
Verifying lvm2 is present...
Verifying time synchronization is in place...
Unit chronyd.service is enabled and running
Repeating the final host check...
podman (/usr/bin/podman) version 4.9.4 is present
systemctl is present
lvcreate is present
Unit chronyd.service is enabled and running
Host looks OK
Cluster fsid: 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
Verifying IP 192.168.108.11 port 3300 ...
Verifying IP 192.168.108.11 port 6789 ...
Mon IP `192.168.108.11` is in CIDR network `192.168.108.0/24`
Mon IP `192.168.108.11` is in CIDR network `192.168.108.0/24`
Internal network (--cluster-network) has not been provided, OSD replication will default to the public_network
Pulling container image quay.io/ceph/ceph:v16...
Ceph version: ceph version 16.2.15 (618f440892089921c3e944a991122ddc44e60516) pacific (stable)
Extracting ceph user uid/gid from container image...
Creating initial keys...
Creating initial monmap...
Creating mon...
Waiting for mon to start...
Waiting for mon...
mon is available
Assimilating anything we can from ceph.conf...
Generating new minimal ceph.conf...
Restarting the monitor...
Setting public_network to 192.168.108.0/24 in mon config section
Wrote config to /etc/ceph/ceph.conf
Wrote keyring to /etc/ceph/ceph.client.admin.keyring
Creating mgr...
Verifying port 9283 ...
Waiting for mgr to start...
Waiting for mgr...
mgr not available, waiting (1/15)...
mgr not available, waiting (2/15)...
mgr not available, waiting (3/15)...
mgr is available
Enabling cephadm module...
Waiting for the mgr to restart...
Waiting for mgr epoch 5...
mgr epoch 5 is available
Setting orchestrator backend to cephadm...
Generating ssh key...
Wrote public SSH key to /etc/ceph/ceph.pub
Adding key to root@localhost authorized_keys...
Adding host ceph1.laogao.cloud...
Deploying mon service with default placement...
Deploying mgr service with default placement...
Deploying crash service with default placement...
Deploying prometheus service with default placement...
Deploying grafana service with default placement...
Deploying node-exporter service with default placement...
Deploying alertmanager service with default placement...
Enabling the dashboard module...
Waiting for the mgr to restart...
Waiting for mgr epoch 9...
mgr epoch 9 is available
Generating a dashboard self-signed certificate...
Creating initial admin user...
Fetching dashboard port number...
Ceph Dashboard is now available at:

             URL: https://ceph1.laogao.cloud:8443/
            User: admin
        Password: laogao@123

Enabling client.admin keyring and conf on hosts with "admin" label
Enabling autotune for osd_memory_target
You can access the Ceph CLI as following in case of multi-cluster or non-default config:

        sudo /usr/sbin/cephadm shell --fsid 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

Or, if you are only running a single cluster on this host:

        sudo /usr/sbin/cephadm shell

Please consider enabling telemetry to help improve Ceph:

        ceph telemetry on

For more information see:

        https://docs.ceph.com/en/pacific/mgr/telemetry/

Bootstrap complete.

输出信息说明

Dashboard 登录信息
yaml 复制代码
Ceph Dashboard is now available at:

             URL: https://ceph1.laogao.cloud:8443/
            User: admin
        Password: laogao@123
客户端访问方法
bash 复制代码
Enabling client.admin keyring and conf on hosts with "admin" label
Enabling autotune for osd_memory_target
You can access the Ceph CLI as following in case of multi-cluster or non-default config:

        sudo /usr/sbin/cephadm shell --fsid 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

Or, if you are only running a single cluster on this host:

        sudo /usr/sbin/cephadm shell
启用遥测

发送匿名数据给社区,以改善Ceph。

yaml 复制代码
Please consider enabling telemetry to help improve Ceph:

        ceph telemetry on

访问 dashboard

登录

添加节点

添加节点过程

  1. Ceph采用共享秘钥进行身份验证, 使用命令"ceph cephadm get-pub-key" 获取到主机接入集群时所需的ssh 公钥。
  2. 获取到公钥后, 使用该公钥实现对节点的免密ssh管理。
  3. 使用命令"ceph orch host add" 添加主机。
bash 复制代码
# 为了配置方便,我们在ceph1上安装ceph客户端工具 ceph-common
[root@ceph1 ~]# dnf install -y ceph-common

# 获取集群公钥
[root@ceph1 ~]# ceph cephadm get-pub-key > ~/ceph.pub

# 推送公钥到其他节点
[root@ceph1 ~]# ssh-copy-id -f -i ~/ceph.pub root@ceph2.laogao.cloud
[root@ceph1 ~]# ssh-copy-id -f -i ~/ceph.pub root@ceph3.laogao.cloud

# 添加节点
[root@ceph1 ~]# ceph orch host add ceph2.laogao.cloud
Added host 'ceph2.laogao.cloud' with addr '192.168.108.12'
[root@ceph1 ~]# ceph orch host add ceph3.laogao.cloud
Added host 'ceph3.laogao.cloud' with addr '192.168.108.13'

[root@ceph1 ~]# ceph orch host ls
HOST                ADDR            LABELS  STATUS
ceph1.laogao.cloud  192.168.108.11  _admin
ceph2.laogao.cloud  192.168.108.12
ceph3.laogao.cloud  192.168.108.13
3 hosts in cluster

# 等待自动部署服务到其他节点,部署完成后效果如下:
[root@ceph1 ~]# ceph orch ls
NAME           PORTS        RUNNING  REFRESHED  AGE  PLACEMENT
alertmanager   ?:9093,9094      1/1  8m ago     9m   count:1
crash                           3/3  8m ago     9m   *
grafana        ?:3000           1/1  8m ago     9m   count:1
mgr                             2/2  8m ago     9m   count:2
mon                             3/5  8m ago     9m   count:5
node-exporter  ?:9100           3/3  8m ago     9m   *
prometheus     ?:9095           1/1  8m ago     9m   count:1
# crash 3/3个
# mgr 2/2个
# mon 3/5个
# node-exporter 3/3个

部署 mon 和 mgr

bash 复制代码
# 禁用 mon 和 mgr 服务的自动扩展功能
[root@ceph1 ~]# ceph orch apply mon --unmanaged=true
[root@ceph1 ~]# ceph orch apply mgr --unmanaged=true
[root@ceph1 ~]# ceph orch ls
NAME           PORTS        RUNNING  REFRESHED  AGE  PLACEMENT
alertmanager   ?:9093,9094      1/1  56s ago    12m  count:1
crash                           3/3  57s ago    12m  *
grafana        ?:3000           1/1  56s ago    12m  count:1
mgr                             2/2  57s ago    3s   <unmanaged>
mon                             3/5  57s ago    8s   <unmanaged>
node-exporter  ?:9100           3/3  57s ago    12m  *
prometheus     ?:9095           1/1  56s ago    12m  count:1
# mon 和 mgr 的 PLACEMENT 状态为 <unmanaged>

# 配置主机标签,ceph2 和 ceph3 添加标签" _admin"
[root@ceph1 ~]# ceph orch host label add ceph2.laogao.cloud _admin
Added label _admin to host ceph2.laogao.cloud
[root@ceph1 ~]# ceph orch host label add ceph3.laogao.cloud _admin
Added label _admin to host ceph3.laogao.cloud
[root@ceph1 ~]# ceph orch host ls
HOST                ADDR            LABELS  STATUS
ceph1.laogao.cloud  192.168.108.11  _admin
ceph2.laogao.cloud  192.168.108.12  _admin
ceph3.laogao.cloud  192.168.108.13  _admin
3 hosts in cluster

# 将 mon 和 mgr 组件部署到具有_admin标签的节点上
[root@ceph1 ~]# ceph orch apply mon --placement="label:_admin"
Scheduled mon update...
[root@ceph1 ~]# ceph orch apply mgr --placement="label:_admin"
Scheduled mgr update...
#观察现象
[root@ceph1 ~]# ceph orch ls | egrep 'mon|mgr'
mgr                             3/3  2m ago     14s  label:_admin
mon                             3/3  2m ago     28s  label:_admin

[root@ceph1 ~]# ceph orch ps | egrep 'mon|mgr'

部署 OSD

bash 复制代码
# 将所有主机上闲置的硬盘添加为 OSD
[root@ceph1 ~]# ceph orch apply osd --all-available-devices
Scheduled osd.all-available-devices update...

验证

查看集群中部署的服务
bash 复制代码
[root@ceph1 ~]# ceph orch ls
NAME                       PORTS        RUNNING  REFRESHED  AGE  PLACEMENT
alertmanager               ?:9093,9094      1/1  3s ago     15m  count:1
crash                                       3/3  4s ago     15m  *
grafana                    ?:3000           1/1  3s ago     15m  count:1
mgr                                         3/3  4s ago     2m   label:_admin
mon                                         3/3  4s ago     2m   label:_admin
node-exporter              ?:9100           3/3  4s ago     15m  *
osd.all-available-devices                     9  4s ago     25s  *
prometheus                 ?:9095           1/1  3s ago     15m  count:1

部分输出说明:

  • RUNNING:服务的运行状态,前一个数字表示当前运行的服务数量,后一个数字表示系统根据策略或配置推荐的服务部署数量。
  • PLACEMENT :为服务编排器部署服务时提供的参数,编排器可根据该参数判断服务所部署的节点,常见的 placement 包括:
    • 具体节点名称,例如:--placement=ceph2
    • 标签,例如: --placement="label:mylabel"
    • 数量,例如: --placement="3 host1 host2 host3"
    • unmanaged,表示服务不自动部署。通过设置--unmanagedtrue打开该功能,设置为false关闭该功能>
查看集群状态
bash 复制代码
[root@ceph1 ~]# ceph -s
  cluster:
    id:     2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph1.laogao.cloud,ceph2,ceph3 (age 6m)
    mgr: ceph1.laogao.cloud.zoqmbt(active, since 15m), standbys: ceph2.oetbal, ceph3.npaxvt
    osd: 9 osds: 9 up (since 30s), 9 in (since 45s)

  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   2.6 GiB used, 177 GiB / 180 GiB avail
    pgs:     1 active+clean

命令ceph -s对应的长命令为 ceph --status

输出包含:MON、 MGR及OSD的状态,包括数量、位置及运行时间。

集群的健康状态可分为:

  • HEALTH_OK:表示健康状态良好
  • HEALTH_WARN:表示集群存在告警,需进行排查处理后,可转为HEALTH_OK
  • HEALTH_ERR:表示集群存在比较严重的错误,需要立即处理
查看集群 osd 结构
bash 复制代码
[root@ceph1 ~]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         0.17537  root default
-3         0.05846      host ceph1
 0    hdd  0.01949          osd.0       up   1.00000  1.00000
 3    hdd  0.01949          osd.3       up   1.00000  1.00000
 6    hdd  0.01949          osd.6       up   1.00000  1.00000
-5         0.05846      host ceph2
 2    hdd  0.01949          osd.2       up   1.00000  1.00000
 4    hdd  0.01949          osd.4       up   1.00000  1.00000
 7    hdd  0.01949          osd.7       up   1.00000  1.00000
-7         0.05846      host ceph3
 1    hdd  0.01949          osd.1       up   1.00000  1.00000
 5    hdd  0.01949          osd.5       up   1.00000  1.00000
 8    hdd  0.01949          osd.8       up   1.00000  1.00000
查看集群组件

集群中运行的主要组件:

  • mgr,ceph 管理程序
  • monitor,ceph 监视器
  • osd,ceph 对象存储进程
  • rgw,ceph 对象存储网关

其他组件:

  • crash,崩溃数据收集模块
  • prometheus,监控组件
  • grafana,监控数据展示dashboard
  • alertmanager,prometheus告警组件
  • node_exporter,prometheus节点数据收集组件

查询出服务的具体情况后, 可对指定服务进一步操作:

  • 使用命令ceph orch daemon start|stop|restart|redeploy|reconfig <service_name>对指定服务进行启动、停止、重启等操作。
  • 使用命令ceph orch daemon rm <service_name> [--force]可删除指定服务。

!TIP

这时关闭所有ceph存储节点。并打快照,便于后续做实验。

Ceph 集群组件管理

ceph orch 命令

ceph orch 命令与编排器模块交互,编排器模块是ceph-mgr的插件,与外部编排服务交互。

ceph orch 命令支持多个外部编排器:

  • host:物理节点
  • service type:服务类型,如nfs, mds, osd, mon, rgw, mgr, iscsi
  • Service:逻辑服务
  • Daemon:进程

cephadm使用的特殊标签:

  • _no_schedule:不在此类标签的节点上部署或调度任何服务。
  • _no_autotune_memory:不对此类标签的节点进行内存调优。
  • _admin:自动将ceph.conf和ceph.client.admin.keyring发送到此类标签的节点上。

禁用服务自动扩展

Ceph 集群服务自动扩展功能,会自动部署ceph组件到存储节点。如果想手动管理 ceph 服务,则需要禁用 ceph 服务自动扩展功能。

bash 复制代码
# 查看 mon 服务
[root@ceph1 ~]# ceph orch ls mon
NAME  PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
mon              3/3  90s ago    8m   label:_admin

# 禁用 mon 服务自动扩展
[root@ceph1 ~]# ceph orch apply mon --unmanaged=true
[root@ceph1 ~]# ceph orch ls mon
NAME  PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
mon              3/5  118s ago   4s   <unmanaged>

# 启用 mon 服务自动扩展
[root@ceph1 ~]# ceph orch apply mon --unmanaged=false
[root@ceph1 ~]# ceph orch ls mon
NAME  PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
mon              3/5  2m ago     4s   count:5

# 通过标签部署 mon 服务
[root@ceph1 ~]# ceph orch apply mon --placement="label:_admin"
Scheduled mon update...
[root@ceph1 ~]# ceph orch ls mon
NAME  PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
mon              3/3  3m ago     15s  label:_admin

删除服务

以 crash 服务为例。

bash 复制代码
# 禁用服务自动扩展
[root@ceph1 ~]# ceph orch apply crash --unmanaged=true
[root@ceph1 ~]# ceph orch ls crash
NAME   PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
crash             3/3  3m ago     5s   <unmanaged>

# 查看服务中实例
[root@ceph1 ~]# ceph orch ps | grep crash
crash.ceph1   ceph1.laogao.cloud   running (5m)   4m ago  24m 6639k   -  16.2.15  3c4eff6082ae  5aea4634442b
crash.ceph2   ceph2.laogao.cloud   running (5m)   4m ago  15m 6639k   -  16.2.15  3c4eff6082ae  51d5f1e1d75c
crash.ceph3   ceph3.laogao.cloud   running (4m)   4m ago  15m 6647k   -  16.2.15  3c4eff6082ae  406b2a7b9d93

# 删除特定实例
[root@ceph1 ~]# ceph orch daemon rm crash.ceph1
Removed crash.ceph1 from host 'ceph1.laogao.cloud'
[root@ceph1 ~]# ceph orch ps | grep crash
crash.ceph2   ceph2.laogao.cloud   running (9m)   8m ago  19m 6639k   -  16.2.15  3c4eff6082ae  51d5f1e1d75c
crash.ceph3   ceph3.laogao.cloud   running (8m)   8m ago  19m 6647k   -  16.2.15  3c4eff6082ae  406b2a7b9d93

# 删除服务
[root@ceph1 ~]# ceph orch rm crash
Removed service crash
[root@ceph1 ~]# ceph orch ls crash                  #这里需要快点查看
NAME   PORTS  RUNNING  REFRESHED   AGE  PLACEMENT    
crash             1/3  <deleting>  50s  <unmanaged>  
[root@ceph1 ~]# ceph orch ls crash
No services reported

部署服务

使用 ceph 的编排器部署服务, 有两种方式:

  • apply 方式:定义了服务状态,由编排器根据参数自动寻找合适的节点进行服务部署。

    语法:ceph orch apply <service_type> [--placement=<placement_string>] [--unmanaged]

    例如:ceph orch apply crashceph orch apply mon --placement="label:_admin"

  • daemon add 方式:根据命令中的参数,直接进行服务部署。

    语法:ceph orch daemon add <daemon_type> <placement>

命令orch apply osd [--all-available-devices]将节点上的所有可用设备配置为OSD。

删除 OSD

确定 OSD 和设备关系
bash 复制代码
[root@ceph1 ~]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         0.17537  root default
-3         0.05846      host ceph1                                       #主机ceph1下的硬盘  
 0    hdd  0.01949          osd.0       up   1.00000  1.00000            #看不出来osd.0对应哪块磁盘
 3    hdd  0.01949          osd.3       up   1.00000  1.00000
 6    hdd  0.01949          osd.6       up   1.00000  1.00000
-5         0.05846      host ceph2
 2    hdd  0.01949          osd.2       up   1.00000  1.00000
 4    hdd  0.01949          osd.4       up   1.00000  1.00000
 7    hdd  0.01949          osd.7       up   1.00000  1.00000
-7         0.05846      host ceph3
 1    hdd  0.01949          osd.1       up   1.00000  1.00000
 5    hdd  0.01949          osd.5       up   1.00000  1.00000
 8    hdd  0.01949          osd.8       up   1.00000  1.00000

# 获取集群id
[root@ceph1 ~]# ceph -s | grep id
    id:     2faf683a-7cbf-11f0-b5ba-000c29e0ad0e

# 登录到ceph1上确认osd.0使用的块设备
[root@ceph1 ~]# ls -l /var/lib/ceph/2faf683a-7cbf-11f0-b5ba-000c29e0ad0e/osd.0/block
lrwxrwxrwx 1 ceph ceph 93 Aug 19 14:01 /var/lib/ceph/2faf683a-7cbf-11f0-b5ba-000c29e0ad0e/osd.0/block -> /dev/ceph-c92942fb-f959-4255-b8e6-751fab70fa79/osd-block-2ed79b2f-d825-4829-b4b0-59879d2ad99c

# 59879d2ad99c是块设备名称最后一串字符
[root@ceph1 ~]# lsblk | grep -B1 59879d2ad99c
sdb                                                                                8:16   0    20G  0 disk
└─ceph--c92942fb--f959--4255--b8e6--751fab70fa79-osd--block--2ed79b2f--d825--4829--b4b0--59879d2ad99c 253:4    0    20G  0 lvm
# 确认osd.0对应sdb

脚本实现

bash 复制代码
[root@ceph1 ~]# vim /usr/local/bin/show-osd-device
bash 复制代码
#!/bin/bash
# author laogao
# date 2025-08-19
# Description 确认 osd 和 device 之间对应关系
# usage 在ceph node 上执行

cluster_id=$(ceph -s|grep id |awk '{print $2}')

cd /var/lib/ceph/${cluster_id}
for osd in osd.*
do
device_id=$(ls -l $osd/block | awk -F '-' '{print $NF}')
	device=/dev/$(lsblk |grep -B1 ${device_id} |grep -v ${device_id} | awk '{print $1}')
	echo $osd : $device
done
bash 复制代码
[root@ceph1 ~]# chmod +x /usr/local/bin/show-osd-device

执行效果

bash 复制代码
[root@ceph1 ~]# show-osd-device
osd.0 : /dev/sdb
osd.3 : /dev/sdc
osd.6 : /dev/sdd
使用编排删除

示例:删除 osd.0

bash 复制代码
# 禁用 osd 服务自动扩展
[root@ceph1 ~]# ceph orch apply osd --all-available-devices --unmanaged=true
[root@ceph1 ~]# ceph orch ls osd
NAME                       PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
osd.all-available-devices               9  7m ago     6s   <unmanaged>

# 删除 osd.0
[root@ceph1 ~]# ceph orch osd rm 0
Scheduled OSD(s) for removal

# 删除device上数据
[root@ceph1 ~]# ceph orch device zap ceph1.laogao.cloud /dev/sdb --force    #看osd0管理的是/dev/sdb还是啥
zap successful for /dev/sdb on ceph1.laogao.cloud

# 确认结果
[root@ceph1 ~]# ceph orch device ls
[root@ceph1 ~]# ceph orch device ls | grep ceph1.*sdb
ceph1.laogao.cloud  /dev/sdb  hdd                                          20.0G  Yes        72s ago  

[root@ceph1 ~]# lsblk
[root@ceph1 ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  20G  0 disk

# 添加回来
[root@ceph1 ~]# ceph orch apply osd --all-available-devices
#RUNNING重新变为9
[root@ceph1 ~]# ceph orch ls osd 
NAME                       PORTS  RUNNING  REFRESHED  AGE  PLACEMENT
osd.all-available-devices               9  6m ago     29s  *
手动删除过程
bash 复制代码
# 停止 ceph1 中的 osd
[root@ceph1 ~]# ceph orch daemon stop osd.0
Scheduled to stop osd.0 on host 'ceph1.laogao.cloud'

[root@ceph1 ~]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         0.17537  root default
-3         0.05846      host ceph1
 0    hdd  0.01949          osd.0     down   1.00000  1.00000         #查看osd.0 down了
 3    hdd  0.01949          osd.3       up   1.00000  1.00000
 6    hdd  0.01949          osd.6       up   1.00000  1.00000
-5         0.05846      host ceph2
 2    hdd  0.01949          osd.2       up   1.00000  1.00000
 4    hdd  0.01949          osd.4       up   1.00000  1.00000
 7    hdd  0.01949          osd.7       up   1.00000  1.00000
-7         0.05846      host ceph3
 1    hdd  0.01949          osd.1       up   1.00000  1.00000
 5    hdd  0.01949          osd.5       up   1.00000  1.00000
 8    hdd  0.01949          osd.8       up   1.00000  1.00000


# 待 osd 停止后,删除 osd 进程  
[root@ceph1 ~]# ceph orch daemon rm osd.0 --force         #可以ps aux|grep osd.0观察
Removed osd.0 from host 'ceph1.laogao.cloud'

# 从 crush map 中剔除 osd 
[root@ceph1 ~]# ceph osd out 0
marked out osd.0.

# 从 crush map 中删除 osd
[root@ceph1 ~]# ceph osd crush rm osd.0
removed item id 0 name 'osd.0' from crush map

# 执行下面的命令将会自动标记为out,并且从crush map中删除,最后删除osd相关文件。
[root@ceph1 ~]# ceph osd rm 0
removed osd.0

# 删除device上数据
[root@ceph1 ~]# ceph orch device zap ceph1.laogao.cloud /dev/sdb --force
zap successful for /dev/sdb on ceph1.laogao.cloud

# 确认结果
[root@ceph1 ~]# ceph orch device ls|grep 'ceph1.*sdb'
ceph1.laogao.cloud  /dev/sdb  hdd                                          20.0G  Yes        10s ago

# 添加回来
[root@ceph1 ~]# ceph orch apply osd --all-available-devices

删除主机

从集群中删除主机流程:

  1. 禁用集群所有服务自动扩展
  2. 查看待删除主机上当前运行的服务
  3. 停止待删除主机上的所有服务
  4. 删除主机上的所有服务
  5. 删除osd在CRUSH中的映射
  6. 擦除osd盘中的数据
  7. 从集群中删除主机

示例:删除 ceph2

首先,禁用集群中所有ceph服务自动扩展,进制自动部署osd。

bash 复制代码
[root@ceph1 ~]# for service in $(ceph orch ls |grep -v -e NAME -e osd| awk '{print $1}');do ceph orch apply $service --unmanaged=true;done
[root@ceph1 ~]# ceph orch apply osd --all-available-devices --unmanaged=true

其次,删除主机上运行的服务。

bash 复制代码
# 查看ceph2上运行的daemon
[root@ceph1 ~]# ceph orch ps |grep ceph2 |awk '{print $1}'
crash.ceph2
mgr.ceph2.oetbal
mon.ceph2
node-exporter.ceph2
osd.2
osd.4
osd.7

# 删除相应 daemon
[root@ceph1 ~]# for daemon in $(ceph orch ps |grep ceph2 |awk '{print $1}');do ceph orch daemon rm $daemon --force;done

# 手动清理crush信息
[root@ceph1 ~]# ceph osd crush rm osd.2
[root@ceph1 ~]# ceph osd crush rm osd.4
[root@ceph1 ~]# ceph osd crush rm osd.7
[root@ceph1 ~]# ceph osd crush rm ceph2
[root@ceph1 ~]# ceph osd rm 2 4 7

# 清理磁盘数据
[root@ceph1 ~]# ceph orch device zap ceph2.laogao.cloud /dev/sdb --force
[root@ceph1 ~]# ceph orch device zap ceph2.laogao.cloud /dev/sdc --force
[root@ceph1 ~]# ceph orch device zap ceph2.laogao.cloud /dev/sdd --force

然后,删除主机。

bash 复制代码
[root@ceph1 ~]# ceph orch host rm ceph2

[root@ceph1 ~]# ceph orch host ls             #查看现象ceph2被移除
HOST                ADDR            LABELS  STATUS
ceph1.laogao.cloud  192.168.108.11  _admin
ceph3.laogao.cloud  192.168.108.13  _admin
2 hosts in cluster

最后,删除ceph2中相应ceph遗留文件。

bash 复制代码
[root@ceph2 ~]# rm -rf /var/lib/ceph
[root@ceph2 ~]# rm -rf /etc/ceph /etc/systemd/system/ceph*
[root@ceph2 ~]# rm -rf /var/log/ceph

实验完成后,恢复环境。

ps |grep ceph2 |awk '{print 1}');do ceph orch daemon rm daemon --force;done

手动清理crush信息

root@ceph1 \~\]# ceph osd crush rm osd.2 \[root@ceph1 \~\]# ceph osd crush rm osd.4 \[root@ceph1 \~\]# ceph osd crush rm osd.7 \[root@ceph1 \~\]# ceph osd crush rm ceph2 \[root@ceph1 \~\]# ceph osd rm 2 4 7 ## 清理磁盘数据 \[root@ceph1 \~\]# ceph orch device zap ceph2.laogao.cloud /dev/sdb --force \[root@ceph1 \~\]# ceph orch device zap ceph2.laogao.cloud /dev/sdc --force \[root@ceph1 \~\]# ceph orch device zap ceph2.laogao.cloud /dev/sdd --force **然后**,删除主机。 ```bash [root@ceph1 ~]# ceph orch host rm ceph2 [root@ceph1 ~]# ceph orch host ls #查看现象ceph2被移除 HOST ADDR LABELS STATUS ceph1.laogao.cloud 192.168.108.11 _admin ceph3.laogao.cloud 192.168.108.13 _admin 2 hosts in cluster **最后**,删除ceph2中相应ceph遗留文件。 ```bash [root@ceph2 ~]# rm -rf /var/lib/ceph [root@ceph2 ~]# rm -rf /etc/ceph /etc/systemd/system/ceph* [root@ceph2 ~]# rm -rf /var/log/ceph ``` 实验完成后,恢复环境。 **恢复环境-还原快照**

相关推荐
滴滴答答哒1 小时前
.NET Core 基于 AOP + Polly 实现数据库死锁自动重试
数据库·.netcore·sqlsugar
郭龙_Jack1 小时前
跨境电商 平台 - ERP - 内部子系统 交互方式总图
分布式·教育电商
WUYOUGYLU1 小时前
云服务器怎么选、怎么用,才不花冤枉钱
运维·服务器
曹牧1 小时前
Nginx 504
运维·nginx
喝醉酒的小白1 小时前
Kafka 集群应急故障排查手册
分布式·kafka
无籽西瓜a1 小时前
【西瓜带你学Kafka | 第八期】 Kafka的主从同步、消息可靠性、流处理与顺序消费(文含图解)
java·分布式·后端·kafka·消息队列·mq
曦夜日长1 小时前
Linux系统篇,开发工具(五):git的基本使用和浅层认识
linux·运维·服务器
qqVHU1 小时前
kafka笔记
笔记·分布式·kafka
Harm灬小海1 小时前
【云计算学习之路】学习Centos7系统-ROOT密码重置方法
linux·运维·服务器·学习·云计算