Ceph系列第三期:Ceph 集群核心配置与管理

Ceph系列第三期:Ceph 集群核心配置与管理

本期目标

  • 理解 Ceph 的配置体系(配置文件 vs 集中配置数据库)
  • 掌握 ceph config 系列命令的使用
  • 学会运行时动态调整配置(ceph tell
  • 配置 Public 网络和 Cluster 网络
  • 管理 Monitor(MON)节点和集群映射
  • 掌握 Cephx 认证与授权机制,管理用户账户

前置要求:已完成第二期的集群部署,拥有一个健康的三节点 Ceph 集群(ceph1~ceph3)。


1. Ceph 配置体系概述

Ceph 守护进程(MON、OSD、MDS、MGR)和客户端可以从多个来源获取配置,优先级从低到高:

  1. 编译内置默认值
  2. 中央配置数据库(Monitor 维护,优先级高于本地配置文件)
  3. 本地配置文件/etc/ceph/ceph.conf
  4. 环境变量 (如 CEPH_ARGS
  5. 命令行参数 (如 --id

重要变化 :较新版本的 Ceph 推荐使用集中配置数据库 进行配置管理,ceph.conf 仅保留最小必要选项(如 mon_host)。cephadm 部署的集群默认只生成非常精简的 ceph.conf,大部分配置通过 ceph config set 管理。

1.1 配置文件格式

Ceph 使用 INI 格式,以 [section] 划分:

ini

复制代码
[global]                # 全局配置,适用于所有守护进程和客户端
    fsid = 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
    mon_host = [v2:192.168.108.11:3300/0,v1:192.168.108.11:6789/0]

[mon]                   # 适用于所有 mon 守护进程
    mon_allow_pool_delete = false

[mon.ceph1]             # 仅适用于 ceph1 上的 mon 实例
    mon_allow_pool_delete = true

[osd]                   # 适用于所有 osd
    osd_memory_target = 4294967296

[client]                # 适用于所有 Ceph 客户端(如 rbd、rados 命令)
    rbd_cache = true

1.2 元变量(Metavariables)

可以在配置值中使用的动态变量:

元变量 含义 示例展开
$cluster 集群名称,默认为 ceph /etc/ceph/$cluster.keyring/etc/ceph/ceph.keyring
$type 守护进程类型(mon, osd, mds, mgr, client) /var/lib/ceph/$type
$id 实例 ID(如 osd.0 的 id 为 0)
$name $type.$id 的简写
$host 运行守护进程的主机名

2. 集中配置数据库管理

配置数据库存储在 MON 节点的 /var/lib/ceph/$fsid/mon.$host/store.db 中,使用 RocksDB 存储。所有 MON 节点通过 Paxos 保持配置一致。

2.1 常用 ceph config 命令

列出所有可配置项

bash

复制代码
ceph config ls

输出包含所有可设置参数及其类型、是否可运行时修改等。

查看帮助信息

bash

复制代码
ceph config help <key>

示例:

bash

复制代码
ceph config help mon_allow_pool_delete
查看当前生效的配置(仅显示被显式设置过的)

bash

复制代码
ceph config dump

注意:不显示纯默认值。

查看特定守护进程的所有配置(包括默认值)

bash

复制代码
ceph config show-with-defaults mon.ceph1.whisky.cloud
查看特定守护进程的某个配置项

bash

复制代码
ceph config get mon.ceph1.whisky.cloud mon_allow_pool_delete
设置配置项(永久,存储在数据库中)

bash

复制代码
# 对所有 mon 实例设置
ceph config set mon mon_allow_pool_delete true

# 对特定 mon 实例设置
ceph config set mon.ceph1.whisky.cloud mon_allow_pool_delete false

# 对全局所有守护进程设置
ceph config set global osd_memory_target 4294967296
删除配置项(恢复默认值)

bash

复制代码
ceph config rm mon.ceph1.whisky.cloud mon_allow_pool_delete
查看配置变更历史(类似 history

bash

复制代码
ceph config log
ceph config log 10   # 显示最近 10 条变更
回滚配置到某个历史版本(根据 log 中的序号)

bash

复制代码
ceph config reset 15

reset 会撤销该版本之后的所有变更。


3. 运行时动态调整(临时覆盖)

ceph config set 的变更需要守护进程自动拉取(通常几秒内生效),但某些参数必须重启才能生效。如果只想临时测试配置而不永久保存,可以使用 ceph tell 命令。

3.1 ceph tell 命令

ceph tell 直接向指定守护进程发送命令,支持临时修改配置(守护进程重启后失效)。

语法ceph tell <daemon_name> config set <key> <value>

bash

复制代码
# 临时将 mon.ceph1 的 mon_allow_pool_delete 改为 true
ceph tell mon.ceph1.whisky.cloud config set mon_allow_pool_delete true

# 查看临时设置后的值
ceph tell mon.ceph1.whisky.cloud config get mon_allow_pool_delete

# 同时查看所有 mon 的该配置项
ceph tell mon.* config get mon_allow_pool_delete

临时修改的特性

  • 立即生效,无需重启。
  • 守护进程重启后会恢复为配置数据库中的值。
  • 适合紧急排错或临时调试。

3.2 ceph daemon 命令(本地)

如果 MON 集群不可用,可以在守护进程所在节点上使用 ceph daemon 命令,通过 admin socket 直接与本机守护进程通信。

bash

复制代码
# 进入 cephadm shell(或直接在物理机执行,需安装 ceph-common)
cephadm shell

# 在 shell 内执行
ceph daemon mon.ceph1.whisky.cloud config show
ceph daemon mon.ceph1.whisky.cloud config get mon_allow_pool_delete
ceph daemon mon.ceph1.whisky.cloud config set mon_allow_pool_delete false

该命令同样临时生效,重启丢失。适合 MON 宕机时的故障排查。

3.3 ceph config set vs ceph tell 对比

特性 ceph config set ceph tell ... config set
存储位置 MON 配置数据库 仅内存(守护进程内)
持久化 是,重启后仍有效 否,重启后恢复数据库值
生效范围 所有匹配的守护进程(如所有 osd) 仅指定的单个守护进程
是否批量 是(如 set osd 对所有 osd 生效) 否,必须指定实例
推荐用途 长期配置、运维策略 紧急调试、临时测试

4. 网络配置

Ceph 集群通常涉及两种网络:

  • Public 网络:客户端与 MON、OSD 之间的通信,也用于 OSD 之间的数据复制(如果未单独设置 Cluster 网络)。
  • Cluster 网络:专用于 OSD 之间的心跳、数据复制和恢复,与 Public 网络隔离,可提高性能和安全性。

4.1 查看当前网络配置

bash

复制代码
ceph config get mon public_network
ceph config get mon cluster_network

4.2 设置网络(在引导时或后期修改)

引导时指定:

bash

复制代码
cephadm bootstrap --mon-ip 192.168.108.11 --cluster-network 192.168.101.0/24

后期修改(需要重启相关守护进程):

bash

复制代码
ceph config set global public_network 192.168.108.0/24
ceph config set global cluster_network 192.168.101.0/24

修改 cluster_network 后需要重启所有 OSD 才能生效。

4.3 为单个守护进程绑定特定 IP

MON 需要绑定到特定 IP,而 OSD 和 MDS 可以绑定到任何符合条件的 IP。

bash

复制代码
ceph config set mon.ceph1.whisky.cloud public_addr 192.168.108.11

4.4 IPv6 配置

默认 IPv6 是禁用的(ms_bind_ipv6 = false)。启用步骤:

bash

复制代码
ceph config set global ms_bind_ipv6 true
ceph config set global ms_bind_ipv4 false   # 可选,若只用 IPv6
ceph config set global public_network 2001:db8::/64

网络中所有节点和设备必须同时支持并配置一致的 IPv6 网段。

4.5 防火墙端口

服务 端口 协议 说明
MON (msgr2) 3300 TCP Ceph 新协议
MON (msgr1) 6789 TCP 旧协议
OSD / MDS 6800-7300 TCP 每个 OSD 占用三个端口
MGR Dashboard 8443 TCP HTTPS
RGW 默认 80 TCP HTTP

firewalld 示例

bash

复制代码
firewall-cmd --zone=public --add-service=ceph-mon --permanent
firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
firewall-cmd --reload

5. 管理 Monitor(MON)

5.1 查看 MON 状态

bash

复制代码
ceph status | grep mon
# 输出示例:mon: 3 daemons, quorum ceph1,ceph2,ceph3

ceph mon stat
ceph quorum_status -f json-pretty

5.2 分析 MON 映射

bash

复制代码
ceph mon dump

输出内容:

  • epoch:映射版本
  • fsid:集群唯一标识
  • 各个 MON 的 IP、端口、排名

5.3 添加和删除 MON

在 cephadm 环境下,通过服务放置管理:

bash

复制代码
# 增加 MON 数量(在标签为 _admin 的节点上部署)
ceph orch apply mon --placement="label:_admin"

# 减少 MON 数量(直接停止并移除 daemon)
ceph orch daemon rm mon.ceph3 --force

生产环境 MON 数量应为奇数(3、5、7),以便 Paxos 选举。

5.4 MON 数据库维护

MON 数据库(store.db)随时间增长,可以压缩:

bash

复制代码
# 在线压缩
ceph tell mon.ceph1.whisky.cloud compact

# 设置每次启动时自动压缩
ceph config set mon mon_compact_on_start true

设置告警阈值:

bash

复制代码
ceph config set mon mon_data_size_warn 15G        # 超过 15GB 告警 WARN
ceph config set mon mon_data_avail_warn 30        # 空闲容量低于 30% 告警 WARN
ceph config set mon mon_data_avail_crit 5         # 空闲容量低于 5% 告警 ERR

6. Cephx 认证与授权

Cephx 是 Ceph 默认的身份验证协议,使用共享密钥加密通信。默认开启。

6.1 认证相关配置

bash

复制代码
ceph config get mon auth_service_required   # 服务间认证,默认 cephx
ceph config get mon auth_cluster_required   # 集群内守护进程间认证,默认 cephx
ceph config get mon auth_client_required    # 客户端认证,默认 cephx

关闭认证会严重降低安全性,仅测试环境使用。需将以上三个参数设为 none

6.2 用户账户类型

  • 守护进程内部账户:如 osd.0mon.ceph1,由 Ceph 内部使用。
  • 客户端账户:以 client. 为前缀,如 client.adminclient.rbd
  • 特殊引导账户:client.bootstrap-osd 等,用于 OSD 引导。

6.3 查看用户账户

bash

复制代码
# 列出所有用户
ceph auth list

# 查看特定用户详情
ceph auth get client.admin
ceph auth get osd.0

6.4 创建和管理用户

创建用户并同时赋予权限

bash

复制代码
# 添加用户(仅创建,无权限)
ceph auth add client.app1

# 创建用户并立即赋予权限
ceph auth get-or-create client.app2 mon 'allow r' osd 'allow rw pool=mypool'

# 仅生成密钥(不存储到集群)
ceph auth get-or-create-key client.app3

修改用户权限

bash

复制代码
ceph auth caps client.app2 mon 'allow rw' osd 'allow rw pool=mypool'

删除用户

bash

复制代码
ceph auth del client.app2

导出和导入用户密钥环

bash

复制代码
# 导出到文件
ceph auth export client.app1 -o client.app1.keyring

# 导入(合并或新增)
ceph auth import -i client.app1.keyring

6.5 权限(Capabilities)详解

权限格式:<daemon-type> 'allow <permissions>' [pool=<poolname>] [namespace=<namespace>]

权限 含义 适用对象
r 读取 mon、osd、mds
w 写入 osd、mds
x 执行类方法(如 rados lock) osd
class-read 调用类读取方法 osd
class-write 调用类写入方法 osd
* 全部权限(含管理命令) mon、osd、mds
profile osd 预定义 OSD 权限 mon、mgr
profile rbd 预定义 RBD 客户端权限 mon、osd
profile bootstrap-osd OSD 引导权限 mon

预定义 profile 简化授权:

bash

复制代码
# RBD 客户端典型权限
ceph auth get-or-create client.myrbd mon 'profile rbd' osd 'profile rbd'

限制到特定池和命名空间

bash

复制代码
# 仅允许访问 pool=mydata 中的所有对象
ceph auth get-or-create client.myapp mon 'allow r' osd 'allow rw pool=mydata'

# 仅允许访问 pool=mydata 中 namespace=images 的对象
ceph auth get-or-create client.myapp2 mon 'allow r' osd 'allow rw pool=mydata namespace=images'

# 仅允许访问对象名前缀为 "prefix_" 的对象
ceph auth get-or-create client.myapp3 mon 'allow r' osd 'allow rw object_prefix prefix_'

6.6 密钥环文件位置

默认查找路径:/etc/ceph/$cluster.$name.keyring

例如:/etc/ceph/ceph.client.admin.keyring/etc/ceph/ceph.client.rbd.keyring

使用 --keyring-k 选项可指定其他位置。

6.7 指定用户身份运行命令

bash

复制代码
# 使用 --id 或 -n
ceph --id rbd osd ls
ceph -n client.rbd osd ls

# 通过环境变量
export CEPH_ARGS='--id rbd'
ceph osd ls

7. 实践:创建受限用户并测试

7.1 创建仅能访问特定池的用户

bash

复制代码
# 创建池
ceph osd pool create testpool 32 32
rbd pool init testpool

# 创建用户,仅允许读写 testpool
ceph auth get-or-create client.tester mon 'allow r' osd 'allow rw pool=testpool' -o /etc/ceph/ceph.client.tester.keyring

# 验证
ceph --id tester osd pool ls
# 应该看到 testpool(以及其他池名称,但实际读写会被限制)

# 尝试写入 testpool
echo "test" > /tmp/testfile
rados --id tester -p testpool put obj1 /tmp/testfile   # 应成功

# 尝试写入其他池(如 images_pool)
rados --id tester -p images_pool put obj1 /tmp/testfile   # 应报错权限不足

7.2 在客户端节点使用

bash

复制代码
# 将密钥环和配置复制到客户端
scp /etc/ceph/ceph.client.tester.keyring client:/etc/ceph/
scp /etc/ceph/ceph.conf client:/etc/ceph/

# 在客户端测试
rbd --id tester --pool testpool create demo --size 1G
rbd --id tester map testpool/demo   # 映射成功

8. 配置修改最佳实践

  1. 优先使用集中配置数据库ceph config set),而非直接编辑 ceph.conf
  2. 对于需要立即生效的临时调整 ,使用 ceph tell
  3. 修改 ceph config set 后,无需重启大部分守护进程(某些参数如 public_network 需要重启)。
  4. 修改重要配置前,先使用 ceph config get 备份当前值。
  5. 使用 ceph config log 审计配置变更历史。

9. 本期小结与速查表

9.1 核心命令速查

操作 命令
查看所有可配置参数 ceph config ls
查看某个参数的帮助 ceph config help <key>
查看显式配置的项 ceph config dump
查看特定守护进程的所有配置(含默认值) ceph config show-with-defaults <daemon>
永久设置配置 ceph config set <who> <key> <value>
永久删除配置(恢复默认) ceph config rm <who> <key>
临时设置(重启丢失) ceph tell <daemon> config set <key> <value>
查看配置历史 ceph config log
回滚配置 ceph config reset <version>
列出用户 ceph auth list
获取用户详情 ceph auth get <entity>
创建用户并授权 ceph auth get-or-create <entity> <caps>
修改用户权限 ceph auth caps <entity> <caps>
删除用户 ceph auth del <entity>
导出密钥环 ceph auth export <entity> -o <file>
导入密钥环 ceph auth import -i <file>

9.2 关键配置参数示例

参数 作用 示例值
public_network 客户端/集群通信网络 192.168.108.0/24
cluster_network OSD 后端复制网络 192.168.101.0/24
mon_allow_pool_delete 是否允许删除存储池 true / false
osd_pool_default_size 新建池默认副本数 3
osd_pool_default_min_size 最小可用副本数 2
rbd_default_features 新建 RBD 镜像默认功能 layering,exclusive-lock,...
auth_service_required 服务间认证模式 cephx / none
mon_data_size_warn MON 数据库告警阈值 15G

下一期预告:Ceph 块存储(RBD)完全指南,包括镜像管理、快照、克隆、导出导入及跨集群 Mirror。

相关推荐
香气袭人知骤暖1 小时前
人大金仓(KingbaseES)Docker 容器自动备份方案
运维·docker·容器
天疆说1 小时前
在 Ubuntu 上安装 NASA GMAT R2026a 轨道设计软件
linux·运维·ubuntu
陈天伟教授1 小时前
安装 AutoCAD 时,“可选工具“ 的详细说明。
数据库
铅笔小新z1 小时前
【Linux】线程同步与互斥
linux·服务器
zcn1261 小时前
举一反三思路思考形如(列=参数 or decode函数)
数据库·sql优化改写
我命由我123451 小时前
UGC、PGC、PUGC 极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
武雄(小星Ai)1 小时前
Gemini CLI 免费用户6月18日停服,Google Antigravity 2.0 深度解读
运维·人工智能·agent
Xzh04231 小时前
Redis黑马点评 实战复盘与面试高频考点详解
java·数据库·redis·面试
大熊程序猿2 小时前
MarkItDown Docker安装
运维·docker·容器