CEPH PG incomplete状态修复

2023-11-16

某运营商的Kubernetes项目物理机停机维护,重启后Kubernetes部分pod无法挂载PVC,请求超时。该Kubernetes集群的后端存储使用ceph rbd块存储,检查ceph集群状态异常。

[root@ceph-node01~]# ceph -s 
  cluster:
    id:     3c09c565-7421-411d-b9e0-5a370967556f
    health: HEALTH_WARN
            Reduced data availability: 12 pgs inactive, 12 pgs incomplete
            12 slow ops, oldest one blocked for 5553 sec, daemons [osd.0,osd.3] have slow ops.

  services:
    mon: 3 daemons, quorum ceph-node01,ceph-node02,ceph-node03
    mgr: mon_mgr(active)
    osd: 9 osds: 9 up, 9 in

  data:
    pools:   3 pools, 512 pgs
    objects: 64.26 k objects, 561 GiB
    usage:   3.17 TiB used, 5.61 TiB / 8.78 TiB avail
    pgs:     9.375% pgs not active
             116 active+clean
             12  incomplete

  io:
    client:   5.57MiB/s rd, 144KiB/s wr, 346op/s rd, 15op/s wr

集群检查提示PG_AVAILABILITY(数据可用性降低),这说明群集无法满足群集中某些数据的潜在读取或写入请求。即有12个PG处于不允许为IO请求提供服务的状态。

PG检查

上面查看集群状态时,也可以发现pgs出现incomplete状态,执行health查看错误帮助。

[root@ceph-node01~]#  ceph health detail  
HEALTH_WARN Reduced data availability: 12 pgs inactive, 12 pgs incomplete; 12 slow ops, oldest one blocked for 5672 sec, daemons [osd.0,osd.3] have slow ops.
PG_AVAILABILITY Reduced data availability: 12 pgs inactive, 12 pgs incomplete
    pg 1.1 is incomplete, acting [3,0]
    pg 1.b is incomplete, acting [3,0]
    pg 1.1b is incomplete, acting [3,0]
    pg 1.2f is incomplete, acting [0,3]
    pg 1.3a is incomplete, acting [3,0]
    pg 1.40 is incomplete, acting [0,3]
    pg 1.44 is incomplete, acting [0,3]
    pg 1.47 is incomplete, acting [0,3]
    pg 1.4d is incomplete, acting [0,3]
    pg 1.5d is incomplete, acting [3,0]
    pg 1.61 is incomplete, acting [0,3]
    pg 1.66 is incomplete, acting [0,3]

pg Incomplete状态出现的原因大多是因为ceph集群在peering过程中,频繁重启服务器或断电。

启动osd或创建某个pg的时候,需要同步该pg上所有osd中的pg状态,这个过程叫做peering过程

Peering过程中, 由于

a. 无非选出权威日志
b. 通过choose_acting选出的Acting Set后续不足以完成数据修复,导致Peering无非正常完成

incomplete状态系统是无法自动复原的,需要手动修复

pg repair

Ceph提供了使用ceph pg repair命令修复不一致的PG

# ceph pg deep-scrub 11.eeef
instructing pg 11.eeef on osd.106 to deep-scrub

# ceph pg repair 11.eeef
instructing pg 11.eeef on osd.106 to repair

尝试使用 ceph pg repaire {pgid} 进行修复pg,但是无效。有些情况不应该通过ceph pg repair进行修复 ,当多副本数据存在不一致或主副本损坏导致的不一致时,是无法通过这个命令来完成修复的。

ceph_objectstore_tool
ceph-objectstore-tool是ceph提供的一个操作pg及pg里面的对象的高级工具。它能够对底层pg以及对象相关数据进行获取、修改。并能够对一些问题pg和对象进行简单修复。ceph-objectstore-tool的操作是不可逆的,执行修改操作前需要备份数据。

一般通过导出备份pg和导入pg,用于解决incomplete状态pg状态不对。

修复PG incomplete状态

1、查看incomplete pg所在osd节点

[root@ceph-node01~]# ceph pg dump_stuck 
ok
PG_STAT STATE      UP    UP_PRIMARY ACTING ACTING_PRIMARY 
1.4d    incomplete [0,3]          0  [0,3]              0 
1.1b    incomplete [3,0]          3  [3,0]              3 
1.66    incomplete [0,3]          0  [0,3]              0 
1.3a    incomplete [3,0]          3  [3,0]              3 
1.47    incomplete [0,3]          0  [0,3]              0 
1.61    incomplete [0,3]          0  [0,3]              0 
1.b     incomplete [3,0]          3  [3,0]              3 
1.40    incomplete [0,3]          0  [0,3]              0 
1.5d    incomplete [3,0]          3  [3,0]              3 
1.1     incomplete [3,0]          3  [3,0]              3 
1.2f    incomplete [0,3]          0  [0,3]              0 
1.44    incomplete [0,3]          0  [0,3]              0 

