Ceph 运维管理:监控告警、故障排查与性能调优

Ceph 集群的运维管理是确保存储系统稳定运行的关键。本文介绍 Ceph 的日常运维、监控告警、故障排查、性能调优和备份恢复等实战技巧。


一、日常运维命令

1.1 集群状态检查

# 查看集群健康状态
ceph -s
ceph health
ceph health detail

# 输出示例:
#   cluster:
#     id:     xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
#     health: HEALTH_OK
#   services:
#     mon: 3 daemons, quorum
#     mgr: ceph-node1.active
#     osd: 6 osds: 6 up, 6 in
#   data:
#     raw usage: 500 GiB / 3 TiB

1.2 OSD 管理

# 查看 OSD 状态
ceph osd stat
ceph osd tree

# 查看 OSD 使用率
ceph osd df

# OSD 上下线
ceph osd out osd.0    # 下线
ceph osd in osd.0     # 上线

# 设置 OSD 权重
ceph osd crush reweight osd.0 1.0

# 查看 OSD 性能
ceph osd perf

1.3 PG 管理

# 查看 PG 状态
ceph pg stat
ceph pg dump

# 查看异常 PG
ceph pg dump_stuck

# 修复 PG
ceph pg repair 1.2f

# 查看 PG 分布
ceph pg ls-by-osd osd.0

1.4 服务管理

# 查看运行服务
ceph orch ps

# 查看主机
ceph orch host ls

# 重启服务
ceph orch restart mon.ceph-node1
ceph orch restart osd.1

# 查看服务日志
ceph orch logs mon.ceph-node1

二、监控告警配置

2.1 启用 Prometheus 模块

# 启用 Prometheus 模块
ceph mgr module enable prometheus

# 查看配置
ceph config show mgr mgr/prometheus/server_addr

# Prometheus 抓取地址:http://ceph-node1:9283/metrics

2.2 Prometheus 配置

# prometheus.yml 配置
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'ceph'
    static_configs:
      - targets: ['ceph-node1:9283', 'ceph-node2:9283', 'ceph-node3:9283']

2.3 Grafana 仪表盘

导入 Ceph 官方 Dashboard:

  • Dashboard ID: 2842(Ceph Cluster)
  • Dashboard ID: 5336(Ceph OSD)
  • Dashboard ID: 5342(Ceph Pool)
# 导入 Dashboard
# 1. 登录 Grafana
# 2. Dashboard -> Import
# 3. 输入 ID 或上传 JSON 文件
# 4. 选择 Prometheus 数据源

2.4 告警规则

# Prometheus 告警规则
groups:
- name: ceph
  rules:
  - alert: CephHealthWarning
    expr: ceph_health_status == 1
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "Ceph 集群警告"
      
  - alert: CephHealthError
    expr: ceph_health_status == 2
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Ceph 集群错误"
      
  - alert: CephOSDDown
    expr: ceph_osd_up == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "OSD {{ $labels.ceph_daemon }} 宕机"
      
  - alert: CephPoolUsageHigh
    expr: ceph_pool_percent_used > 85
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: "存储池 {{ $labels.pool }} 使用率超过 85%"

三、故障排查

3.1 OSD 故障

场景:OSD 宕机

# 1. 查看 OSD 状态
ceph osd tree | grep down

# 2. 查看 OSD 日志
ceph orch logs osd.1 --tail 100

# 3. 检查磁盘
smartctl -a /dev/sdb

# 4. 重启 OSD
ceph orch restart osd.1

# 5. 如果磁盘故障,更换磁盘
ceph osd out osd.1
ceph osd destroy osd.1 --yes-i-really-mean-it
ceph orch daemon add osd ceph-node1 --devices=/dev/sdc

场景:OSD 使用率不平衡

# 1. 查看 OSD 使用率
ceph osd df

# 2. 自动重新平衡
ceph osd reweight-by-utilization

# 3. 手动调整权重
ceph osd crush reweight osd.0 0.8

3.2 MON 故障

场景:MON 节点宕机

# 1. 查看 MON 状态
ceph mon stat
ceph mon dump

# 2. 重启 MON
ceph orch restart mon.ceph-node1

# 3. 如果无法恢复,删除并重新添加
ceph mon remove ceph-node1
ceph orch apply mon ceph-node1

3.3 PG 故障

场景:PG 卡住(stuck)

# 1. 查看卡住的 PG
ceph pg dump_stuck

