ceph PG故障排除

2024-05-30 00:32
文章标签 排除 故障 pg ceph

本文主要是介绍ceph PG故障排除,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!




配置组无法清空

有些情况下Ceph的配置组无法清空:

1. 只有一个OSD:如果你不是从quick start开始,只有一个OSD的话,你很可能会遇到问题。OSD会向监控上报其他的OSD,当需要拷贝数据的时候也需要和其他的OSD交互.如果你只有一个OSD,第二个OSD就不能检测到它的心跳数据。而且,如果你删除了一个OSD,只剩下一个OSD的时候,你也会遇到问题。第二个和第三个OSD会从另外的OSD那里得到配置组的数据,如果那个OSD缺失,这个过程就无法完成。因此,配置组一直保持在“stale”状态。

2. Pool Size = 1: 如果一个对象只有一个拷贝,其他的OSD无法告知该OSD它拥有哪些配置组。对于每个存在的OSD对应的配置组(参见ceph的pg dump),你可以强制OSD检查它运行所需要的配置组。



ceph pg force_create_pg <pgid>


3. 3. CRUSH规则:另外一个配置组无法清空的情况是你的CRUSH 映射出现了错误。

一般来说,你应该在集群中运行多个OSD,pool size也应该大于1



配置组不响应

在某个步骤执行失败的时候通常配置组会进入"degraged"或者"peering"状态。通常,这些状态表明,程序正在从错误中恢复。但是,当一个配置组一直保持在这种状态,也许预示着一个更大的问题。因此,监控系统会在配置组卡在某个状态的时候发出警告。尤其需要检查这些状态:

   inactive - 配置组已经长时间处于非激活状态(比如,它一直无法处理读写请求)
   unclean - 配置组长时间未被清理(比如,它没有完全从上一个错误中恢复)
   stale - 配置组的状态没有被OSD更新过,意味着所有存储在该配置组的节点都down掉了



你可以用下面的方法列出不响应的配置组:



ceph pg dump_stuck stale

ceph pg dump_stuck inactive

ceph pg dump_stuck unclean


对于处在stale状态的配置组,通常让对应的OSD运行起来即可。对于处在inactive的配置组,通常是peer问题(参见配置组不可用-Peering Failure)。 对于处在unclena状态的配置组,通常是由于恢复过程被阻止,导致无法完成,比如对象为找到(参见对象缺失问题)



配置组不可用 - 同等操作失败

在特定情况下,ceph-OSD同等进程会出现问题,导致PG无法激活。比如ceph的检测系统会报告:



ceph health detail
HEALTH_ERR 7 pgs degraded; 12 pgs down; 12 pgs peering; 1 pgs recovering; 6 pgs stuck unclean; 114/3300 degraded (3.455%); 1/3 in osds are down
...
pg 0.5 is down+peering
pg 1.4 is down+peering
...
osd.1 is down since epoch 69, last address 192.168.106.220:6801/8651

我们查询集群以确定PG不可用的准确原因是:



ceph pg 0.5 query


{ "state": "down+peering",
 ...
 "recovery_state": [
      { "name": "Started\/Primary\/Peering\/GetInfo",
        "enter_time": "2012-03-06 14:40:16.169679",
        "requested_info_from": []},
      { "name": "Started\/Primary\/Peering",
        "enter_time": "2012-03-06 14:40:16.169659",
        "probing_osds": [
              0,
              1],
        "blocked": "peering is blocked due to down osds",
        "down_osds_we_would_probe": [
              1],
        "peering_blocked_by": [
              { "osd": 1,
                "current_lost_at": 0,
                "comment": "starting or marking this osd lost may let us proceed"}]},
      { "name": "Started",
        "enter_time": "2012-03-06 14:40:16.169513"}
  ]
}

恢复状态告诉我们peer被阻塞,因为ceph-OSD进程未运行,尤其是OSD.1 。这种情况下,我们可以启动指定的OSD,问题就会得到解决。

另外,如果OSD.1出现比较严重的错误(比如磁盘错误),我们可以通知集群OSD.1缺失,让其尽量从其它地方获取。

重要:当集群不能保证数据的其它拷贝持久和最新的,这种方法会带来较大的风险。

引导ceph继续运行:



ceph osd lost 1

会启动恢复。



对象缺失

当一些错误同时出现时,会出现对象缺失:



ceph health detail
HEALTH_WARN 1 pgs degraded; 78/3778 unfound (2.065%)
pg 2.4 is active+degraded, 78 unfound