2、停止要操作的osd时,否则会得到报错:OSD has the store locked

[root@ceph-node03~]# systemctl start ceph-osd@0.service

3、导出pg和导入pg有问题的osd,例如 [0,3]

[root@ceph-node03~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0/ --journal-path /var/log/ceph/ --pgid 1.4d --op export --file 0.3
[root@ceph-node03~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0/ --journal-path /var/log/ceph/ --op import --file 0.3

4、将有问题osd的pg标记为complete

[root@ceph-node03~]# ceph-objectstore-tool --data-path /var/lib/ceph/osd/ceph-0/ --journal-path /var/log/ceph/ --type filestore --pgid 1.4d  --op mark-complete
WARNING: Ignoring type "filestore" - found data-path type "bluestore"
Marking complete 
Marking complete succeeded

5、启动osd,osd启动后,检查osd进程是否存在,一般要等几分钟才能看到UP

[root@ceph-node03 ~]# systemctl start  ceph-osd@0.service 
[root@ceph-node03 ~]# 
[root@ceph-node03 ~]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME              STATUS REWEIGHT PRI-AFF 
-1       0.02939 root default                                   
-3       0.00980     host ceph-node01                         
 0   hdd 0.00980         osd.0            down  1.00000 1.00000 
-5       0.00980     host ceph-node02                        
 2   hdd 0.00980         osd.2              up  1.00000 1.00000 
-7       0.00980     host ceph-node03                         
 3   hdd 0.00980         osd.3            down  1.00000 1.00000 

6、检查ceph状态

集群开始自己恢复,这个过程可以看到“pgs:215/6240 objects degraded (3.446%)”一直在变化,直到集群状态正常。

[root@ceph-node03 ~]# ceph -s 
  cluster:
    id:     3c09c565-7421-411d-b9e0-5a370967556f
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum ceph-node01,ceph-node02,ceph-node03
    mgr: mon_mgr(active)
    osd: 9 osds: 9 up, 9 in

  data:
    pools:   3 pools, 512 pgs
    objects: 64.26 k objects, 561 GiB
    usage:   3.17 TiB used, 5.61 TiB / 8.78 TiB avail
    pgs:     512 active+clean

  io:
    client:   341 B/s rd, 13 MiB/s wr, 0 op/s rd, 1.10 kop/s wr

优雅停止ceph
需要停机维护时,ceph一定要正常停止服务,尽量避免强制关机,拔电源等骚操作,物理机确认正常后再启动ceph,避免重复启动osd。

ceph osd set noout
ceph osd set nobackfill   
ceph osd set norecover 
systemctl stop ceph-mgr.target 
systemctl stop ceph-mds.target
systemctl stop ceph-mon.target
systemctl stop ceph-radosgw.target  
systemctl stop ceph-osd.target 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CEPH PG incomplete状态修复 的相关文章

  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • 大多数 Linux 系统头文件与 C++ 兼容吗?

    大多数 Linux 系统头文件 API C 兼容吗 今天我试图做这样的事情 include
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl

随机推荐

  • mysql常见六大约束

    DDL语言 常见约束 约束的含义 一种限制 用于限制表中的数据 为了保证表中的数据的准确性和可靠性 分类 六大约束 1 NOT NULL 非空约束 用于保证该字段的值不能为空 比如姓名 学号等 2 DEFAULT 默认约束 用于保证该字段有
  • Pycharm中放大和缩小代码界面

    直接上图流程 打开文件 点击设置 选择 keymap 右侧搜索框输入 increase 搜索出来之后双击 选择 Add Mouse Shortcut 然后在操作框按住 Ctrl 并将鼠标滚轮上滑 完成设置 一直点击OK关闭界面即可 之后按住
  • TortoiseGit如何变动项目Ip地址

    第一步 进到项目所在目录 找到git文件夹里的config文件 第二步 用记事本打开config文件 修改ip地址信息并保存即可
  • Spring的内部bean

    当一个bean仅被用作另一个bean的属性时 才能被声明为一个内部bean 为了定义inner bean 在Spring的基于XML的配置元数据中 可以在
  • 激光炸弹题解

    维生素C吃多了会上火 个人CSDN博文目录 2022蓝桥杯 目录 题目链接 题解 题目链接 题解 1 不同目标可能在同一位置所以 w 2 可能在 5000 5000 所以要算到5001 3 long long 超内存 include
  • EasyPoi实现Excel数据导入

    EasyPoi是一个基于Java的Excel导入导出框架 主要提供了Excel读取 写入等基本功能 并且支持通过注解来定义Excel文件的格式 添加maven依赖
  • 【WinForm】WebView2-个性化浏览器-桌面程序开发详解

    这是一个桌面程序上的浏览器 是用插件WebView2开发的浏览器桌面程序 功能体验堪比Edge浏览器 相比使用Chrome内核插件开发浏览器来说 还是用插件WebView2开发来得简单一些 接下来讲一讲实现过程 开发之前 建议先看看微软的
  • spring boot工程创建(idea无法联网)

    1 进入spring官网Spring Home 2 点击spring boot 3 翻到最下边 点击此处 或者直接进入网址Spring Initializr 4 设定项目基本内容 5 选择对应依赖 6 删除依赖 7 创建项目 8 将项目压缩
  • 自监督学习-MoCo-论文笔记

    论文 Momentum Contrast for Unsupervised Visual Representation Learning CVPR 2020 最佳论文提名 用动量对比学习的方法做无监督的表征学习任务 动量的理解即是指数移动平
  • 初学者写一个程序(一)(PyCharm配置Python解释器)

    5 PyCharm配置Python解释器 1 首先安装 PyCharm 完成之后 打开它会显示如下所示的界面在file中也有settings 点击后一样的操作 图六 在此界面中 可以手动给 PyCharm 设置 Python 解释器 点击图
  • 指数平滑法(Exponential Smoothing,ES)

    目录 1 指数平滑 2 一次指数平滑预测 又叫简单指数平滑 simple exponential smoothing SES 2 1 定义 2 2 例题 3 二次指数平滑法 Holt s linear trend method 3 1 定义
  • torch.nn.modules.module.ModuleAttributeError: ‘DataParallel‘ object has no attribute ‘step‘

    错误位置定点 解决方法
  • react学习—属性默认值和类型验证

    属性默认值和类型验证 一 属性默认值 1 函数组件属性默认值 2 类组件默认属性值 二 属性类型验证 1 常见值类型 2 是否必传isRequired 3 其它类型验证 4 自定义验证 一 属性默认值 通过一个静态属性defaultProp
  • 基础算法matlab

    常用算法 knn knn clc close all clear training mvnrnd 2 2 eye 2 50 mvnrnd 2 2 2 eye 2 50 mvnrnd 2 2 2 eye 2 50 group ones 50
  • Comparable和Comparator的区别以及Lambda表达式实现

    Comparable和Comparator的区别 1 comparable里面的ComparaTo 是TreeSet和TreeMap里面add 与put 方法里面调用对象的ComparaTo 通过返回值 来确定它 是否存在or顺序 他是内置
  • 计算机二级证书免费发到学校,计算机二级证书去哪里领取

    随着计算机等级考试成为了当代大学生必考的考试之一 越来越多的同学都加入到考试大军 通过了计算机二级考试 证书如何领取呢 下面是小编整理的详细内容 一起来看看吧 计算机二级证书领取方法 1 一般情况下是考试结束后50个工作日左右出成绩及出证
  • echarts 中 symbol 自定义图片

    首先我使用的技术框架的VUE 当然该方法在其他框架也是适用的 这点大家注意一下 在官方文档里面 修改标记的图形 symbol 的方法有三种 一 ECharts 提供的标记类型有 circle rect roundRect triangle
  • .NET C#基础(5):结构体 - 高性能代码的基石

    0 文章目的 本文面向有一定 NET C 基础知识的学习者 介绍C 中结构体定义 使用以及特点 1 阅读基础 了解C 基本语法 了解 NET中的栈与托管堆 2 值类型 2 1 NET的两大类型 在 NET中 所有类型都是object类型的子
  • Excel行高、列宽怎么调整?

    在日常工作中 经常会需要用到Excel表格 如果打开的Excel表格行高列宽不是我们想要的 要怎么调节到合适的大小呢 方法一 打开Excel表格 按 Ctrl A 快捷键 选中全部表格 或者点击表格左上角 行号和列标交汇处的灰色小三角 也可
  • CEPH PG incomplete状态修复

    某运营商的Kubernetes项目物理机停机维护 重启后Kubernetes部分pod无法挂载PVC 请求超时 该Kubernetes集群的后端存储使用ceph rbd块存储 检查ceph集群状态异常 root ceph node01 ce