Ceph蹚坑笔记 - (1)

【ceph】Ceph之PG状态详解--研读笔记 原文:分布式存储Ceph之PG状态详解 - 简书 1. PG介绍 继上次分享的《Ceph介绍及原理架构分享》,这次主要来分享Ceph中的PG各种状态详解,PG是最复杂和难于理解的概念之一,PG的复杂如下: 在架构层次上,PG位于RADOS层的中间。 a. 往上负责接收和处理来自客户端的请求。 b. 往下负责将这些数据请求翻译为能够被本地对象存储所能理解的事务。 是组成存储池的基本单位,存储池中的很多特性,都是直接依托于PG实现的。 面向容灾域的备份策略使得一般而言的PG需要执行跨节点的分布式写 阅读详情

Ceph蹚坑笔记 - (1)

现象

由于设备调度的原因,运维的哥们需要把一台服务器上的OSD移除。他做了以下操作:
1. pkill ceph-osd关闭服务器上的所有OSD
2. 在集群把这些OSD标记成down后,用ceph osd rm <osd-id>删除对应的OSD ID
3. 期待与这些OSD有关的PG转移到其它OSD上,并由degraded状态转到active+clean状态
4. 等了很久,发现集群完全没有修复这些degraded PG的意思
5. 实在没办法,再执行ceph osd crush remove osd.<osd-id>,degraded PG终于逐渐转到active+clean状态

分析

OSD的状态发生变化触发OSD Map更新,所有活着的OSD都会基于新的OSD Map和根据CRUSH算法重新计算其所承载的PG的新归宿。如果发现PG的新归宿不是当前承载它的OSD集合,集群就会触发Peering动作(自己主导Peering或通知其他OSD发动Peering),进而进行必要的Recovery或Backfill。

OSD变为down后,相应的PG转入degraded状态是符合预期的。按常理说,在ceph osd rm <osd-id>之后集群应该注意到OSD的状态又发生了一些变化,并为degraded PG寻找新的归宿。

既然ceph osd rm <osd-id>没有触发Peering,很有可能是因为OSD不认为PG的归宿发生了变化。按照这个思路,查看了代码。OSDMap::_raw_to_up_osds()的如下代码确认了这个推测(环境中用的是ReplicatedPG)。这里!exists与is_down被认为是等价的,在OSD变为down后,集群的决策是:幸存下来的OSD继续承载degraded PG。ceph osd rm <osd-id>之后,OSDMap::_raw_to_up_osds()的结果和OSD变为down时结果是一样的,所以不认为degraded PG需要新的OSD来承载,也就没有触发Peering和相应的Recovery或Backfill。

    up->clear();
    for (unsigned i=0; i<raw.size(); i++) {
      if (!exists(raw[i]) || is_down(raw[i]))
    continue;
      up->push_back(raw[i]);
    }

后来,尝试了以下操作序列,就没有问题了
1. pkill ceph-osd关闭服务器上的所有OSD
2. 在集群把这些OSD标记成down后,用ceph osd out <osd-id>把对应OSD标记为out(也可以清除noout标志位,等待足够长的时间,让集群自动把OSD标记为out)
3. 用ceph osd rm <osd-id>删除对应的OSD ID
4. 相应的PG逐渐从degraded状态转到active+clean状态

本来以为ceph osd rm <osd-id>会隐含ceph osd out <osd-id>。从这次的观察看,这样的想当然是错误的。查看了一下OSDMonitor::prepare_command_impl()中的如下代码发现,原来out操作修改的是OSD ID的权值(OSDMap::osd_weight[id]在OSDMap::_pg_to_osds()被使用),而rm是修改OSD ID的状态信息(OSDMap::osd_state[id]在OSDMap::_raw_to_up_osds()中被间接使用)。

    } if (prefix == "osd out") {
      if (osdmap.is_out(osd)) {
        ss << "osd." << osd << " is already out. ";
      } else {
        pending_inc.new_weight[osd] = CEPH_OSD_OUT;
        ss << "marked out osd." << osd << ". ";
        any = true;
      }
    } 
    // ...
    } else if (prefix == "osd rm") {
      if (osdmap.is_up(osd)) {
        if (any)
          ss << ", ";
        ss << "osd." << osd << " is still up; must be down before removal. ";
        err = -EBUSY;
       } else {
         pending_inc.new_state[osd] = osdmap.get_state(osd);
         pending_inc.new_uuid[osd] = uuid_d();
         pending_metadata_rm.insert(osd);
         if (any) {
           ss << ", osd." << osd;
         } else {
           ss << "removed osd." << osd;
         }
         any = true;
      }
    }