# 2. 查看 PG 详情
ceph pg 1.2f query

# 3. 尝试修复
ceph pg repair 1.2f

# 4. 强制恢复(谨慎使用)
ceph pg force_create_clean 1.2f

3.4 网络故障

# 1. 检查网络连通性
ping ceph-node1 ceph-node2 ceph-node3

# 2. 检查端口
netstat -tlnp | grep 6789  # MON
netstat -tlnp | grep 6800  # OSD

# 3. 查看网络统计
ceph -w | grep -i network

四、性能调优

4.1 OSD 调优

# 调整 OSD 并发
ceph config set osd osd_op_threads 16
ceph config set osd osd_op_num_threads_per_shard 4

# 调整 OSD 内存
ceph config set osd osd_memory_target 4294967296

# 启用 BlueStore 缓存
ceph config set osd bluestore_cache_size_hdd 4294967296
ceph config set osd bluestore_cache_size_ssd 8589934592

4.2 网络调优

# 调整网络缓冲区
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

# 启用巨帧(如果网络支持)
ip link set dev eth0 mtu 9000

4.3 PG 数量调优

# 计算最佳 PG 数量
# 公式:PG 总数 = (OSD 数量 × 单 OSD 容量 TB) / 目标单 PG 容量 TB
# 目标单 PG 容量:0.1-0.5TB

# 查看当前 PG 数
ceph osd pool get rbd_pool pg_num

# 调整 PG 数(只能增加)
ceph osd pool set rbd_pool pg_num 128

# 调整 PG 副本数
ceph osd pool set rbd_pool pgp_num 128

五、备份与恢复

5.1 集群配置备份

# 备份 MON 数据
ceph-mon -i ceph-node1 --extract-monmap /backup/monmap

# 备份 OSD 密钥
cp /var/lib/ceph/bootstrap-osd/ceph.keyring /backup/

# 备份整个配置
tar czf /backup/ceph-config-$(date +%Y%m%d).tar.gz /etc/ceph/

5.2 RBD 备份

# 导出镜像
rbd export rbd_pool/image1 /backup/image1.img

# 增量备份
rbd export-diff rbd_pool/image1 /backup/image1.diff --from-snap snap1

# 使用 rbd-mirror 远程复制
rbd mirror image enable rbd_pool/image1 snapshot

5.3 灾难恢复

# 1. 从 MONMap 恢复
ceph-mon -i ceph-node1 --inject-monmap /backup/monmap

# 2. 恢复 OSD
ceph-osd -i 1 --mkfs

# 3. 重新导入配置
cp /backup/ceph.client.admin.keyring /etc/ceph/

六、扩容操作

6.1 添加 OSD 节点

# 1. 准备新节点(安装 Docker、配置 SSH)
ssh-copy-id root@ceph-node4

# 2. 添加主机到集群
ceph orch host add ceph-node4 192.168.1.104

# 3. 部署 OSD
ceph orch device ls --wide  # 查看可用磁盘
ceph orch apply osd --all-available-devices --host=ceph-node4

# 4. 验证
ceph osd tree

6.2 添加 MON 节点

# 添加 MON
ceph orch apply mon ceph-node4

# 验证
ceph mon stat
ceph quorum_status

6.3 扩容存储池

# 增加 PG 数量
ceph osd pool set rbd_pool pg_num 256
ceph osd pool set rbd_pool pgp_num 256

# 等待数据重平衡
ceph -w

七、安全加固

7.1 启用加密

# 启用集群内部加密
ceph config set global ms_bind_crc32c false
ceph config set global ms_bind_require_sign true

# 启用 OSD 加密
ceph config set osd osd_encrypt_data true

7.2 审计日志

# 启用审计
ceph config set mon mon_audit_enabled true
ceph config set mon mon_audit_file /var/log/ceph/ceph.audit.log

总结

通过本文,你掌握了 Ceph 运维管理的核心技能:

  • ✅ 日常运维命令和状态检查
  • ✅ Prometheus + Grafana 监控告警
  • ✅ 常见故障排查方法
  • ✅ 性能调优参数
  • ✅ 备份恢复策略
  • ✅ 集群扩容操作

运维建议:

  1. 定期检查集群健康状态
  2. 配置完善的监控告警
  3. 定期备份配置和数据
  4. 建立变更管理流程
  5. 保持 Ceph 版本更新

🔗 相关链接

Ceph 教程系列到此结束,感谢阅读!如有疑问欢迎留言讨论!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注