Ceph 集群配置管理完整指南

Ceph 分布式存储 集群配置

摘要 :本文全面介绍了 Ceph 分布式存储集群的配置管理。首先概述了 Ceph 配置的多种来源(编译默认值、集中配置数据库、配置文件等)及其生效优先级。详细讲解了集群配置文件的格式、配置部分、实例设置和元变量使用。重点介绍了集中配置数据库的管理命令,包括 ceph config lsceph config setceph config getceph config log 等核心操作。同时涵盖了运行时配置覆盖的两种方式:ceph tell 命令和 ceph daemon 命令,并对比了它们的特性差异。文章还深入讲解了监控器(MON)的配置与管理,包括监控器仲裁、映射分析和集中配置数据库维护。最后简要介绍了集群网络配置,包括公共网络与集群网络的分离、IPv6 支持和网络安全设置。通过命令行示例和 Web UI 操作演示,为 Ceph 集群管理员提供了完整的配置管理指南。

管理集群配置

Ceph 集群配置概述

Ceph 配置选项具有唯一名称,该名称由下划线连接的小写字符组成。有些配置选项会包含短划线(中横杠)或空格字符。推荐做法:使用下划线。

Ceph 守护进程会从以下某个来源访问其配置:

  • 编译中的默认值
  • 集中配置数据库
  • 存储在本地主机上的配置文件
  • 环境变量
  • 命令行参数
  • 运行时覆盖

当存在多个设置源时,配置生效原则:

  • 较新设置将覆盖较早设置源中的设置。
  • 配置文件会在启动时配置守护进程。
  • 配置文件设置会覆盖存储在中央数据库中的设置。
  • 监控器 (MON) 节点管理集中配置数据库。

生效过程:

  1. 启动时,Ceph 守护进程解析命令行选项、环境变量和本地集群配置文件提供的配置选项。
  2. 然后,守护进程会联系 MON 集群来检索存储在集中配置数据库中的配置选项。

注意:Ceph 存储优先使用集中配置数据库中配置,弃用 ceph.conf 集群配置文件。

修改集群配置文件

Ceph会去以下目录中查找集群相关配置文件:

  • CEPH_CONF 环境变量中包含的路径
  • -c path/path:由命令行参数"-c"指定的路径
  • ./$cluster.conf
  • ~/.ceph/$cluster.conf
  • /etc/ceph/$cluster.conf,默认位置。

每个 Ceph 节点都会存储一个本地配置文件,默认位置是/etc/ceph/ceph.conf 。 cephadm 工具会使用最小选项集创建初始 Ceph 配置文件。

配置文件采用 INI 文件格式,其中内容涵盖 Ceph 守护进程和客户端配置。每个部分都使用 name 标头定义的名称,以及一个或多个键值对参数。

bash 复制代码
[name]
parameter1 = value1
parameter2 = value2