OSDMap::_pg_to_osds()被先调用,然后OSDMap::_raw_to_up_osds()基于OSDMap::_pg_to_osds()的结果做运算。out的OSD在OSDMap::_pg_to_osds()先被清理出局,down的或被rm的OSD在OSDMap::_raw_to_up_osds()才被清理出局。

假设两副本的PG X最先是由osd.1和osd.11承载的。然后,osd.1进入down状态而不是out。这时,OSDMap::_pg_to_osds()还是选出了osd.1和osd.11,然后OSDMap::_raw_to_up_osds()从中选出了osd.11。接着osd.1被执行ceph osd rm,由于is_down和!exists是等价的,OSDMap::_raw_to_up_osds()还是为PG X选择了osd.11。

假设两副本的PG X最先由osd.1,osd.11承载。但osd.1从down状态进入out状态之后才被执行ceph osd rm,OSDMap::_pg_to_osds()会把osd.1淘汰并为PG X选择osd.11和另一个存活的OSD(假设是osd.21),而OSDMap::_raw_to_up_osds()也在此基础上选出了存活的osd.11和osd.21。这样集群就知道PG X应该重新分布到osd.11和osd.21上了。

ceph osd crush remove之所以也能能够触发PG的重分布,也是因为它修改CRUSH Map(OSDMap.crush)而促使OSDMap::_pg_to_osds()为PG X选择osd.11和osd.21而不是osd.1和osd.11。

结论

  • 这里的ceph osd rm <osd-id>不是很有必要,除非永远都不想再使用这些OSD ID了
  • ceph osd rm <osd-id>与ceph osd out <osd-id>不同,ceph osd rm <osd-id>也不隐含ceph osd out <osd-id>
  • 在ceph osd rm <osd-id>之前最好等待对应的OSD变成out
基于 ceph-deploy 部署 Ceph 集群 超详细 ceph概述和ceph集群部署 阅读详情

相关推荐

基于ceph-deploy部署Ceph 集群

基于ceph-deploy部署Ceph 集群

m0_71593537的博客 1912

ceph修复osd为down的情况

尝试一、直接重新激活所有osd 1、查看osd树 root@ceph01:~# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.29279 root default -2 0.14639 host c...

weixin_33737134的博客 1255

Ceph-deploy搭建ceph集群

Ceph可用于为云平台提供Ceph对象存储、块存储、文件系统存储。所有Ceph存储集群部署都从设置每个Ceph节点开始,然后设置网络块存储RedismasterslavezookeeperMysqlmasterslavecephFS对象存储Ceph存储集群需要以下内容:至少一个和至少一个,以及至少与Ceph集群中存储的给定对象的副本一样多的Ceph对象存储守护进程(OSD)(例如,如果给定对象的三个副本存储在Ceph集群中,则该Ceph集群中必须至少存在三个OSD)

qq_31055683的博客 1925

ceph OSD状态及常用命令

1. OSD概念 OSD:Object Storage Device,主要负责响应客户端请求返回具体数据的守护进程,一般一个集群会有多个OSD,每一块盘都会对应一个OSD。 2. OSD 状态 [root@data1 ~]# ceph osd stat 4 osds: 3 up (since 23m), 3 in (since 13m); epoch: e345 OSD状态说明: a. 集群内(in) b. 集群外(out) c. 活着且在运行(up) d. 挂了且不再运行(down) .

Be_Nice的博客 1万+

【Ceph】基于ceph-deploy部署Ceph集群详解

我们相恋的季节,从夏天到冬天,记忆一页页翻阅,你却留下了思念。

陌上花开,静待绽放! 1414

用ceph-deploy安装ceph并部署集群

部署安装关于安装ceph整个过程中遇到的问题,以及靠谱的解决办法,个人亲测有效,不代表广大同行的观点。 我用的是服务器,所以没搞什么用户的问题。机器是centOS7.3。我安装的ceph版本是jewel,目前只用了3个节点。 节点IP 命名 角色 10.0.1.92 e1092 mon 10.0.1.93 e1093 mon,osd 10.0.1.94

Erdong_up的博客 1万+

ceph osd down修复

一、查看osd状态找到down状态的osd 二、删除对应osd 1、调整osd 的crush weight 2、停止osd进程 3、将节点状态标记为out 4、从crush中移除节点 5、删除节点 6、删除节点认证 三、准备并激活osd 1、格式化准备存放数据的磁盘 2、挂载指定磁盘 3、准备osd 4、激活osd 具体ID、FSID可通过/var/lib/ceph/osd/ceph-18路径下的whoami、fsid查看。激活之后查看若仍为down状态 通过以下命令查看对应osd状态,之后重启再观察...

