返回顶部
首页 > 资讯 > 精选 >ceph心跳机制异常的处理方法
  • 139
分享到

ceph心跳机制异常的处理方法

2023-06-05 20:06:37 139人浏览 泡泡鱼
摘要

ceph心跳机制异常的处理方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。部署使用ceph集群的时候遇到一个情况,在大规模集群的时候,有节点网络或者osd异常时,mon迟

ceph心跳机制异常的处理方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

部署使用ceph集群的时候遇到一个情况,在大规模集群的时候,有节点网络或者osd异常时,mon迟迟不把该异常的osd标down,一直等待900s后mon发现该节点的osd一直没有更新pgmap才把异常的osd标down,并更新osdmap扩散出去。

现象:部署使用ceph集群的时候遇到一个情况,在大规模集群的时候,有节点网络或者osd异常时,mon迟迟不把该异常的osd标down,一直等待900s后mon发现该节点的osd一直没有更新pgmap才把异常的osd标down,并更新osdmap扩散出去。但这个900s内,客户端io还是会一直往异常的osd上去下发,导致io超时,并进一步影响上次的业务。

原因分析:

我们在mon的日志里面也看到了和异常osd建立心跳的其他osd向mon报告该osd的异常,但mon确实在短时间内没有这些osd标down。查看了一些相关网络和书籍的资料后,才发现了问题。
首先我们关注osd配置中几个相关的配置项:
(1)osd_heartbeat_min_peers:10
(2)mon_osd_min_down_reporters:2
(3)mon_osd_min_down_reporters_ratio:0.5
以上参数的之都可以在ceph集群节点上执行ceph daemon osd.x config show查看(x是你的集群osd的id)。
问题出现的原因是什么呢?
问题现场的集群部署时每个osd会随机选取10个peer osd来作为建立心跳的对象,但在ceph的机制中,这个10个osd不一定保证能够全部分散在不同的节点上。故在有osd异常的时候,向mon报该osd down的reporter有概率不满足ratio=0.5,即reporter数量未过集群存储host数量的一半,这样异常osd就无法通过osd之间的心跳报活机制快速标down,直到900s后mon发现这个osd pgmap一直不更新才识别到异常(另一种机制,可以看做是给osd心跳保活机制做最后的保险),并通过osdmap扩散出来。而这个900s对于上层业务来说,往往是不可接受的。
但这个现象对于小规模集群几乎不会出现,比如以一个3节点ceph集群为例:
ceph心跳机制异常的处理方法
如果与其他节点osd建立的peer数量小于了osd_heartbeat_min_peers,那么osd会继续选择与自己较近的osd建立心跳连接(即使是和自己位于同一个节点上。)
对于osd心跳机制,网上有人总结过几点要求:
(1)及时:建立心跳的osd可以在秒级发现其他osd的异常并上报monitor,monitor在几分钟内把该osd标down下线
(2)适当的压力:不要以为peer越多越好,特别是现在实际应用场景中osd监听和发送心跳报文的网络链路都是和public network以及cluster network共用的,心跳连接建立过多会极大影响系统的性能。Mon有单独与osd维持心跳的方式,但ceph通过osd之间的心跳保活,将这种压力分散到各个osd上,极大减小了中心节点mon的压力。
ceph心跳机制异常的处理方法
(3)容忍网络抖动:mon收集到osd的汇报之后,会经过周期的等待几个条件,而不是贸然把osd标down。这些条件有目标osd的实效时间大于通过固定量osd_heartbeat_grace和历史网络条件确定的阈值,以及上报的主机数是否达到min_reporters和min_reporters_ratio,以及在一定时间内,失效汇报没有被源报告者取消掉等。
(4)扩散机制:2种实现,mon主动扩散osdmap,还有一种惰性的是osd和client自己来取。为了让异常信息及时让client和其他osd感知到,一般是前一种实现比较好。

总结和启示:

2个方向可以做出改变。
(1)对于原有机制中取集群存储节点数量的0.5作为min_reporter_ratio明显不合理,应该采用的是这个osd与多少host上的osd建立心跳(取host数量),那就由0.5*建立心跳的host总数来作为判断依据。
(2)一些场景下,我们会自己定义一些数据存放的逻辑区域,通过对crush的层级结构的利用,例如在一个ceph集群中定义多个逻辑区域,一个数据的分片或者副本只存在于一个逻辑区域中,那相关osd建立心跳连接的范围就需要相应精简和准确。

现在ceph实现的osd心跳机制还是会有很多问题,不知道后面会不会有新的机制替换当前机制,让我们拭目以待。

关于ceph心跳机制异常的处理方法问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: ceph心跳机制异常的处理方法

