集群运维实战
概述
Ceph集群运维是确保分布式存储系统稳定运行的关键环节。本文将从日常监控、故障处理、性能优化、扩容缩容等方面,全面介绍Ceph集群运维的最佳实践和实用技巧。
Cephadm 集群管理
Cephadm 简介
Cephadm是Ceph官方提供的集群管理工具,基于容器技术实现Ceph集群的部署和管理。它简化了集群的安装、升级和维护过程。
Cephadm 优势
- 容器化部署: 所有Ceph组件运行在容器中
- 简化管理: 统一的命令行界面
- 自动化运维: 自动处理节点故障和恢复
- 版本管理: 支持滚动升级和回滚
集群初始化
安装 Cephadm
# 安装cephadm
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/pacific/src/cephadm/cephadm
chmod +x cephadm
sudo mv cephadm /usr/local/bin/
# 或者使用包管理器安装
sudo dnf install -y cephadm
引导集群
# 初始化集群
sudo cephadm bootstrap --mon-ip 192.168.1.100
# 指定集群名称
sudo cephadm bootstrap --mon-ip 192.168.1.100 --cluster-name myceph
# 指定容器镜像
sudo cephadm bootstrap --mon-ip 192.168.1.100 --image quay.io/ceph/ceph:v16.2.7
获取集群信息
# 获取管理员密钥
sudo cephadm shell -- ceph auth get client.admin
# 获取Dashboard访问信息
sudo cephadm shell -- ceph mgr module ls | grep dashboard
sudo cephadm shell -- ceph dashboard ac-user-show admin
节点管理
添加节点
# 在新节点上安装SSH密钥
ssh-copy-id -f -i /etc/ceph/ceph.pub root@new-node
# 添加节点到集群
sudo cephadm shell -- ceph orch host add new-node 192.168.1.101
# 添加节点并指定标签
sudo cephadm shell -- ceph orch host add new-node 192.168.1.101 --labels _admin,mon,osd
查看节点状态
# 查看所有节点
sudo cephadm shell -- ceph orch host ls
# 查看节点详细信息
sudo cephadm shell -- ceph orch host ls --detail
# 查看节点标签
sudo cephadm shell -- ceph orch host ls --format json | jq '.[] | {hostname: .hostname, labels: .labels}'
管理节点标签
# 添加标签
sudo cephadm shell -- ceph orch host label add node1 mon
sudo cephadm shell -- ceph orch host label add node2 osd
# 移除标签
sudo cephadm shell -- ceph orch host label rm node1 mon
# 设置维护模式
sudo cephadm shell -- ceph orch host maintenance enter node1
sudo cephadm shell -- ceph orch host maintenance exit node1
服务管理
部署 Monitor
# 部署Monitor到指定节点
sudo cephadm shell -- ceph orch apply mon --placement="node1,node2,node3"
# 部署Monitor到带标签的节点
sudo cephadm shell -- ceph orch apply mon --placement="label:mon"
# 指定Monitor数量
sudo cephadm shell -- ceph orch apply mon 3
部署 Manager
# 部署Manager
sudo cephadm shell -- ceph orch apply mgr --placement="node1,node2"
# 部署Manager到带标签的节点
sudo cephadm shell -- ceph orch apply mgr --placement="label:mgr"
部署 OSD
# 自动发现并部署所有可用磁盘
sudo cephadm shell -- ceph orch apply osd --all-available-devices
# 在特定节点部署OSD
sudo cephadm shell -- ceph orch daemon add osd node1:/dev/sdb
# 使用设备规格部署OSD
sudo cephadm shell -- ceph orch apply osd --data-devices /dev/sdb --db-devices /dev/sdc1
查看服务状态
# 查看所有服务
sudo cephadm shell -- ceph orch ls
# 查看特定服务
sudo cephadm shell -- ceph orch ls --service_name mon
# 查看服务详细信息
sudo cephadm shell -- ceph orch ps
# 查看特定守护进程
sudo cephadm shell -- ceph orch ps --daemon_type osd
守护进程管理
守护进程操作
# 重启守护进程
sudo cephadm shell -- ceph orch daemon restart osd.1
# 停止守护进程
sudo cephadm shell -- ceph orch daemon stop osd.1
# 启动守护进程
sudo cephadm shell -- ceph orch daemon start osd.1
# 重新配置守护进程
sudo cephadm shell -- ceph orch daemon redeploy osd.1
守护进程日志
# 查看守护进程日志
sudo cephadm shell -- ceph orch daemon logs osd.1
# 实时查看日志
sudo cephadm shell -- ceph orch daemon logs osd.1 --follow
# 查看最近的日志
sudo cephadm shell -- ceph orch daemon logs osd.1 --lines 100
存储管理
磁盘发现
# 查看可用设备
sudo cephadm shell -- ceph orch device ls
# 查看特定节点的设备
sudo cephadm shell -- ceph orch device ls node1
# 查看设备详细信息
sudo cephadm shell -- ceph orch device ls --wide --refresh
OSD 管理
# 创建OSD
sudo cephadm shell -- ceph orch daemon add osd node1:/dev/sdb
# 移除OSD
sudo cephadm shell -- ceph orch daemon rm osd.1 --force
# 更换OSD
sudo cephadm shell -- ceph orch osd rm osd.1 --replace --force
存储规格
# 创建存储规格
sudo cephadm shell -- ceph orch apply osd --data-devices /dev/sdb --wal-devices /dev/sdc --db-devices /dev/sdd
# 使用YAML文件定义规格
cat > osd-spec.yaml << EOF
service_type: osd
service_id: default_drive_group
placement:
host_pattern: 'node*'
spec:
data_devices:
paths:
- /dev/sdb
db_devices:
paths:
- /dev/sdc1
wal_devices:
paths:
- /dev/sdc2
EOF
sudo cephadm shell -- ceph orch apply -i osd-spec.yaml
监控和告警
启用监控模块
# 启用Prometheus
sudo cephadm shell -- ceph mgr module enable prometheus
# 部署Prometheus
sudo cephadm shell -- ceph orch apply prometheus
# 部署Grafana
sudo cephadm shell -- ceph orch apply grafana
# 部署Alertmanager
sudo cephadm shell -- ceph orch apply alertmanager
配置监控
# 查看监控服务
sudo cephadm shell -- ceph orch ls | grep -E "(prometheus|grafana|alertmanager)"
# 获取Grafana访问信息
sudo cephadm shell -- ceph dashboard grafana-api-url
sudo cephadm shell -- ceph dashboard grafana-api-username
sudo cephadm shell -- ceph dashboard grafana-api-password
Cephadm 配置管理
集群配置
# 查看集群配置
sudo cephadm shell -- ceph config dump
# 修改配置
sudo cephadm shell -- ceph config set global mon_allow_pool_delete true
sudo cephadm shell -- ceph config set osd osd_memory_target 4294967296
# 生成配置文件
sudo cephadm shell -- ceph config generate-minimal-conf
部署规格管理
# 查看当前规格
sudo cephadm shell -- ceph orch ls --export
# 导出规格到文件
sudo cephadm shell -- ceph orch ls --export > cluster-spec.yaml
# 应用规格文件
sudo cephadm shell -- ceph orch apply -i cluster-spec.yaml
升级管理
版本管理
# 查看当前版本
sudo cephadm shell -- ceph versions
# 查看可用版本
sudo cephadm shell -- ceph orch upgrade ls
# 开始升级
sudo cephadm shell -- ceph orch upgrade start --ceph-version 16.2.7
# 暂停升级
sudo cephadm shell -- ceph orch upgrade pause
# 恢复升级
sudo cephadm shell -- ceph orch upgrade resume
升级监控
# 查看升级状态
sudo cephadm shell -- ceph orch upgrade status
# 查看升级历史
sudo cephadm shell -- ceph orch upgrade ls --historic
# 停止升级
sudo cephadm shell -- ceph orch upgrade stop
Cephadm 故障处理
节点故障
# 查看离线节点
sudo cephadm shell -- ceph orch host ls | grep -i offline
# 强制移除故障节点
sudo cephadm shell -- ceph orch host rm node1 --force
# 清理故障节点
sudo cephadm shell -- ceph orch host drain node1
守护进程故障
# 查看失败的守护进程
sudo cephadm shell -- ceph orch ps | grep -i error
# 重新部署失败的守护进程
sudo cephadm shell -- ceph orch daemon redeploy osd.1
# 查看守护进程事件
sudo cephadm shell -- ceph orch daemon events osd.1
Cephadm 备份和恢复
集群状态备份
# 导出集群规格
sudo cephadm shell -- ceph orch ls --export > /backup/cluster-spec.yaml
# 备份集群配置
sudo cephadm shell -- ceph config dump > /backup/cluster-config.conf
# 备份认证信息
sudo cephadm shell -- ceph auth export > /backup/cluster-auth.keyring
容器镜像管理
# 查看容器镜像
sudo cephadm shell -- ceph orch upgrade ls
# 预拉取镜像
sudo cephadm shell -- ceph orch upgrade start --image quay.io/ceph/ceph:v16.2.7 --dry-run
# 设置默认镜像
sudo cephadm shell -- ceph config set mgr mgr/cephadm/container_image_base quay.io/ceph/ceph
高级配置
自定义容器配置
# 设置容器资源限制
sudo cephadm shell -- ceph orch daemon add osd node1:/dev/sdb --memory-limit 8G --cpus 4
# 设置容器环境变量
sudo cephadm shell -- ceph orch apply osd --extra-container-args="-e CEPH_ARGS='--osd-objectstore=bluestore'"
网络配置
# 设置公共网络
sudo cephadm shell -- ceph config set global public_network 192.168.1.0/24
# 设置集群网络
sudo cephadm shell -- ceph config set global cluster_network 10.0.0.0/24
# 配置防火墙
sudo cephadm shell -- ceph orch apply firewall
Cephadm 最佳实践
部署建议
- 节点标签管理: 合理使用标签来组织节点角色
- 资源规划: 根据工作负载设置合适的资源限制
- 网络隔离: 分离公共网络和集群网络
- 监控集成: 部署完整的监控堆栈
运维建议
- 定期备份: 定期导出集群规格和配置
- 滚动更新: 使用cephadm的滚动升级功能
- 健康检查: 定期检查集群和守护进程状态
- 日志监控: 监控守护进程日志以发现问题
故障处理建议
- 快速响应: 利用cephadm的自动重启功能
- 节点隔离: 使用维护模式隔离故障节点
- 服务迁移: 利用placement规则实现服务迁移
- 数据保护: 在移除节点前确保数据完整性
常用命令速查
# 集群状态
sudo cephadm shell -- ceph -s
sudo cephadm shell -- ceph health detail
# 节点管理
sudo cephadm shell -- ceph orch host ls
sudo cephadm shell -- ceph orch host add <host> <ip>
sudo cephadm shell -- ceph orch host rm <host>
# 服务管理
sudo cephadm shell -- ceph orch ls
sudo cephadm shell -- ceph orch ps
sudo cephadm shell -- ceph orch daemon restart <daemon>
# 存储管理
sudo cephadm shell -- ceph orch device ls
sudo cephadm shell -- ceph osd tree
sudo cephadm shell -- ceph osd df
# 升级管理
sudo cephadm shell -- ceph orch upgrade status
sudo cephadm shell -- ceph orch upgrade start --ceph-version <version>
sudo cephadm shell -- ceph orch upgrade pause
通过使用Cephadm,Ceph集群的部署和管理变得更加简单和可靠。它提供了统一的管理界面,支持容器化部署,并且具有强大的自动化运维能力。
集群状态监控
基础状态检查
整体集群状态
# 查看集群整体状态
ceph -s
# 查看详细状态
ceph status
# 查看集群健康状态
ceph health
ceph health detail
集群容量信息
# 查看集群容量使用情况
ceph df
# 查看各个存储池的使用情况
ceph df detail
# 查看OSD使用情况
ceph osd df
组件状态监控
Monitor监控
# 查看Monitor状态
ceph mon stat
ceph mon dump
# 查看Monitor的法定人数
ceph quorum_status
# 查看Monitor的详细信息
ceph daemon mon.{id} mon_status
OSD监控
# 查看OSD状态
ceph osd stat
ceph osd tree
ceph osd dump
# 查看OSD的详细信息
ceph osd find {osd-id}
ceph daemon osd.{id} status
# 查看OSD性能统计
ceph daemon osd.{id} perf dump
PG监控
# 查看PG状态
ceph pg stat
ceph pg dump
# 查看异常PG
ceph pg dump_stuck
ceph pg dump_stuck inactive
ceph pg dump_stuck unclean
# 查看特定PG的详细信息
ceph pg {pg-id} query
性能监控
集群性能指标
# 查看集群实时性能
ceph -w
# 查看IOPS和带宽
ceph osd pool stats
# 查看延迟统计
ceph daemon osd.{id} dump_op_pq_state
监控工具集成
# 启用内置监控模块
ceph mgr module enable prometheus
ceph mgr module enable dashboard
# 配置Prometheus监控
ceph config set mgr mgr/prometheus/server_addr 0.0.0.0
ceph config set mgr mgr/prometheus/server_port 9283
日常运维操作
配置管理
查看和修改配置
# 查看配置
ceph config dump
ceph config show osd.{id}
# 修改配置
ceph config set osd osd_max_backfills 2
ceph config set global mon_allow_pool_delete true
# 重置配置
ceph config rm osd osd_max_backfills
配置文件管理
# 生成配置文件
ceph config generate-minimal-conf > /etc/ceph/ceph.conf
# 同步配置到所有节点
ceph orch apply osd --dry-run
认证管理
用户管理
# 创建用户
ceph auth get-or-create client.backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backup'
# 查看用户权限
ceph auth list
ceph auth get client.backup
# 删除用户
ceph auth del client.backup
密钥管理
# 导出密钥
ceph auth export client.backup > backup.keyring
# 导入密钥
ceph auth import -i backup.keyring
存储池管理
存储池操作
# 创建存储池
ceph osd pool create mypool 128 128
# 设置存储池配置
ceph osd pool set mypool size 3
ceph osd pool set mypool min_size 2
ceph osd pool set mypool crush_rule replicated_rule
# 查看存储池配置
ceph osd pool get mypool all
# 删除存储池
ceph osd pool rm mypool mypool --yes-i-really-really-mean-it
PG管理
# 调整PG数量
ceph osd pool set mypool pg_num 256
ceph osd pool set mypool pgp_num 256
# 查看PG分布
ceph pg dump_pools_json | jq '.pools[] | {pool_name: .pool_name, pg_num: .pg_num}'
故障处理
常见故障诊断
OSD故障
# 查看故障OSD
ceph osd tree | grep down
# 查看OSD日志
journalctl -u ceph-osd@{id} -f
# 重启OSD
systemctl restart ceph-osd@{id}
# 标记OSD为out(触发数据重平衡)
ceph osd out {id}
# 标记OSD为in
ceph osd in {id}
Monitor故障
# 查看Monitor状态
ceph mon stat
# 重启Monitor
systemctl restart ceph-mon@{hostname}
# 添加Monitor
ceph mon add {hostname} {ip}:{port}
# 移除Monitor
ceph mon remove {hostname}
PG异常处理
# 修复stuck PG
ceph pg {pg-id} mark_unfound_lost revert
# 强制清理PG
ceph pg {pg-id} mark_unfound_lost delete
# 手动触发PG恢复
ceph pg force-recovery {pg-id}
ceph pg force-backfill {pg-id}
数据恢复
深度清理
# 启动深度清理
ceph pg deep-scrub {pg-id}
# 检查所有PG
ceph pg scrub {pg-id}
# 查看清理状态
ceph pg dump | grep scrub
数据一致性检查
# 检查对象一致性
rados -p {pool-name} ls | head -10 | xargs -I {} rados -p {pool-name} stat {}
# 比较副本数据
ceph pg {pg-id} query | jq '.peer_info'
性能优化
硬件优化
磁盘优化
# 检查磁盘性能
fio --name=random-rw --ioengine=libaio --rw=randrw --bs=4k --direct=1 --numjobs=1 --runtime=60 --filename=/dev/sdb
# 优化磁盘调度器
echo mq-deadline > /sys/block/sdb/queue/scheduler
# 设置磁盘读写队列
echo 256 > /sys/block/sdb/queue/nr_requests
网络优化
# 检查网络延迟
ceph daemon osd.{id} dump_op_pq_state | jq '.ops[] | select(.description | contains("waiting for"))'
# 优化网络参数
echo 'net.core.rmem_max = 134217728' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 134217728' >> /etc/sysctl.conf
sysctl -p
配置优化
OSD配置优化
# 优化OSD性能参数
ceph config set osd osd_op_threads 8
ceph config set osd osd_disk_threads 4
ceph config set osd osd_recovery_max_active 5
ceph config set osd osd_max_backfills 2
# 优化BlueStore
ceph config set osd bluestore_cache_size 1073741824
ceph config set osd bluestore_cache_meta_ratio 0.4
网络配置优化
# 分离公网和集群网络
ceph config set global public_network 192.168.1.0/24
ceph config set global cluster_network 10.0.0.0/24
# 优化网络消息
ceph config set global ms_tcp_nodelay true
ceph config set global ms_tcp_rcvbuf 65536
监控配置优化
# 调整监控频率
ceph config set mgr mgr/prometheus/scrape_interval 15
ceph config set mon mon_osd_down_out_interval 300
扩容和缩容
扩容操作
添加OSD
# 准备磁盘
ceph-volume lvm prepare --data /dev/sdc
ceph-volume lvm activate {osd-id} {osd-fsid}
# 使用ceph-deploy添加OSD
ceph-deploy osd create {hostname}:{disk-path}
# 检查新OSD状态
ceph osd tree
添加Monitor
# 添加Monitor
ceph mon add {hostname} {ip}:{port}
# 验证Monitor状态
ceph mon stat
ceph quorum_status
添加新节点
# 添加新节点到集群
ceph orch host add {hostname} {ip}
# 在新节点上部署OSD
ceph orch daemon add osd {hostname}:{disk-path}
缩容操作
移除OSD
# 停止OSD
ceph osd out {osd-id}
# 等待数据迁移完成
ceph -w
# 停止OSD服务
systemctl stop ceph-osd@{osd-id}
# 从集群中移除OSD
ceph osd purge {osd-id} --yes-i-really-mean-it
移除Monitor
# 移除Monitor
ceph mon remove {hostname}
# 验证Monitor状态
ceph mon stat
备份和恢复
数据备份
RBD备份
# 创建RBD快照
rbd snap create {pool-name}/{image-name}@{snap-name}
# 导出RBD镜像
rbd export {pool-name}/{image-name} /backup/image.img
# 差异备份
rbd export-diff {pool-name}/{image-name}@{snap-name} /backup/image.diff
CephFS备份
# 创建CephFS快照
mkdir /mnt/cephfs/.snap/{snap-name}
# 使用rsync备份
rsync -av /mnt/cephfs/ /backup/cephfs/
对象存储备份
# 使用rados备份
rados -p {pool-name} export /backup/pool.backup
# 使用s3cmd备份
s3cmd sync s3://bucket/ /backup/s3/
配置备份
导出集群配置
# 导出Monitor map
ceph mon getmap -o /backup/monmap
# 导出OSD map
ceph osd getmap -o /backup/osdmap
# 导出CRUSH map
ceph osd getcrushmap -o /backup/crushmap
# 导出认证信息
ceph auth export > /backup/auth.backup
恢复配置
# 恢复认证信息
ceph auth import -i /backup/auth.backup
# 恢复CRUSH map
ceph osd setcrushmap -i /backup/crushmap
日志管理
日志收集
系统日志
# 查看Ceph相关日志
journalctl -u ceph-mon@{hostname} -f
journalctl -u ceph-osd@{id} -f
journalctl -u ceph-mgr@{hostname} -f
# 查看所有Ceph服务日志
journalctl -u 'ceph-*' -f
应用日志
# 查看OSD日志
tail -f /var/log/ceph/ceph-osd.{id}.log
# 查看Monitor日志
tail -f /var/log/ceph/ceph-mon.{hostname}.log
# 查看管理器日志
tail -f /var/log/ceph/ceph-mgr.{hostname}.log
日志分析
性能分析
# 查看慢操作
ceph daemon osd.{id} dump_historic_ops
# 分析操作延迟
ceph daemon osd.{id} dump_op_pq_state | jq '.ops[] | select(.duration > 1)'
错误分析
# 搜索错误日志
grep -i error /var/log/ceph/*.log
# 分析崩溃日志
ceph crash ls
ceph crash info {crash-id}
监控告警
告警规则
集群健康告警
# 设置健康检查
ceph config set global mon_health_to_clog_tick_interval 60
# 配置告警阈值
ceph config set global mon_osd_down_out_subtree_limit host
ceph config set global mon_osd_min_down_reporters 2
容量告警
# 设置容量告警阈值
ceph config set global mon_osd_full_ratio 0.95
ceph config set global mon_osd_backfillfull_ratio 0.90
ceph config set global mon_osd_nearfull_ratio 0.85
最佳实践
部署最佳实践
硬件配置
- Monitor节点: 高可用性,建议3/5/7个节点
- OSD节点: 推荐1个OSD对应1个磁盘
- 网络: 分离公网和集群网络,使用万兆网络
- 存储: SSD用于日志/DB,HDD用于数据存储
配置建议
# 推荐的基础配置
ceph config set global osd_pool_default_size 3
ceph config set global osd_pool_default_min_size 2
ceph config set global osd_pool_default_pg_num 128
ceph config set global mon_osd_full_ratio 0.95
ceph config set global mon_osd_nearfull_ratio 0.85
运维最佳实践
监控策略
- 实时监控集群健康状态
- 定期检查性能指标
- 设置合适的告警阈值
- 定期进行数据一致性检查
维护策略
- 定期备份配置和数据
- 制定详细的故障处理流程
- 定期进行灾难恢复演练
- 保持文档更新
安全策略
- 使用认证机制
- 限制网络访问
- 定期更新安全补丁
- 监控异常访问
故障排查清单
常见问题清单
集群无法启动
- 检查Monitor状态和法定人数
- 检查网络连接
- 检查磁盘空间
- 检查配置文件
性能问题
- 检查磁盘I/O性能
- 检查网络延迟
- 检查CPU和内存使用
- 检查PG分布
数据不一致
- 运行scrub检查
- 检查副本状态
- 检查磁盘错误
- 检查网络稳定性
紧急处理流程
集群不可用
- 立即检查Monitor状态
- 尝试重启关键服务
- 检查硬件故障
- 联系技术支持
数据丢失风险
- 停止所有写操作
- 评估数据完整性
- 准备恢复方案
- 执行数据恢复
总结
Ceph集群运维是一个复杂但系统性的工作,需要从多个维度进行管理:
核心要素
- 监控体系: 全面的监控和告警机制
- 故障处理: 快速的故障定位和恢复能力
- 性能优化: 持续的性能调优和容量规划
- 自动化: 减少人工操作,提高运维效率
成功关键
- 预防为主: 通过监控和预警避免问题发生
- 快速响应: 建立完善的故障处理流程
- 持续改进: 根据运维经验不断优化
- 文档管理: 保持运维文档的完整性和时效性