ceph osd因为ReplicatedBackend::recover_object crash

文章描述了在Ceph版本15.2.14的Octopus稳定版中,OSD在恢复过程中出现错误导致挂起。用户提到通过关闭恢复并重启OSD来临时解决问题,但可能导致数据丢失。详细展示了报错日志和处理步骤。

这应该是ceph version 15.2.14 (cd3bb7e87a2f62c1b862ff3fd8b1eec13391a5be) octopus (stable)的一个bug。

osd会在recovery的时候挂掉。报错日志如下。因为是实际使用的环境,目前并不能对于ceph进行修复或者升级。所以只能用命令“ceph osd set norecover ”把ceph的recovery先关掉,然后再启动osd,才行。虽然会有部分object丢失了就无法找到了,但是总比osd完全起不来好。

-12> 2023-08-01T22:36:02.702+0800 7f4f6f5b7700 10 monclient: handle_auth_request added challenge on 0x55d3267ca400

 ceph version 15.2.14 (cd3bb7e87a2f62c1b862ff3fd8b1eec13391a5be) octopus (stable)
 1: (ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x14c) [0x55d30e0ea261]
 2: (()+0x4df429) [0x55d30e0ea429]
 3: (()+0x8e773d) [0x55d30e4f273d]
 4: (ReplicatedBackend::recover_object(hobject_t const&, eversion_t, std::shared_ptr<ObjectContext>, std::shared_ptr<ObjectContext>, PGBackend::RecoveryHandle*)+0x16f) [0x55d30e4ead1f]
 5: (PrimaryLogPG::prep_object_replica_pushes(hobject_t const&, eversion_t, PGBackend::RecoveryHandle*, bool*)+0x559) [0x55d30e2ea2a9]
 6: (PrimaryLogPG::recover_replicas(unsigned long, ThreadPool::TPHandle&, bool*)+0x1330) [0x55d30e32d2c0]
 7: (PrimaryLogPG::start_recovery_ops(unsigned long, ThreadPool::TPHandle&, unsigned long*)+0x106) [0x55d30e334bb6]
 8: (OSD::do_recovery(PG*, unsigned int, unsigned long, ThreadPool::TPHandle&)+0x232) [0x55d30e1cde92]
 9: (ceph::osd::scheduler::PGRecovery::run(OSD*, OSDShard*, boost::intrusive_ptr<PG>&, ThreadPool::TPHandle&)+0x19) [0x55d30e40a089]
 10: (OSD::ShardedOpWQ::_process(unsigned int, ceph::heartbeat_handle_d*)+0x143a) [0x55d30e1e9e6a]
 11: (ShardedThreadPool::shardedthreadpool_worker(unsigned int)+0x5b6) [0x55d30e7d5a56]
 12: (ShardedThreadPool::WorkThreadSharded::entry()+0x10) [0x55d30e7d85a0]
 13: (()+0x7ea5) [0x7f4f73f78ea5]
 14: (clone()+0x6d) [0x7f4f72e3c8dd]

     0> 2023-08-01T22:36:02.754+0800 7f4f51cfd700 -1 *** Caught signal (Aborted) **
 in thread 7f4f51cfd700 thread_name:tp_osd_tp

 ceph version 15.2.14 (cd3bb7e87a2f62c1b862ff3fd8b1eec13391a5be) octopus (stable)
 1: (()+0xf630) [0x7f4f73f80630]
 2: (gsignal()+0x37) [0x7f4f72d74387]
 3: (abort()+0x148) [0x7f4f72d75a78]
 4: (ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x19b) [0x55d30e0ea2b0]
 5: (()+0x4df429) [0x55d30e0ea429]
 6: (()+0x8e773d) [0x55d30e4f273d]
 7: (ReplicatedBackend::recover_object(hobject_t const&, eversion_t, std::shared_ptr<ObjectContext>, std::shared_ptr<ObjectContext>, PGBackend::RecoveryHandle*)+0x16f) [0x55d30e4ead1f]
 8: (PrimaryLogPG::prep_object_replica_pushes(hobject_t const&, eversion_t, PGBackend::RecoveryHandle*, bool*)+0x559) [0x55d30e2ea2a9]
 9: (PrimaryLogPG::recover_replicas(unsigned long, ThreadPool::TPHandle&, bool*)+0x1330) [0x55d30e32d2c0]
 10: (PrimaryLogPG::start_recovery_ops(unsigned long, ThreadPool::TPHandle&, unsigned long*)+0x106) [0x55d30e334bb6]
 11: (OSD::do_recovery(PG*, unsigned int, unsigned long, ThreadPool::TPHandle&)+0x232) [0x55d30e1cde92]
 12: (ceph::osd::scheduler::PGRecovery::run(OSD*, OSDShard*, boost::intrusive_ptr<PG>&, ThreadPool::TPHandle&)+0x19) [0x55d30e40a089]
 13: (OSD::ShardedOpWQ::_process(unsigned int, ceph::heartbeat_handle_d*)+0x143a) [0x55d30e1e9e6a]
 14: (ShardedThreadPool::shardedthreadpool_worker(unsigned int)+0x5b6) [0x55d30e7d5a56]
 15: (ShardedThreadPool::WorkThreadSharded::entry()+0x10) [0x55d30e7d85a0]
 16: (()+0x7ea5) [0x7f4f73f78ea5]
 17: (clone()+0x6d) [0x7f4f72e3c8dd]
 NOTE: a copy of the executable, or `objdump -rdS <executable>` is needed to interpret this.