这意味着存储集群知道一些对象(或者对象的拷贝)存在,但是没有发现它们的拷贝。下面是当PG的数据在ceph-OSD1和ceph-OSD2时的例子:

   1. OSD1不可用
   2. 只有OSD2处理写请求
   3. OSD1启动
   4. OSD1和OSD2重新通信,OSD1上缺失的对象进入恢复队列
   5. 在新对象完成拷贝前,OSD2 down掉

现在OSD1知道这些对象存在,但是找不到其拷贝.这种情况下,对那些对象的请求会被阻塞,集群会认为down掉的节点会很快恢复;这时候会返回一个IO错误给用户。

首先,你能用下面的方法判断哪些对象找不到:



ceph pg 2.4 list_missing [starting offset, in json]


{ "offset": { "oid": "",
    "key": "",
    "snapid": 0,
    "hash": 0,
    "max": 0},
"num_missing": 0,
"num_unfound": 0,
"objects": [
   { "oid": "object 1",
     "key": "",
     "hash": 0,
     "max": 0 },
   ...
],
"more": 0}


如果单次查询的列表过长,列表上会出现more,你可以继续查看剩下的列表.(最终命令行工具会隐藏它,但是暂时还未隐藏)



第二,你可以确定哪些OSD已经被探测或者包含数据:



