欢迎光临
我们一直在努力

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)和客户端可以从多个来源获取配置,优先级从低到高:

  • 编译内置默认值
  • 中央配置数据库(Monitor 维护,优先级高于本地配置文件)
  • 本地配置文件(/etc/ceph/ceph.conf)
  • 环境变量(如 CEPH_ARGS)
  • 命令行参数(如 –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 setceph 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.0、mon.ceph1,由 Ceph 内部使用。
    • 客户端账户:以 client. 为前缀,如 client.admin、client.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. 配置修改最佳实践

  • 优先使用集中配置数据库(ceph config set),而非直接编辑 ceph.conf。
  • 对于需要立即生效的临时调整,使用 ceph tell。
  • 修改 ceph config set 后,无需重启大部分守护进程(某些参数如 public_network 需要重启)。
  • 修改重要配置前,先使用 ceph config get 备份当前值。
  • 使用 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。

    赞(0)
    未经允许不得转载:171主机测评 » Ceph系列第三期:Ceph 集群核心配置与管理
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址