WBW_WBW的博客 4466

第⑫讲:Ceph集群OSD扩缩容中Reblanceing数据的重分布

在实际生产环境中,如果PG中的数据量非常大,在触发Reblanceing机制时,会对集群的性能有所影响,如果一次性增加很多个OSD节点,那么就意味着会有大量的PG被移动,此时就会对集群的性能产生巨大的影响,因此建议,每次在扩容OSD时,只扩容一个OSD。在扩容前集群有两个OSD节点,这两个OSD中分布着十个PG,扩容后,集群中有三个OSD节点,此时就会触发Reblanceing数据重分布机制,将原有的两个OSD中的一部分PG移动到第三个OSD中,使的每个OSD中的PG数量均衡。

江晓龙的博客 1564

Ceph OSD为DOWN时修复

本文所使用Ceph版本为luminous(不同版本删除OSD基本操作相同),当出现Ceph OSD为down的情况时,可以通过以下方法解决(假设ceph-admin节点OSD.1 Down,该OSD对应磁盘为/dev/sdb): 1.首先尝试能否重启ceph-osd服务 近期在维护ceph集群时,发现一些新的情况: (1)ceph osd down掉之后(这里假设osd.1 down),去到...

夜雨狂歌如梦 2万+

ceph搭建及使用详解

第1章 ceph介绍 1.1 Ceph的主要特点 统一存储 无任何单点故障 数据多份冗余 存储容量可扩展 自动容错及故障自愈 1.2 Ceph三大角色组件及其作用 在Ceph存储集群中,包含了三大角色组件,他们在Ceph存储集群中表现为3个守护进程,分别是Ceph OSD、Monitor、MDS。当然还有其他的功能组件,但是最主要的是这三个。 Ceph OSD Ceph的OSD(Object Storage Device)守护进程。主要功能包括:存储数据、副本数据处理、数据恢复、数据回补、平衡数据分布,并将

weixin_40548182的博客 1万+

Ceph:关于Ceph 集群如何访问的一些笔记(3)

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》

山河已无恙 1703

Ceph蹚坑笔记 - (2)

Ceph RGW里的一些坑

JeegnChen的博客 4121

VSCode关联VIVADO编辑Verilog

有时候接手别人的代码,或者从网上找的开源代码,每个人风格不一致,对齐缩进也不一样,阅读起来很累。有没有什么方法能快捷地格式化代码呢。下面我们利用VSCode插件来实现这个需求。Vivado是Xilinx公司提供的逻辑开发平台(之一),如果不喜欢Vivado自带的文本编辑器,可以选择第三方的文本编辑器VSCode。

小王在努力...的博客 7150

Ceph蹚坑笔记 - (3)

RGW的数据丢失和存储空间泄漏问题

JeegnChen的博客 3405

RK3588开发板量产前必做:24小时DDR压力测试到底在测什么?(附ArmSoM-W3测试脚本解析)

本文深入解析RK3588开发板量产前的24小时DDR压力测试,揭示其核心价值与技术原理。通过memtester、stressapptest和变频测试的组合使用,全面验证DDR内存稳定性。特别介绍ArmSoM-W3测试脚本的创新设计,包括并行测试架构和异常熔断机制,为开发者提供可靠的量产测试方案。

weixin_30325487的博客 454

如何实现SOLIDWORKS阵列的“智能变更”?

有时,我们在设计一个零件时,零件上有一排阵列孔,同时零件有不同的长度,我们又希望可以做到零件长度改变时,这排孔可以按长度等距增减孔阵列的个数;或是零件长度加长或缩短时,这排孔保持个数不变,按零件长度增减孔距。 那具体要怎么做呢?接下来,我们一起来看看怎么用SOLIDWORKS中简单的操作来实现这两种智能的变更: 零件长度加长或缩短时,这排孔要按长度等距增减孔阵列的个数。 零件长度加长或缩短时,这排孔保持个数不变,按零件长度增减孔距。 那接下来,我们一起来看看怎么用简单的操作来实现这两种智能的

SOLIDWORKS艾金米 2077

Ceph蹚坑笔记 - (4)

使用radosgw-agent过程中见到的一些问题

JeegnChen的博客 1345

京东联盟API实战:5分钟搞定商品返利链接生成(附Python代码)

