Ceph FAQ 总结
生产环境如何部署Ceph
1. 在kubernetes零碎中应用CephCSI时,是Fuse好,还是KernelMod好?
因为容器在技术文件系统层面不存在隔离,而kubernetes中pod运行时kubelet组件
依赖各种fs相干的工具加载和检测文卷,因而Ceph产生零碎异样时,会影响整个工作节点。
因而举荐CephCSI部署是mount形式改为fuse,晋升零碎稳定性。
2. CephFS有没有必要部署为多活(MDS)模式,还须要做其余哪些筹备?
因为CephFS单活模式下,一个MDS服务治理整个文件系统树,局部文件出错会连累整个
文件系统,因而在条件容许的状况下尽量部署多活(MDS)模式。此外,倡议做好metadata
pool的数据备份,
3. 编排工具应用cephadm和rook哪个更好,他们之间有什么区别?
cephadm是ceph我的项目自带的编排工具,部署Ceph这个组件时能够通过批改配置脚本的形式使得各个节点的物理资源失去更加充沛的利用,并且以后版本曾经应用docker容器来运行ceph组件,比照传统的ansible等运维工具更贴合现在的潮流;rook-ceph则是第三方团队为ceph打造的编码工具,更贴合kubernetes业务,能够应用云原生的可观测组件,对容器、日志、网络等基础设施进行更好的监控,它更适应云上的编排环境,它将ceph组件运行在kubernetes的容器中,后续应用中可根据云厂商提供的富容器减少零碎的安全性和健壮性。
问题解决
1.客户端挂载ceph查看的容量与理论容量不符?如何解决osd之间数据不平衡问题?
此问题个别是因为局部OSD使用率远高于其余OSD的使用率导致,属于数据平衡性问题的一种。
利用osd utilization命令优化平衡性即可。
ceph osd reweight-by-utilization
2.如何解决osd crash down当前零碎中的报警?
ceph crash archive-all
3.如何解决ceph集群复原速度慢的问题?
# 仅思考数据恢复,不思考数据访问速度ceph tell 'osd.*' injectargs --osd_max_backfills 32ceph tell 'osd.*' injectargs --osd_recovery_max_active_hdd 16ceph tell 'osd.*' injectargs --osd_recovery_max_active_ssd 64ceph tell 'osd.*' injectargs --osd_recovery_sleep_hdd 0ceph tell 'osd.*' injectargs --osd_backfill_scan_min 32# 复原兼容性能模式ceph tell 'osd.*' injectargs --osd_max_backfills 8ceph tell 'osd.*' injectargs --osd_recovery_max_active_hdd 4ceph tell 'osd.*' injectargs --osd_recovery_max_active_ssd 16ceph tell 'osd.*' injectargs --osd_recovery_sleep_hdd 0.0001ceph tell 'osd.*' injectargs --osd_recovery_max_single_start 8# 生产环境ceph tell 'osd.*' injectargs --osd_max_backfills 4ceph tell 'osd.*' injectargs --osd_recovery_max_active_hdd 4ceph tell 'osd.*' injectargs --osd_recovery_max_active_ssd 16ceph tell 'osd.*' injectargs --osd_recovery_sleep_hdd 0.01ceph tell 'osd.*' injectargs --osd_recovery_max_single_start 4
4.如何修复有问题的pg?
ceph health detail# ...# pg 65.168 is incomplete, acting [12,5,10] (reducing pool aifs-data0 min_size from 2 may help; search ceph.com/docs for 'incomplete')# ...# 修复pgceph pg scrub 65.168ceph pg deep-scrub 65.168ceph pg repair 65.168# 修复pg所对应的osdceph osd repair 12ceph osd repair 5ceph osd repair 10
5.如何手动挪动pg从osd1到osd2?
ceph osd pg-upmap-items a.b 1 2
6.如何暂停Ceph中正在运行的服务,进行调试或是优化?
# 备份以后配置ceph osd set nooutkubectl get deployment rook-ceph-osd-$i -n rook-ceph > rook-ceph-osd-$i.yaml# 服务暂停kubectl -n rook-ceph patch deployment rook-ceph-osd-$i --type='json' -p '[{"op":"remove", "path":"/spec/template/spec/containers/0/livenessProbe"}]'kubectl -n rook-ceph patch deployment rook-ceph-osd-$i -p '{"spec": {"template": {"spec": {"containers": [{"name": "osd", "command": ["sleep", "infinity"], "args": []}]}}}}'#服务复原kubectl apply --replace -f rook-ceph-osd-$i.yamlceph osd unset noout
7.如果敞开一些ceph集群后盾执行的工作
#ceph osd set noout#ceph osd unset nooutceph osd set nocovery#ceph osd unset nocoveryceph osd set noscrub#ceph osd unset noscrubceph osd set nodeep-scrub#ceph osd unset nodeep-scrubceph osd set nobackfill#ceph osd unset nobackfill
8. 如何解决局部pg调用ceph osd force-create-pg并且通过长期期待仍无奈重建的问题?
9. 如何解决pg长期处于unknown状态?
# 重建pg对象ceph osd force-create-pg a.b# 当 force create 有效时执行上面的命令ceph osd pg-temp a.b 1 10 14ceph osd pg-upmap a.b 1 10 14
10. 如何显示更详尽的日志以不便调试和追踪问题
ceph tell osd.0 injectargs --debug-osd 0/5ceph tell mon.a injectargs --debug-osd 0/5ceph tell mds.a injectargs --debug-osd 0/5
11.如何关上和敞开本地ceph调试日志?
echo "module libceph +p" >/sys/kernel/debug/dynamic_debug/controlecho "module ceph +p" >/sys/kernel/debug/dynamic_debug/controlecho "module libceph -p" >/sys/kernel/debug/dynamic_debug/controlecho "module ceph -p" >/sys/kernel/debug/dynamic_debug/control
12. 批改解决因为rook ceph operator重置后的monitor集群后secret和configmap中mon_host不匹配的问题?
mon_host=$(kubectl -n rook-ceph get svc rook-ceph-mon-b -o jsonpath='{.spec.clusterIP}')kubectl -n rook-ceph patch secret rook-ceph-config -p '{"stringData": {"mon_host": "[v2:'"${mon_host}"':3300,v1:'"${mon_host"':6789]", "mon_initial_members": "'"${good_mon_id}"'"}}'
13.如何解决CephFS MDS服务无奈进入active状态的问题?
# Session tablecephfs-table-tool cephfs:all reset session# SnapServercephfs-table-tool cephfs:all reset snap# InoTablecephfs-table-tool cephfs:all reset inode# Journalcephfs-journal-tool --rank cephfs:all journal reset# Root inodes ("/" and MDS directory)cephfs-data-scan init --force-init
14.CephFS Monitor呈现容量报警。
[WRN] MON_DISK_BIG: mons a,b,c,d,e are using a lot of disk space mon.a is 18 GiB >= mon_data_size_warn (15 GiB) mon.b is 17 GiB >= mon_data_size_warn (15 GiB) mon.c is 18 GiB >= mon_data_size_warn (15 GiB) mon.d is 18 GiB >= mon_data_size_warn (15 GiB) mon.e is 18 GiB >= mon_data_size_warn (15 GiB)
排查此问题是须要察看集群是否处于HEALTH_OK状态,如果是的则应用‘解决办法1’,如果不是则须要进入问题排查流程
1.解决办法1:使mon进入数据压缩模式
ceph tell mon.* compact
2.解决办法2: 下乡正在产生预警的OSD
ceph osd.* down
3.解决办法3: 增大报警阈值
ceph config set global mon_data_size_warn 30GiB
15.Ceph Cluster Monitor呈现Slow OPS报警。
[WRN] SLOW_OPS: 10319 slow ops, oldest one blocked for 736 sec, daemons [mon.c,mon.d,mon.e,mon.h] have slow ops.
如果呈现Monintor处于失常工作状态中时不存在大量读写的状况,暂停正在进行数据同步的客户端,顺次排查其余组件是否呈现报警或者频繁的重启及上电。
16.Ceph 呈现Operator批改了Mon列表如何解决。
批改ConfigMap rook-ceph-csi-config rook-ceph-mon-endpoints
批改Secret rook-ceph-config
17.CephFS 如何进行Metadata数据修复
# Worker 0for i in {0..3}; do cephfs-data-scan scan_extents --worker_n $i --worker_m 16 <data pool># Worker 1for i in {4..7}; do cephfs-data-scan scan_extents --worker_n $i --worker_m 16 <data pool># Worker 2for i in {8..11}; do cephfs-data-scan scan_extents --worker_n $i --worker_m 16 <data pool># Worker 3for i in {12..15}; do cephfs-data-scan scan_extents --worker_n $i --worker_m 16 <data pool># Worker 0for i in {0..3}; do cephfs-data-scan scan_inodes --worker_n $i --worker_m 16 <data pool># Worker 1for i in {4..7}; do cephfs-data-scan scan_inodes --worker_n $i --worker_m 16 <data pool># Worker 2for i in {8..11}; do cephfs-data-scan scan_inodes --worker_n $i --worker_m 16 <data pool># Worker 3for i in {12..15}; do cephfs-data-scan scan_inodes --worker_n $i --worker_m 16 <data pool># Worker 0for i in {0..3}; do cephfs-data-scan scan_links --worker_n $i --worker_m 16# Worker 1for i in {4..7}; do cephfs-data-scan scan_links --worker_n $i --worker_m 16# Worker 2for i in {8..11}; do cephfs-data-scan scan_links --worker_n $i --worker_m 16# Worker 3for i in {12..15}; do cephfs-data-scan scan_links --worker_n $i --worker_m 16# 如何在Rook命名空间下查看data scan的执行进度kg po -n rook-ceph | grep rook-ceph-tools | awk '{ print $1; }' | xargs -I{} kubectl exec -ti {} -- ps aux | grep cephfs-data-scan
18. CephFS 如何为MetadataPool配置额定的备份?
# 首先,应该删除现有的文件系统(如果还没有删除的话),以避免对数据池的进一步批改。卸载所有客户端,而后标记文件系统失败:ceph fs fail <fs_name># 接下来,创立一个复原文件系统,咱们将在其中填充由原始数据池反对的新元数据池。ceph fs flag set enable_multiple true --yes-i-really-mean-itceph osd pool create cephfs_recovery_metaceph fs new cephfs_recovery recovery <data_pool> --allow-dangerous-metadata-overlay# 复原文件系统从一个MDS秩开始,它将用一些元数据初始化新的元数据池。# 这对于疏导复原是必要的。然而,当初咱们将敞开MDS,因为咱们不心愿它与元数据池进一步交互。ceph fs fail cephfs_recovery# 接下来,咱们将重置MDS创立的初始元数据:cephfs-table-tool cephfs_recovery:all reset sessioncephfs-table-tool cephfs_recovery:all reset snapcephfs-table-tool cephfs_recovery:all reset inode# 当初从数据池中复原元数据池:cephfs-data-scan init --force-init --filesystem cephfs_recovery --alternate-pool cephfs_recovery_metacephfs-data-scan scan_extents --alternate-pool cephfs_recovery_meta --filesystem <fs_name> <data_pool>cephfs-data-scan scan_inodes --alternate-pool cephfs_recovery_meta --filesystem <fs_name> --force-corrupt <data_pool>cephfs-data-scan scan_links --filesystem cephfs_recovery# 复原后,局部复原目录的统计信息会不正确。确保参数 mds_verify_scatter # 和 mds_debug_scatterstat 设置为false(默认值),避免MDS查看统计信息:ceph config rm mds mds_verify_scatterceph config rm mds mds_debug_scatterstat# (留神,配置也能够是全局设置的,也能够是通过ceph.conf文件设置的。)当初,容许MDS退出复原文件系统:ceph fs set cephfs_recovery joinable true# 最初,运行前向革除以修复统计信息。确保您有一个MDS正在运行并收回:ceph fs status # get active MDSceph tell mds.<id> scrub start / recursive repair
更多技术分享浏览我的博客:
https://thierryzhou.github.io
本文由mdnice多平台公布