使用井号 (#) 或分号 (😉 禁用设置或添加注释。

在引导集群时,可以借助集群配置文件,自定义引导集群。

示例:

bash 复制代码
# cephadm bootstrap --config ceph-config.yaml
配置部分

Ceph 使用所应用的守护进程或客户端的部分,将配置选项分组,确定是存储在配置文件中还是存储在配置数据库中。

  • global 部分,存储所有守护进程(包括客户端)共有的一般配置,可为单个守护进程或客户端创建调用部分来覆盖 global 参数。
  • mon 部分,存储监控器 (MON) 的配置。
  • osd 部分,存储 OSD 守护进程的配置。
  • mgr 部分,存储管理器 (MGR) 的配置。
  • mds 部分,存储元数据服务器 (MDS) 的配置。
  • client 部分,存储应用到所有 Ceph 客户客户端的配置。
    良好的示例文件参见 /usr/share/doc/ceph/sample.ceph.conf ,该文件由 ceph-common 软件包提供。
实例设置

实例设置适用于特定守护进程,名称格式为:daemon-type.instance-ID

bash 复制代码
[mon]
# Settings for all mon daemons

[mon.ceph1]
# Settings that apply to the specific MON daemon running on ceph1

同样的名称还适用于 osdmgrmdsclient 部分。

  • OSD 守护进程的实例 ID 始终为数字,例如 osd.0
  • 客户端的实例 ID 是有效的用户名,例如 client.operator3
元变量

元变量是由 Ceph 定义的变量。用户可使用它们来简化配置。

  • $cluster,Ceph 存储 5 集群的名称。默认集群名称为 ceph。
  • $type,守护进程类型,如监控器的值为 mon。OSD 使用 osd,元数据服务器使用 mds,管理器使用 mgr,客户端软件使用 client。
  • id,守护进程实例 ID。对于此变量,ceph1 上监控器的值为 ceph1。osd.1 的 id 值为 1 ,客户端应用的值为用户名。
  • $name,守护进程名称和实例 ID。此变量是 type.type.type.id 的简写。
  • $host,运行守护进程的主机的名称。
bash 复制代码
## Metavariables
# $cluster
; Expands to the Ceph Storage Cluster name.
; Useful when running multiple Ceph Storage Clusters on the same hardware.
; Example: /etc/ceph/$cluster.keyring
; (Default: ceph)

# $type
; Expands to one of mds, osd, or mon, depending on the type of the daemon.
; Example: /var/lib/ceph/$type

# $id
; Expands to the daemon identifier.
; For osd.0, this would be 0; for mds.a, it would be a.
; Example: /var/lib/ceph/$type/$cluster-$id

# $host
; Expands to the host name of the daemon.

# $name
; Expands to $type.$id.
; Example: /var/run/ceph/$cluster-$name.asok

使用集群配置数据库

集群配置数据库由 MON 节点集中管理:

  • 在守护进程启动之前,暂时更改设置。
  • 在守护进程运行时,更改大部分设置。
  • 将永久设置存储在数据库中。
    Ceph集中配置数据库默认存放在 MON 节点 /var/lib/ceph/fsid/mon.fsid/mon.fsid/mon.host/store.db中。
    使用 ceph config 命令,查询和配置集中配置数据库。
ceph config ls

列出集群数据库中所有配置条目。

bash 复制代码
[root@ceph1 ~]# ceph config ls
host
fsid
public_addr
public_addrv
public_bind_addr
cluster_addr
public_network
public_network_interface
cluster_network
cluster_network_interface
......
ceph config help <key>

查看集群数据库中特定配置帮助信息。 是 ceph config ls 命令列出的条目。

bash 复制代码
[root@ceph1 ~]# ceph config help host
host - local hostname
(str, basic)
Default:
Can update at runtime: false
Services: [common]
Tags: [network]
if blank, ceph assumes the short hostname (hostname -s)

[root@ceph1 ~]# ceph config help fsid
fsid - cluster fsid (uuid)
(uuid, basic)
Default: 00000000-0000-0000-0000-000000000000
Can update at runtime: false
Services: [common]
Tags: [service]
ceph config dump

显示集群配置数据库设置。显示的是当前所有生效的配置项(包括默认值和已被修改的值)

ceph config dump 显示的是:

  • 所有被显式设置过(通过 ceph config set 或旧版 ceph.conf )的配置项;
  • 不显示纯默认值(即从未被设置、完全使用 Ceph 内置默认的配置项)。
bash 复制代码
[root@ceph1 ~]# ceph config dump
ceph config show $type.$id [<key>]

仅显示被显式设置过的配置项( 且非默认值), 查看"用户自定义了哪些配置"

只列出通过以下方式显式设置过的配置:

  • ceph config set ...
  • 旧版 ceph.conf 中定义并被加载的项
bash 复制代码
[root@ceph1 ~]# ceph config show mon.ceph1.laogao.cloud

[root@ceph1 ~]# ceph config show mon.ceph1.laogao.cloud public_network
192.168.108.0/24
ceph config show-with-defaults $type.$id

显示所有配置项 + 当前值(包括默认值),查看"完整运行时配置",用于排错或审计

  • 列出 Ceph 支持的所有可配置项(数百项!)
  • 每一项都显示其 当前生效的值(无论是默认值还是被覆盖的值)
  • 用于全面了解集群的完整配置状态
bash 复制代码
[root@ceph1 ~]# ceph config show-with-defaults mon.ceph1.laogao.cloud
NAME                                      VALUE
admin_socket                              $run_dir/$cluster-$name.asok
admin_socket_mode
auth_allow_insecure_global_id_reclaim     false
auth_client_required                      cephx
auth_cluster_required                     cephx
auth_debug                                false
auth_expose_insecure_global_id_reclaim    true
auth_mon_ticket_ttl                       259200.000000
auth_service_required                     cephx
auth_service_ticket_ttl                   3600.000000
auth_supported                            cephx, none
bdev_aio
......
ceph config get $type.$id [<key>]

获得集群数据库中特定配置设置。精准点查

bash 复制代码
[root@ceph1 ~]# ceph config get mon.ceph1.laogao.cloud
WHO    MASK LEVEL     OPTION                                  VALUE
mon           advanced  auth_allow_insecure_global_id_reclaim   false
global        basic     public_network                          192.168.108.0/24
mon           RO        container_image                         quay.io/ceph/ceph@sha256:6ba107eb55617994a9e6ed49fb938828c2ed3121aa19ceeffbf8e28608535d94

[root@ceph1 ~]# ceph config get mon.ceph1.laogao.cloud public_network
192.168.108.0/24
ceph config set $type.$id <key> <value>

设置集群数据库中特定配置选项。

工作原理:

  • 修改 Monitor 维护的 集中式配置数据库
  • 所有符合条件的 daemon(如所有 OSD)会自动拉取新配置并应用
  • 配置持久存储在 Monitor 的 KV store 中
bash 复制代码
# 设置特定类型所有实例
[root@ceph1 ~]# ceph config set mon mon_allow_pool_delete false
# 设置特定类型特定实例
[root@ceph1 ~]# ceph config set mon.ceph1.laogao.cloud mon_allow_pool_delete true
[root@ceph1 ~]# ceph config get mon.ceph1.laogao.cloud mon_allow_pool_delete
true
ceph config rm $type.$id [<key>]

清除集群数据库中特定配置选项。--删除该参数还原默认配置的意思

bash 复制代码
[root@ceph1 ~]# ceph config rm mon.ceph1.laogao.cloud mon_allow_pool_delete
[root@ceph1 ~]# ceph config get mon.ceph1.laogao.cloud mon_allow_pool_delete
false
ceph config log [<num:int>]

显示集群最近配置历史记录,默认显示10条,类似于linux中history命令。

bash 复制代码
[root@ceph1 ~]# ceph config log
--- 16 --- 2025-08-19T08:08:00.450868+0000 ---- mon.ceph1.laogao.cloud/mon_allow_pool_delete = true
--- 15 --- 2025-08-19T08:07:01.547157+0000 --+ mon.ceph1.laogao.cloud/mon_allow_pool_delete = true
--- 14 --- 2025-08-19T08:05:20.097053+0000 --+ mon/mon_allow_pool_delete = false
......

# 只显示最近更改的两条记录
[root@ceph1 ~]# ceph config log 2
--- 16 --- 2025-08-19T08:08:00.450868+0000 ---- mon.ceph1.laogao.cloud/mon_allow_pool_delete = true
--- 15 --- 2025-08-19T08:07:01.547157+0000 --+ mon.ceph1.laogao.cloud/mon_allow_pool_delete = true
ceph config reset [<num:int>]

回滚集群数据中特定配置为

num 指定的历史版本。

准备实验环境:

bash 复制代码
[root@ceph1 ~]# ceph config set mon.ceph1.laogao.cloud mon_allow_pool_delete true 
#产生log 20记录

[root@ceph1 ~]# ceph config set mon.ceph1.laogao.cloud mon_allow_pool_delete false   
#产生log 21记录

[root@ceph1 ~]# ceph config get mon.ceph1.laogao.cloud mon_allow_pool_delete
false               
#此刻为false

[root@ceph1 ~]# ceph config log 2
--- 21 --- 2025-08-19T08:23:11.722223+0000 ---
- mon.ceph1.laogao.cloud/mon_allow_pool_delete = true
+ mon.ceph1.laogao.cloud/mon_allow_pool_delete = false
--- 20 --- 2025-08-19T08:23:07.709101+0000 ---
- mon.ceph1.laogao.cloud/mon_allow_pool_delete = false
+ mon.ceph1.laogao.cloud/mon_allow_pool_delete = true

回滚配置到log 20的版本

bash 复制代码
# 根据日志编号20回滚配置
[root@ceph1 ~]# ceph config reset 20        

# 验证配置,恢复至log 20对应的 true
[root@ceph1 ~]# ceph config get mon.ceph1.laogao.cloud mon_allow_pool_delete
true

# 查看最新一条配置变更日志
[root@ceph1 ~]# ceph config log 1
--- 22 --- 2025-08-19T08:25:27.045753+0000 --- reset to 20 ---      
- mon.ceph1.laogao.cloud/mon_allow_pool_delete = false
+ mon.ceph1.laogao.cloud/mon_allow_pool_delete = true

集群引导选项

集群引导选项提供启动集群所需的信息。MON 读取 mon map 和 ceph.conf 文件,以确定如何与其他 MON 通信,并与其他 MON 并建立仲裁。

mon_ip 选项列出集群监控器。此选项必不可少,并且不能存储在配置数据库中。为避免使用集群配置文件,Ceph 集群支持使用 DNS 服务记录提供 mon_host 列表。

本地集群配置文件 ceph.conf 还可包含其他选项:

  • mon_host_override,集群监视器的初始列表。
  • mon_dns_serv_name,用于检查通过 DNS 识别的集群监控器的 DNS SRV 记录的名称。
  • mon_data、osd_data、mds_data、mgr_data,定义守护进程的本地数据存储目录。
  • keyring、keyfile 和 key,使用监控器进行身份验证的身份验证凭据。

在运行时覆盖配置设置

Ceph支持在守护进程运行时,临时更改大部分配置选项。

ceph tell 命令

向 daemon "发消息"

工作原理:

  • 直接与指定的运行中 daemon 通信(通过 admin socket 或网络)
  • 常用于执行管理命令(如 compact leveldb、flush cache)
  • 若用于配置,需通过 injectargs 模拟"启动参数"
    ceph tell type.type.type.id config 命令可临时覆盖配置选项,并要求所配置的MON和守护进程都在运行。
  • ceph tell type.type.type.id config show,获取守护进程的所有运行时设置。
  • ceph tell type.type.type.id config get,获取守护进程的特定运行时设置。
  • ceph tell type.type.type.id config set,设置守护进程的特定运行时设置。当守护进程重启时,这些临时设置将恢复为原始值。

示例:

bash 复制代码
# 查询进程内存中当前运行配置
[root@ceph1 ~]# ceph tell mon.ceph1.laogao.cloud config get mon_allow_pool_delete
{
    "mon_allow_pool_delete": "true"
}

# 临时修改进程内存配置(不写入集群配置数据库)
[root@ceph1 ~]# ceph tell mon.ceph1.laogao.cloud config set mon_allow_pool_delete false
{
    "success": "mon_allow_pool_delete = 'false' "
}

# 临时更改已生效
[root@ceph1 ~]# ceph tell mon.ceph1.laogao.cloud config get mon_allow_pool_delete
{
    "mon_allow_pool_delete": "false"
}

# 集群持久化数据库内的值依旧为 true
[root@ceph1 ~]# ceph config get mon.ceph1.laogao.cloud mon_allow_pool_delete
true

# 重启守护进程,进程重新加载集群持久化配置
[root@ceph1 ~]# ceph orch daemon restart mon.ceph1.laogao.cloud
Scheduled to restart mon.ceph1.laogao.cloud on host 'ceph1.laogao.cloud'

# 重启后恢复为数据库持久化的值 true
[root@ceph1 ~]# ceph tell mon.ceph1.laogao.cloud config get mon_allow_pool_delete
{
    "mon_allow_pool_delete": "true"
}

注意:使用此命令更改的设置在守护进程重启后会恢复为原始设置。

ceph tell type.type.type.id config 命令接受通配符,以获取或设置同一类型的所有守护进程的值。

bash 复制代码
[root@ceph1 ~]# ceph tell mon.* config get mon_allow_pool_delete
mon.ceph1.laogao.cloud: {
    "mon_allow_pool_delete": "true"
}
mon.ceph2: {
    "mon_allow_pool_delete": "false"
}
mon.ceph3: {
    "mon_allow_pool_delete": "false"
}

ceph config set和ceph tell命令对比

特性 ceph config set ceph tell ... injectargs
配置存储位置 Monitor 配置数据库 仅内存(daemon 进程内)
是否持久 ✅ 是 ❌ 否
是否批量生效 ✅(如 osd 影响所有) ❌(必须指定具体实例,如 osd.0)
能否用于非配置操作 ❌ 仅配置 ✅(如 compact,flush)
是否被 ceph config get 识别 ✅ 是 ❌ 否
适用场景 长期配置、运维策略 紧急排错、临时调试

使用建议

  • 日常调优、生产配置 → 用 ceph config set
  • 紧急排查问题、临时抓日志 → 用 ceph tell osd.0 injectargs --debug_xxx=20
  • 执行管理动作(非配置) → 必须用 ceph tell(如 compact , cache-flush )
ceph daemon 命令

Ceph支持在集群特定节点上使用 ceph daemon type.type.type.id config 命令临时覆盖配置选项。该命令不需要连接 MON ,但要求对应的守护进程要运行,所以即使 MON 未运行,该命令仍可发挥作用,有助于故障排除。

  • ceph daemon type.type.type.id config show ,获得特定守护进程运行时所有设置。
bash 复制代码
# 在ceph1上只能查看和设置ceph1上运行的相关进程设置
[root@ceph1 ~]# cephadm shell
[ceph: root@ceph1 /]# ceph daemon mon.ceph1.laogao.cloud config show
{
    "name": "mon.ceph1.laogao.cloud",
    "cluster": "ceph",
    "admin_socket": "/var/run/ceph/ceph-mon.ceph1.laogao.cloud.asok",
    "admin_socket_mode": "",
    "auth_allow_insecure_global_id_reclaim": "false",
    "auth_client_required": "cephx, none",
    "auth_cluster_required": "cephx",
    "auth_debug": "false",
    "auth_expose_insecure_global_id_reclaim": "true",
    "auth_mon_ticket_ttl": "259200.000000",
    "auth_service_required": "cephx",
    ......
}
  • ceph daemon type.type.type.id config get ,获得守护进程运行时特定设置。
bash 复制代码
[ceph: root@ceph1 /]# ceph daemon mon.ceph1.laogao.cloud config get mon_allow_pool_delete
{
    "mon_allow_pool_delete": "true"
}
  • ceph daemon type.type.type.id config set ,设置守护进程运行时特定设置。
bash 复制代码
[ceph: root@ceph1 /]# ceph daemon mon.ceph1.laogao.cloud config set mon_allow_pool_delete false
{
    "success": "mon_allow_pool_delete = 'false' "
}

[ceph: root@ceph1 /]# ceph daemon mon.ceph1.laogao.cloud config get mon_allow_pool_delete
{
    "mon_allow_pool_delete": "false"
}

注意:使用此命令更改的设置在守护进程重启后会恢复为原始设置。

bash 复制代码
[ceph: root@ceph1 /]# ceph orch daemon restart mon.ceph1.laogao.cloud
Scheduled to restart mon.ceph1.laogao.cloud on host 'ceph1.laogao.cloud'

[ceph: root@ceph1 /]# ceph daemon mon.ceph1.laogao.cloud config get mon_allow_pool_delete
{
    "mon_allow_pool_delete": "true"
}

Web UI 更改

  1. 打开 Web 浏览器并导航到 https://ceph1.laogao.cloud:8443。必要时,接受证书警告。
    输入用户名(admin)和密码(laogao@123) 登录。
  2. 在 Ceph 控制面板 Web UI 中,单击 Cluster > Configuration 以显示 Configuration Settings 页面。
  3. 从 advanced 菜单中选择 advanced 选项,以查看高级配置选项。在搜索栏中键入mon_allow_pool_delete 来查找设置。
  4. 单击 mon_allow_pool_delete,然后单击 Edit。
  5. 编辑 mon_allow_pool_delete 设置,将 global 值设置为 true,然后单击Update。
  6. 控制面板会显示一条消息,以确认新的设置。

配置集群监控器 Monitor

配置 Ceph 监控器

Ceph监控器(MON)存储和维护客户端用于查找MON和OSD节点的集群映射。Ceph客户端必须连接到MON以检索集群映射,然后才能读取或写入任何数据到OSD。因此,正确配置集群MON至关重要。

MON 采用 一种 Paxos 变体算法来选举领导者,在分布式计算机集之间达成一致。

各MON分别具有以下其中一个角色:

  • Leader:第一个获得集群映射最新版本的 MON。
  • Provider:拥有最新版本的集群映射,但不是 Leader 的 MON。
  • Requester:没有最新版本的集群映射,必须先与 Provider 同步,然后才能重新加入仲裁的 MON。

一旦有新的 MON 加入集群,便会进行同步。每个 MON 都会定期检查相邻监控器是否已有更新版本的集群映射。如果相邻 MON 具有新版本的集群映射,则必须同步并获取相应集群映射。

集群中的大多数 MON 必须处于运行状态,以建立仲裁。例如,如果部署了五个 MON,则必须运行三个才能建立仲裁。在生产 Ceph 集群中至少部署三个 MON 节点,以确保高可用性。Ceph 支持在运行中的集群中添加或删除 MON。

集群配置文件 mon 块中 mon_host 定义 MON 主机 IP 地址(或 DNS 名称)和端口。cephadm 工具不会更新集群配置文件,可以通过第三方工具,例如rsync,让集群配置文件在集群节点之间保持同步的策略。

bash 复制代码
[global]
fsid = 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
mon_host = [v2:192.168.108.11:3300/0,v1:192.168.108.11:6789/0],
           [v2:192.168.108.12:3300/0,v1:192.168.108.12:6789/0],
           [v2:192.168.108.13:3300/0,v1:192.168.108.13:6789/0]

重要:在集群部署和运行期间,建议不要更改 MON 节点 IP 地址。

查看监控器仲裁

ceph status 命令,检查 MON 仲裁状态。

bash 复制代码
[root@ceph1 ~]# ceph status | grep mon
    mon: 3 daemons, quorum ceph1.laogao.cloud,ceph2,ceph3 (age 11m)

ceph mon stat 命令,检查 MON 仲裁状态。

bash 复制代码
[root@ceph1 ceph]# ceph mon stat
e3: 3 mons at {ceph1.laogao.cloud=
[v2:192.168.108.11:3300/0,v1:192.168.108.11:6789/0],
ceph2=[v2:192.168.108.12:3300/0,v1:192.168.108.12:6789/0],
ceph3=[v2:192.168.108.13:3300/0,v1:192.168.108.13:6789/0]} removed_ranks: {},
election epoch 16, 
leader 0 ceph1.laogao.cloud, quorum 0,1,2 ceph1.laogao.cloud,ceph2,ceph3

ceph quorum_status -f json-pretty 命令,友好的 json 格式输出 MON 仲裁状态。

bash 复制代码
[root@ceph1 ~]# ceph quorum_status -f json-pretty
bash 复制代码
{
    "election_epoch": 16,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [
        "ceph1.laogao.cloud",
        "ceph2",
        "ceph3"
    ],
    "quorum_leader_name": "ceph1.laogao.cloud",
    "quorum_age": 869,
    "features": {
        "quorum_con": "4540138314316775423",
        "quorum_mon": [
            "kraken",
            "luminous",
            "mimic",
            "osdmap-prune",
            "nautilus",
            "octopus",
            "pacific",
            "elector-pinging"
        ]
    },
    "monmap": {
        "epoch": 3,
        "fsid": "2faf683a-7cbf-11f0-b5ba-000c29e0ad0e",
        "modified": "2025-08-19T05:51:46.573105Z",
        "created": "2025-08-19T05:41:50.650957Z",
        "min_mon_release": 16,
        "min_mon_release_name": "pacific",
        "election_strategy": 1,
        "disallowed_leaders: ": "",
        "stretch_mode": false,
        "tiebreaker_mon": "",
        "removed_ranks: ": "",
        "features": {
            "persistent": [
                "kraken",
                "luminous",
                "mimic",
                "osdmap-prune",
                "nautilus",
                "octopus",
                "pacific",
                "elector-pinging"
            ],
            "optional": []
        },
        "mons": [
            {
                "rank": 0,
                "name": "ceph1.laogao.cloud",
                "public_addrs": {
                    "addrvec": [
                        {
                            "type": "v2",
                            "addr": "192.168.108.11:3300",
                            "nonce": 0
                        },
                        {
                            "type": "v1",
                            "addr": "192.168.108.11:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.108.11:6789/0",
                "public_addr": "192.168.108.11:6789/0",
                "priority": 0,
                "weight": 0,
                "crush_location": "{}"
            },
            {
                "rank": 1,
                "name": "ceph2",
                "public_addrs": {
                    "addrvec": [
                        {
                            "type": "v2",
                            "addr": "192.168.108.12:3300",
                            "nonce": 0
                        },
                        {
                            "type": "v1",
                            "addr": "192.168.108.12:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.108.12:6789/0",
                "public_addr": "192.168.108.12:6789/0",
                "priority": 0,
                "weight": 0,
                "crush_location": "{}"
            },
            {
                "rank": 2,
                "name": "ceph3",
                "public_addrs": {
                    "addrvec": [
                        {
                            "type": "v2",
                            "addr": "192.168.108.13:3300",
                            "nonce": 0
                        },
                        {
                            "type": "v1",
                            "addr": "192.168.108.13:6789",
                            "nonce": 0
                        }
                    ]
                },
                "addr": "192.168.108.13:6789/0",
                "public_addr": "192.168.108.13:6789/0",
                "priority": 0,
                "weight": 0,
                "crush_location": "{}"
            }
        ]
    }
}

控制面板中查看 MON 的状态:单击Cluster > Monitor。

分析监控器映射

Ceph 集群映射包含:

  • MON 映射
  • OSD 映射
  • PG 映射
  • MDS 映射
  • CRUSH 映射

MON 映射包含:

  1. 集群 fsid(文件系统 ID),fsid 是一种自动生成的唯一标识符 (UUID),用于标识 Ceph集群。
  2. 各个 MON 节点通信的名称、IP 地址和网络端口。
  3. 映射版本信息,如 epoch 和最近一次更改时间。MON 节点通过同步更改并就当前版本达成一致来维护映射。

查看当前的 MON 映射

bash 复制代码
[root@ceph1 ~]# ceph mon dump
epoch 3
fsid 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e            #集群fsid
last_changed 2025-08-19T05:51:46.573105+0000
created 2025-08-19T05:41:50.650957+0000
min_mon_release 16 (pacific)
election_strategy: 1
0: [v2:192.168.108.11:3300/0,v1:192.168.108.11:6789/0] mon.ceph1.laogao.cloud
1: [v2:192.168.108.12:3300/0,v1:192.168.108.12:6789/0] mon.ceph2
2: [v2:192.168.108.13:3300/0,v1:192.168.108.13:6789/0] mon.ceph3
dumped monmap epoch 3

管理集中配置数据库

MON 节点存储和维护集中配置数据库。数据库文件位于 MON 节点,默认位置是:

/var/lib/ceph/$fsid/mon.$host/store.db

注意:不建议更改数据库的位置。

数据库文件会不断增大,改进措施:

  • 运行 ceph tell mon.$id compact 命令,整合数据库,以提高性能。
bash 复制代码
[root@ceph1 ~]# ceph tell mon.ceph1.laogao.cloud compact
  • 将 mon_compact_on_start 配置选项为 TRUE ,以便在每次守护进程启动时压缩数据库。
bash 复制代码
[root@ceph1 ~]# ceph config set mon mon_compact_on_start true

设置以下数据库文件大小相关定义,以触发运行状况变化:

  • mon_data_size_warn,当配置数据库文件的大小超过此值时,集群运行状况更改为HEALTH_WARN。默认值是15 (GB)。
  • mon_data_avail_warn,当包含配置数据库文件的文件系统剩余容量小于或等于此百分比时,将集群运行状况更改为 HEALTH_WARN。默认值是30 (%)。
  • mon_data_avail_crit,当包含配置数据库的文件系统剩余容量小于或等于此百分比 时,将集群运行状况更改为 HEALTH_ERR。默认值是5 (%)。

集群验证

Ceph 默认使用 Cephx 协议进行加密身份验证,同时使用共享密钥进行身份验证。默认情况下,Ceph 会启用 Cephx。如有必要,可以禁用 Cephx,但不建议这样做,因为这样会减弱集群的安全性。

使用 ceph config set 命令启用或禁用 Cephx 协议。

bash 复制代码
[root@ceph1 ~]# ceph config get mon auth_service_required
cephx
[root@ceph1 ~]# ceph config get mon auth_cluster_required
cephx
[root@ceph1 ~]# ceph config get mon auth_client_required
cephx, none

参数说明:

  • auth_service_required:客户端与 Ceph services 之间通信认证。可用值 cephx 和 none。
  • auth_cluster_required:Ceph 集群守护进程之间通信认证,例如 ceph-mon,ceph-osd,ceph-mds,ceph-mgr。可用值 cephx 和 none。
  • auth_client_required:客户端与 Ceph 集群之间通信认证。可用值 cephx 和 none。
    官方原话:If this configuration setting is enabled, then Ceph clients can access Ceph services only if those clients authenticate with the Ceph Storage Cluster. Valid settings are cephx or none .

cephadm 工具创建 client.admin 用户,让用户能够运行管理命令并创建其他 Ceph 客户端用户帐户,用户密钥环存储在 /etc/ceph 目录中。

bash 复制代码
[root@ceph1 ~]# ls /etc/ceph
ceph.client.admin.keyring  ceph.conf  ceph.pub  rbdmap

守护进程数据目录包含 Cephx 密钥环文件。对于 MON,密钥环文件是:

/var/lib/ceph/fsid/mon.fsid/mon.fsid/mon.host/keyring。

bash 复制代码
[root@ceph1 ~]# ls /var/lib/ceph/2faf683a-7cbf-11f0-b5ba-000c29e0ad0e/mon.ceph1.laogao.cloud/keyring
/var/lib/ceph/2faf683a-7cbf-11f0-b5ba-000c29e0ad0e/mon.ceph1.laogao.cloud/keyring

密钥环文件以纯文本形式存储机密密钥。务必使用合适的 Linux 文件权限来保护它们的安全。

使用ceph auth命令创建、查看和管理集群

使用 ceph-authtool 命令创建密钥环文件。

示例:为 MON 节点创建一个密钥环文件。

bash 复制代码
# --create-keyring /tmp/ceph.mon.keyring
创建一个新的密钥环文件(Keyring),路径为 /tmp/ceph.mon.keyring。

# --gen-key -n mon.
生成一个新密钥(--gen-key)。-n mon. 指定密钥关联的实体名称(Entity Name),这里是 mon.(表示 Monitor 守护进程)。
注意:实体名称通常以守护进程类型开头(如 mon.、osd.),后接节点标识符(如 mon.a)。

# --cap mon 'allow *'
为该密钥分配权限(Capabilities):
mon 表示权限作用于 Monitor 服务。
'allow *' 授予所有 Monitor 操作的完全权限(如访问集群状态、修改配置等)。

cephadm工具还会在/etc/ceph目录中创建client.admin用户,让您能够运行管理命令并创建其他Ceph客户端用户帐户。

配置集群网络-了解即可

配置公共网络和集群网络

public网络是所有Ceph集群通信的默认网络。cephadm工具假定第一个MON守护进程IP地址的网络是public网络。新的MON守护进程部署在public网络中,除非您明确定义了不同的网络。

Ceph客户端通过集群的public网络直接向OSD发送请求。OSD复制和恢复流量会使用public网络,除非您为此配置了单独的cluster网络。

配置单独的cluster网络可能会减少public网络的流量负载并与后端OSD运维流量进行客户端分流,从而提高集群的性能。

通过执行以下步骤,配置独立 cluster 网络的节点。

  1. 在每个集群节点上配置一个额外的网络接口。
  2. 在每个节点的新网络接口上配置适当的 cluster 网络 IP 地址。
  3. cephadm bootstrap 命令使用 --cluster-network 选项,在集群引导时定义 cluster网络。

Ceph 支持使用集群配置文件来设置 Public 网络和 Cluster 网络,还可以为每个网络配置多个子网,用逗号分隔。使用 CIDR 表示法表示子网,例如172.25.250.0/24。

bash 复制代码
[global]
public_network = 192.168.108.0/24,192.168.109.0/24
cluster_network = 192.168.101.0/24

Important

如果为一个网络配置多个子网,这些子网必须能够互相路由。

还可以使用 ceph config set 命令设置 Public 和 cluster 网络。

配置单个守护进程

MON 守护进程需绑定到特定的 IP 地址,但 MGR、OSD 和 MDS 守护进程可绑定至任何可用的 IP 地址。在Ceph 存储 5 中,cephadm 使用 Public 网络执行大部分服务。若要处理 cephadm 部署新守护进程的位置,需先定义服务要使用的特定子网。只有在同一子网中有 IP 地址的主机可用于部署该服务。

将 192.168.108.0/24 子网设置为 MON 守护进程公共网络:

bash 复制代码
# ceph config set mon public_network 192.168.108.0/24

以上命令相当于在集群配置文件中做如下设置:

bash 复制代码
[mon]
public_network = 192.168.108.0/24

使用 ceph orch daemon add 命令可将守护进程手动部署到特定子网或 IP 地址。

bash 复制代码
# ceph orch daemon add mon cluster-host02:192.168.108.0/24

Tip

建议使用服务规范文件来管理 Ceph 集群,不建议使用运行时 ceph orch daemon 命令更改配置。

运行 IPv6

默认情况下,集群 ms_bind_ipv4 设置的值是 TRUE ,而 ms_bind_ipv6 设置的值是FALSE。

bash 复制代码
# ceph config get mon.ceph1.laogao.cloud ms_bind_ipv4
true
# ceph config get mon.ceph1.laogao.cloud ms_bind_ipv6
false

要将 Ceph 守护进程绑定至 IPv6 地址,需要:

  • 将 ms_bind_ipv6 设置为 TRUE
  • 将 ms_bind_ipv4 设置为 FALSE
    同时绑定 public_network 和 cluster_network 为IPv6网络。
bash 复制代码
[global]
public_network = <IPv6 public-network/netmask>
cluster_network = <IPv6 cluster-network/netmask>
启用巨型帧

配置网络 MTU 来支持巨型帧是存储网络中的推荐做法,可以提升性能。在 cluster 网络接口上配置 MTU 值 9000,以支持巨型帧。

Important

通信路径中的所有节点和网络设备必须具有相同的MTU值。对于绑定网络接口,在绑定接口上设置MTU值,基础接口将继承相同的MTU值。

配置网络安全

配置独立的 cluster 网络可以提高集群的安全性和可用性:

  • 防止数据在 Public 网络上泄露。
  • 减少 Public 网络上的攻击面。
  • 防止针对集群某些类型的拒绝服务 (DoS) 攻击。
  • 防止 OSD 之间的流量中断。当 OSD 之间的流量中断时,客户端会无法读取和写入数据。
    确保流量不在 cluster 和 Public 网络之间路由,以保护后端 cluster 网络。

配置防火墙规则

Ceph OSD 和 MDS 守护进程默认绑定到 6800 到 7300 之间的 TCP 端口。若要配置不同的范围,需更改 ms_bind_port_min 和

ms_bind_port_max 设置。

下表列出了Ceph 存储 5 的默认端口。

若要使用防火墙保护 MON 节点,需使用 Public 接口和 Public 网络 IP 地址来配置规则。

bash 复制代码
# firewall-cmd --zone=Public --add-port=6789/tcp --add-port=3300/tcp
# firewall-cmd --zone=Public --add-port=6789/tcp --add-port=3300/tcp --permanent

还可通过添加 ceph-mon 服务至防火墙规则来保护 MON 节点

bash 复制代码
# firewall-cmd --zone=Public --add-service=ceph-mon
# firewall-cmd --zone=Public --add-service=ceph-mon --permanent

若要配置 cluster 网络,防火墙需要配置 Public 和 cluster 网络规则。客户端通过使用公共网络连接到 OSD,OSD 通过集群网络互相通信。

若要使用防火墙规则保护 OSD 节点,执行以下命令:

bash 复制代码
# firewall-cmd --zone=<public-or-cluster> --add-port=6800-7300/tcp
# firewall-cmd --zone=<public-or-cluster> --add-port=6800-7300/tcp --permanent

还可通过添加 ceph 服务至防火墙规则来保护 OSD 节点。

bash 复制代码
# firewall-cmd --zone=<public-or-cluster> --add-service=ceph
# firewall-cmd --zone=<public-or-cluster> --add-service=ceph --permanent 
相关推荐
旺仔学长 哈哈1 小时前
基于SpringBoot的在线招聘测评系统的设计与实现----附源码35253+数据库文档
数据库·spring boot·后端·在线招聘
爱吃龙利鱼1 小时前
K8s 运维体系搭建:全组件监控与日志收集实战(victoria-metrics-k8s-stack 0.87.0)
运维·容器·kubernetes
weixin_446729161 小时前
Nginx简单学习与了解
运维·nginx
吴声子夜歌2 小时前
MongoDB 4.2——索引(二)
数据库·mongodb·索引
心如鉄补2 小时前
分布式链路追踪系统之docker-compose安装skywalking
分布式·docker·skywalking
努力努力再努力wz2 小时前
【分布式系统与 RPC 框架系列】从单机瓶颈到远程调用:一文理解分布式架构与 RPC 原理
linux·网络·c++·分布式·网络协议·rpc·架构
米码收割机2 小时前
【Python】Django恒达科技门户网站(源码+文档)【独一无二】
数据库·python·科技
沉默de荒年 对月影成2 小时前
机房断电搞崩服务器 | 人大金仓 V8 全量备份跨实例完整恢复实录
运维·服务器·oracle
艾莉丝努力练剑2 小时前
【MYSQL】MYSQL学习的一大重点:基本查询(下)
android·数据库·学习·mysql·面试·八股文