本文详细介绍了如何利用京东联盟API快速构建自动化商品返利链接生成系统。通过Python代码实战,从API申请、环境配置到核心功能封装,手把手教你实现批量商品信息查询与推广链接生成,帮助内容创作者和开发者大幅提升电商推广效率。

weixin_29216957的博客 673

【Ceph】Ceph介绍、原理、架构

Ceph技术栈/学习图谱

我的笔记本 1万+

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。通过'中国古代文人关系网'实战案例,涵盖软件安装、本体创建、属性定义、实例填充到高级功能应用的全流程,帮助初学者快速掌握知识建模的核心技能。

weixin_26808205的博客 234

【Unity Shader】2D模型 3D模型混用的穿模问题(Spine在3D场景中出现前后穿模问题的解决办法)

问题描述: 在3D场景中使用Spine模型(2D), 因为Spine需要像Billboard类似的处理,永远是垂直与相机的, 所以一般情况下2D模型能正常显示且前后的阻挡关系也是没有问题的,如下图所示,一切都很美好.(这里用一个四边形,图中的福字表示2D模型) 可是如果后面蓝色的格子比较高,或者2D角色本身也比较高,那么就会出现模型穿插的问题,如下图所示: 如果吧2D模型竖立起来,前后关系肯定是没有问题的,所以也能避免模型穿插的问题,可是就没有Billboard效果,圆形的福字已经被压扁了,如下图:

Vitens的专栏 4590

Ceph集群部署(基于ceph-deploy)

一个集群自动化部署工具,使用较久,成熟稳定,被很多自动化工具所集成,可用于生产部署。3.admin管理节点配置ssh免密登录node节点。部署Ceph实验(基于ceph-deploy)2.安装ceph-deploy部署工具。10.解决HEALTH_WARN问题。7.使其它节点可以管理Ceph群集。1.创建一个Ceph工作目录。6.配置Ceph yum源。3.手动安装Ceph软件包。部署Ceph集群的方法。部署Ceph集群的方法。8.部署osd存储节点。Ceph生产环境推荐。三、部署Ceph集群。

2401_83784772的博客 4579

CAPL与人工智能结合

AI模型是指通过机器学习算法训练得到的模型,可以用于分类、回归、聚类等任务。常见的AI模型包括神经网络、支持向量机、决策树等。在汽车电子系统中,AI模型可以用于故障诊断、驾驶行为分析、自动驾驶等场景。实时决策是指在汽车电子系统中,根据AI模型的预测结果,实时做出决策。实时决策可以用于自动驾驶、故障诊断等场景。通过本文的学习,读者应该对CAPL与人工智能结合有了初步的了解,并能够编写复杂的CAPL脚本。

闲人编程的博客 1480

Ceph-ansible 部署Ceph

简介:Ceph-ansible 部署Ceph 1、安装notario yum install -y python-pip pip install notario 这个包用yum装的版本是不符合要求的,需要使用pip进行安装 2、下载ceph-ansible的代码到本地 git clone https://github Ceph-ansible部署Ceph 1、安装notario [root@node1 ~]# yum install -y python-pip [root@n...

会哭的雨@的博客 2688

ZYNQ PS-PL数据交互方式总结

一,中断 二,IO方式:MIO EMIO GPIO 三,BRAM或FIFO或EMIF (1)通过BRAM实现PL/PS之间交互 PS 的配置如下图所示。使能 M_AXI_GP0 口,将 FCLK_CLK0 设为 100MHz,使能 PL 至 PS 的中断。 AXI BRAM Controller IP 核连接 PS 的 M_AXI_GP0 口和 BRAM,完成 AXI 接口至 BRAM 接口的转换。 添加BRAM,将BRAM设置为双口RAM,将PORTA与AXI B...

wangjie36的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ceph 笔记

Ceph是一个开源的分布式存储系统,具有以下优势和特点:可扩展性:Ceph可以轻松地扩展到大规模的存储集群,支持数百或数千个节点,并能够处理PB级别的数据。弹性和高可用性:Ceph采用了复制和纠删码等机制来保证数据的弹性和高可用性。它在集群中自动复制数据副本,并且能够容忍多个故障或节点失效。统一的存储系统:Ceph提供了统一的接口和命名空间,使用户可以以各种方式访问数据,包括对象存储、文件系统和块设备。这简化了应用程序与存储交互的复杂性。自我管理:Ceph具有自动管理和自恢复的功能。

怨行客 966

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

下一篇: Ceph蹚坑笔记 - (2)
静夜恒辰
博客等级 码龄12年 8粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值