本文链接: https://lsjlt.com/news/244305.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ceph心跳机制异常的处理方法
    ceph心跳机制异常的处理方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。部署使用ceph集群的时候遇到一个情况,在大规模集群的时候,有节点网络或者osd异常时,mon迟...
    99+
    2023-06-05
  • Ceph心跳机制的示例分析
    这篇文章将为大家详细讲解有关Ceph心跳机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 心跳介绍心跳是用于节点间检测对方是否故障的,以便及时发现故障节点进入相应的故障处理流程。问题:故障...
    99+
    2023-06-05
  • Java异常的处理机制
    图片解析: 1.生成字节码文件的过程可能产生编译时异常(checked),由字节码文件到在内存中加载、运行类此过程可能产生运行时异常(unchecked), 2.JAVA程序在执行...
    99+
    2024-04-02
  • Java的异常处理机制
    本篇内容介绍了“Java的异常处理机制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java 异常处理异常是程序中的一些错误,但并不是所有的...
    99+
    2023-06-02
  • SpringMVC 异常处理机制与自定义异常处理方式
    目录SpringMVC默认处理的几种异常@ResponseStatus异常处理的顺序自定义异常类(SpringMVC的异常处理)①:自定义异常类②:自定义异常处理器③:配置我们的异常...
    99+
    2024-04-02
  • 【JAVA 异常处理机制】
    文章目录 前言1.java异常处理机制2.try-catch3.finally块4.自动关闭特性5.throw关键字6.throws关键字7.throws的重写规则8.异常分类9.异常API10.自定义异常总结: 前言 在Ja...
    99+
    2023-08-23
    java 开发语言 学习 intellij idea
  • SpringMVC异常处理机制与自定义异常处理方式的示例分析
    这篇文章主要介绍SpringMVC异常处理机制与自定义异常处理方式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!提到异常处理,就不得不提HandlerExceptionResolvers,我们的Dispat...
    99+
    2023-06-25
  • Java 详解异常的处理机制
    目录1.异常概述与异常体系结构1.1异常概述1.2运行时异常与编译时异常1.3异常体系结构2.常见异常1.ArrayIndexOutOfBoundsException2.NullPo...
    99+
    2024-04-02
  • PHP 函数的异常处理机制
    php 异常处理机制是处理错误和例外的机制。异常是一种包含错误和跟踪信息的类。使用 try-catch 块处理异常,其中 try 块包含可能引发异常的代码,而 catch 块处理异常并输...
    99+
    2024-04-26
    php 异常处理
  • GlobalExceptionHandler 异常处理机制说明
    GlobalExceptionHandler 是什么 GlobalExceptionHandler是一个程序中的异常处理机制,可以在应用程序中捕获和处理未被处理的异常。它是一个全局异常处理器,可以截取应用程序中的任何异常并执行特定的操作,例...
    99+
    2023-08-21
    java servlet spring
  • Golang异常处理机制浅析
    go 语言异常处理机制包括 panic 和 error 两种类型的异常。recover 函数用于捕获 panic 异常,而 error 类型表示可恢复的错误,通过 if err != n...
    99+
    2024-04-15
    golang 异常处理
  • PHP中的异常及其处理机制
    目录什么是异常? 总结 上回文章中我们讲到了错误是编译和语法运行时会出现的,它们与逻辑无关,是程序员在码代码时不应该出现的,也就是说,这些错误应该是尽量避免带到线上环境的,他们不能通...
    99+
    2024-04-02
  • C++中的异常处理机制介绍
    本篇内容介绍了“C++中的异常处理机制介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!异常处理增强错误恢复能力是提高代码健壮性的最有力的途...
    99+
    2023-06-17
  • 详解SpringMVC中的异常处理机制
    目录开头1.ExceptionHandlerExceptionResolver2. demo开头 试想一下我们一般怎么统一处理异常呢,答:切面。但抛开切面不讲,如果对每一个contr...
    99+
    2024-04-02
  • Java异常处理机制深入理解
    目录1.初识异常2.异常的基本用法异常处理流程3.为什么要使用异常?异常应只用于异常的情况4. 异常的种类 4.1 受查异常解决方案:4.2非受查异常5.如何使用异常避免不...
    99+
    2024-04-02
  • 跳过事务处理Slave复制应用binlog异常
    Slave复制应用binlog异常处理方法: 1. 查看报错信息 show slave status\G Relay_Log_File: mysql-relay.000016 Relay_Log_Pos:...
    99+
    2024-04-02
  • Golang中异常处理机制详解
    前言 通常我们需要编写好的错误处理方式,在了避免某些程序员滥用异常,于是Go这里直接把异常这一块给砍掉了,最终还是通过返回值来判断程序的异常情况,毕竟Go可是支持多返回值的语言,比如...
    99+
    2024-04-02
  • Java SpringMVC异常处理机制详解
    目录异常处理的思路测试环境准备异常处理两种方式方式一:简单异常处理器方式二:自定义异常处理器总结异常处理的思路 测试环境准备 首先写一个DemoController控制层的类作为测...
    99+
    2024-04-02
  • qt异常处理机制是什么
    Qt异常处理机制是一种用于处理程序运行时的异常的机制。它允许开发人员捕获和处理在程序执行期间发生的异常,以便更好地控制程序的行为。Q...
    99+
    2023-09-22
    qt
  • php异常和错误处理机制
    文章目录 基本概念标准异常处理自定义异常处理 异常处理最佳使用场景控制异常代码影响范围保证数据统一性 错误处理错误等级定义标准错误处理自主处理非致命错误自主处理致命错误抛出自定义错误 ...
    99+
    2023-09-13
    php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作