ceph pg 2.4 query
"recovery_state": [
    { "name": "Started\/Primary\/Active",
      "enter_time": "2012-03-06 15:15:46.713212",
      "might_have_unfound": [
            { "osd": 1,
              "status": "osd is down"}]},

在这种情况下,比如,集群知道OSD.1也许有数据,但是OSD.1 down掉了了。所有可能的状态包括:



* already probed
* querying
* osd is down
* not queried (yet)

有时,集群需要一些时间来查询可能的位置。

对象也可能存在未列出的位置上。比如,如果一个ceph-OSDS被停止,而且被移出了集群,集群恢复之后,再次出现错误的时候就会遇到对象找不到的情况,被移出的ceph-OSD未被考虑进来。(这种情况是我们不愿意看到的)

如果所有可能的位置都已经被查询,但是对象仍然找不到,你也许不得不放弃那些对象了。这种情况也会报出一些错误,让集群知道已经执行的写操作要在数据恢复之前进行。将"unfound"对象标记为"lost":



ceph pg 2.5 mark_unfound_lost revert

最后,我们需要明确集群是如何处理丢失的对象的。当前支持的选项是“revert”,将对象恢复到之前的版本或者(当有副本时)忽略它。使用这个功能的时候要小心,因为它也许会让使用它的程序产生错误。



配置组无归属

即使所有的OSD都有某个配置组的拷贝也可能会失败。如果是这种情况,对象存储的子集不可用,监控系统会收不到那个配置组的状态更新。为了检测到这种情况,监测系统会将主OSD失败的配置组标记为stale。比如:



ceph health

HEALTH_WARN 24 pgs stale; 3/300 in osds are down


你可以用下面的方式找出那些配置组是stale状态和上一次存储它们的是哪些OSD



ceph health detail
HEALTH_WARN 24 pgs stale; 3/300 in osds are down
...
pg 2.5 is stuck stale+active+remapped, last acting [2,0]
...
osd.10 is down since epoch 23, last address 192.168.106.220:6800/11080
osd.11 is down since epoch 13, last address 192.168.106.220:6803/11539
osd.12 is down since epoch 24, last address 192.168.106.220:6806/11861

如果我们想让配置组恢复到在线状态,比如,这告诉我们它之前是OSD.0和osd.2管理的。重启ceph-osd进程会让集群恢复这个配置组(其它也一样)



OSD接收仅少量的数据

如果你的集群有许多节点,只有部分能收到数据,检查你的资源池的配置组数量,因为配置组和OSD有映射关系,一小部分的配置组不会覆盖到你的整个集群。尝试创建一个新的资源池,保证配置组的数量是OSD数量的倍数。参加配置组章节。默认的配置组数量并没有效,你可以修改它。



无法写入数据


如果你的集群在运行状态中,但是一些OSD down掉了,你无法写入数据,检查一下,确保你的OSD是够用的。如果你OSD数量过少,ceph不会允许你写入数据,因为ceph无法保证能够拷贝你的数据。参见Pool,PG和CRUSH配置中的osd资源值的最小值。


pg 不一致问题

HEALTH_ERR 1 pgs inconsistent; 1 scrub errors 报不一致问题。先查看不一致pg id:  ceph health detail
修复pg : ceph pg repair pgid

这篇关于ceph PG故障排除的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015069

相关文章

k8s集群master故障恢复笔记

剔除故障节点 kubectl drain master故障节点 kubectl delete node master故障节点 kubeadm reset rm -rf /etc/kubernetes/manifests mkdir -p /etc/kubernetes/pki/etcd/ 从master其他节点拷 scp /etc/kubernetes/pki/ca.crt ca.k

微软搁置水下数据中心项目——项目纳蒂克相比陆地服务器故障更少

“我的团队努力了,并且成功了,”CO+I负责人诺埃尔·沃尔什说。 微软已悄然终止了始于2013年的水下数据中心(UDC)项目“纳蒂克”。该公司向DatacenterDynamics确认了这一消息,微软云运营与创新部门负责人诺埃尔·沃尔什表示:“我不会在世界任何地方建造海底数据中心。”她随后补充道:“我的团队进行了这个项目,而且效果很好。我们学到了很多关于海平面以下操作的知识,包括振动对服务器的影

LabVIEW开发电机故障监测系统

开发了一套基于LabVIEW的智能电机故障监测系统,通过实时监测和分析电机运行参数,实现故障预测和诊断。系统集成了振动传感器、温度传感器、数据采集模块和分析模块,利用RS-485通信总线和Modbus协议确保数据的高精度实时传输,故障预测准确率达98%。 项目背景 电机作为工业生产中的关键设备,其故障会导致生产停滞和经济损失。因此,开发一个能实时监控电机状态并预测潜在故障的系统具有重要意义。本系

LabVIEW电机故障监测系统

电机作为工业生产中的关键设备,其故障会导致生产停滞和经济损失。因此,开发一个能实时监控电机状态并预测潜在故障的系统具有重要意义。通过高效的数据采集和分析技术,提升故障诊断的准确性和及时性。 系统组成 该系统由以下部分组成: 振动传感器:用于监测电机的振动情况。 温度传感器:用于监测电机的温度变化。 数据采集模块:包括PT100温度传感器、HG-ZD-20A一体化振动变送器和亚为YAV

实际中路由器故障处理方法

1.路由器的部分功能无法实现 (1)故障现象:路由器配置完全正确,但是有些功能却不能实现。 (2)故障原因:如果是在确保路由器配置正确的前提下,那么问题应该就在路由器的软件系统上。 (3)解决方法:升级软件系统,因为路由器的系统软件往往有许多版本,每个版本支持的功能有所不同,出现这种情况最大的可能就是当前的软件系统版本不支持某些功能,而导致路由器部分功能的丧失。所以,如无意外,进行相应的软件升级就

让PG停摆一周的大会?2024 PGConf.dev 技术大盘点(下)

PGCon.Dev 的前身是 PGCon —— 最知名的 PostgreSQL Hacker 年度聚会,也可以说是决定 PostgreSQL 未来的会议。从 2007 年成立以来,一直都是在加拿大渥太华举办至今。 有多隆重呢?PG 核心组的 Peter Eisentraut 在会后做了一个统计,在这次 PGCon.Dev 期间 PostgreSQL 代码库没有一次 Commit 发生,出现了

Ceph入门到精通-shell脚本读取指定文件,并按行使用rclone命令进行复制操作

要使用shell脚本读取指定文件,并按行使用rclone命令进行复制操作,您可以编写一个简单的脚本来实现这一功能。以下是一个示例脚本,它将读取指定文件的每一行,然后使用rclone copy命令将远程存储中的文件复制到本地目录。 首先,创建一个新的shell脚本文件,例如download_files.sh,并在文件中写入以下内容: #!/bin/bash# 指定要读取的文件路径INPUT_F

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别 目录 分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别。 2.自带数据,多输入,

Jackson 转json 时日期格式化,排除字段,包含字段

package com.dj.spring3.jackson;  import org.codehaus.jackson.map.SerializationConfig;  import org.codehaus.jackson.map.introspect.BasicBeanDescription;  import org.codehaus.jackson.map.ser.Be

印刷过程中纸张弓皱现象及排除方法

在印刷过程中,纸张弓皱(起褶子)是最常见的故障之一,经济损失比较大,产生这类故障的原因主要有两个方面:一是纸张本身所造成的(大多出现在非涂料纸张),二是机器调节使用不当,下面按其形状来进一步分析其原因及处理方法。 1、小散发形褶子 产生这类褶子的原因: (1)纸张吸潮后产生的“荷叶边”(纸张本身含水量不匀或车间相对湿度较高,纸张含水量较低)。 (2)两面印刷的印件背面墨迹“堆滚筒”(压印滚筒表面堆