<think>好的,用户想知道如何在生产环境中使用Prometheus和Grafana监控Ceph的IOPS指标,特别是配置相关的指标如rate(ceph_osd_op_r)和rate(ceph_osd_op_w)。首先,我需要回顾一下Ceph监控的基本流程,以及Prometheus和Grafana的集成方法。 根据引用3,Ceph Manager的Prometheus模块会在每个节点部署exporter,采集监控数据。所以第一步应该确认Prometheus模块是否启用。用户可能需要执行命令如`ceph mgr module enable prometheus`来启用模块,并检查exporter的端口(默认9283)是否可访问。 接下来,Prometheus需要正确配置以抓取这些exporter的数据。引用2提到集成grafana数据源和导入模板,比如编号9966的仪表盘。这可能涉及在Prometheus的配置文件中添加job,指定各个Ceph节点的targets,然后重启服务使配置生效。 关于IOPS指标,Ceph通常提供ceph_osd_op_r和ceph_osd_op_w这两个计数器,分别代表读取和写入的操作次数。要计算IOPS,需要使用PromQL的rate函数,比如rate(ceph_osd_op_r[1m]),这样可以得到每秒的读取操作数。同样的,写入的IOPS也是类似的处理方式。用户可能需要在Grafana中创建面板,添加对应的查询表达式,并设置合适的显示方式,如折线图或仪表盘。 此外,引用2还提到了导入现有的Grafana模板,这可能节省配置时间。需要指导用户如何导入模板,并调整其中的查询语句以符合实际环境。同时,需要注意监控数据的粒度和保留时间,确保生产环境中的性能数据能够有效存储和查询。 可能还需要考虑高可用性和扩展性,比如Prometheus的联邦配置或使用Thanos进行长期存储。另外,报警规则的设置也是重要的一环,当IOPS超过阈值时触发警报,帮助及时发现问题。 用户的问题可能还涉及验证步骤,比如如何确认Prometheus正确抓取了数据,或者如何在Grafana中调试查询语句。需要提供具体的检查方法,例如访问Prometheus的web界面,执行对应的PromQL查询,查看是否有数据返回。 最后,应该总结整个流程,确保每一步都清晰,并提醒用户注意常见问题,比如端口冲突、权限问题或网络连通性,这些都可能影响监控系统的正常运行。</think>### 生产环境中使用 Prometheus 和 Grafana 监控 Ceph 的 IOPS 指标 #### 1. **启用 Ceph 的 Prometheus 模块** - **步骤**: 1. 在 Ceph 集群的任一管理节点执行命令启用 Prometheus 模块: ```bash ceph mgr module enable prometheus ``` 2. 验证模块是否启用(默认暴露端口为 `9283`): ```bash curl http://<ceph-node-ip>:9283/metrics ``` - **作用**:启用后,Ceph 的每个节点会通过 `ceph-mgr` 进程暴露监控指标,包括 OSD 的读写操作计数 `ceph_osd_op_r` 和 `ceph_osd_op_w`[^3]。 --- #### 2. **配置 Prometheus 采集 Ceph 指标** - **步骤**: 1. 在 `prometheus.yml` 配置文件中添加 Ceph 监控任务: ```yaml scrape_configs: - job_name: 'ceph' static_configs: - targets: ['ceph-node-1:9283', 'ceph-node-2:9283', ...] # 替换为实际节点 IP 和端口 ``` 2. 重启 Prometheus 服务使配置生效。 3. 访问 Prometheus Web 界面(默认 `http://<prometheus-server>:9090`),输入 `rate(ceph_osd_op_r[1m])` 验证是否采集到数据[^3][^2]。 --- #### 3. **在 Grafana 中展示 IOPS 指标** - **步骤**: 1. 添加 Prometheus 数据源: - 进入 Grafana → Configuration → Data Sources → Add data source → 选择 Prometheus,填写 URL(如 `http://prometheus-server:9090`)。 2. **导入 Ceph 监控模板**: - 使用社区模板(如 ID `9966`):进入 Import → 输入模板 ID → 选择数据源为刚添加的 Prometheus。 3. **自定义 IOPS 面板**(可选): ```promql # 读取 IOPS(按 OSD 聚合) sum(rate(ceph_osd_op_r{job="ceph"}[1m])) by (ceph_daemon) # 写入 IOPS(按 OSD 聚合) sum(rate(ceph_osd_op_w{job="ceph"}[1m])) by (ceph_daemon) ``` - 在 Grafana 中创建 Panel,选择上述查询表达式,设置图表类型为折线图或仪表盘。 --- #### 4. **关键指标解释** - **`ceph_osd_op_r` 和 `ceph_osd_op_w`**: - 表示 OSD 的累积读写操作次数(计数器类型)。 - 通过 `rate()` 函数计算每秒操作数(即 IOPS)。例如:`rate(ceph_osd_op_r[1m])` 表示过去 1 分钟的平均读取 IOPS。 - **典型场景**: - 集群级 IOPS:`sum(rate(ceph_osd_op_r[5m]))` - 单 OSD 性能分析:`rate(ceph_osd_op_w{ceph_daemon="osd.1"}[5m])` --- #### 5. **生产环境注意事项** - **性能优化**: - 调整 Prometheus 的抓取间隔(如 `scrape_interval: 15s`),避免高频采集导致负载过高。 - 使用 Prometheus 的长期存储方案(如 Thanos 或 Cortex)以支持历史数据分析[^2]。 - **告警配置**: - 在 Prometheus 或 Grafana 中设置告警规则,例如当某 OSD 的 IOPS 超过阈值时触发通知: ```yaml alert: High_Write_IOPS expr: rate(ceph_osd_op_w{job="ceph"}[5m]) > 1000 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值