Ceph 心跳机制原理详解

Ceph使用心跳机制来检测和维护集群中各个组件(如Monitor、OSD、MDS等)的状态和可用性。心跳机制确保集群中的各个节点之间的通信正常,并及时检测和处理故障,通过心跳机制,Ceph能够实时监测和响应集群中的故障,确保数据的可靠性和可用性。当发生故障时,Ceph会自动进行故障恢复和自愈操作,以尽可能地保持集群的正常运行状态。

介绍

  1. Monitor(监视器):

    • Monitor之间通过互相发送心跳消息来检测彼此的可用性。

    • Monitor还会发送心跳消息给OSD和MDS,以检测它们的状态。

    • 如果Monitor无法接收到其他Monitor、OSD或MDS的心跳消息,它将认为相应的组件可能发生了故障,并采取相应的措施,如重新选举Monitor或标记OSD为离线状态。

  2. OSD(对象存储守护进程):

    • OSD会定期向Monitor发送心跳消息,以通知自己的存在和状态。

    • 如果Monitor在一定时间内没有收到来自OSD的心跳消息,它将认为该OSD可能发生了故障,并采取相应的措施,如重新复制丢失的数据或重新启动OSD。

  3. MDS(元数据服务器):

    • MDS之间通过互相发送心跳消息来检测彼此的可用性。

    • MDS还会发送心跳消息给Monitor,以通知自己的存在和状态。

    • 如果Monitor在一定时间内没有收到来自MDS的心跳消息,它将认为该MDS可能发生了故障,并采取相应的措施,如重新选举MDS或标记文件系统为不可用状态。

流程

监听

Ceph 心跳机制原理详解

 

如上图所示,OSD节点会监听public、cluster、front和back四个端口

  • public端口:监听来自Monitor和Client的连接

  • cluster端口:监听来自OSD Peer的连接

  • front端口:供客户端连接集群使用的网卡,这里临时给集群内部之间进行心跳

  • back端口:供集群内部使用的网卡。集群内部之间进行心跳

  • hbclient:发送ping心跳的messenger

 

OSD之间互相心跳检测

Ceph 心跳机制原理详解

1).同一个PG内OSD互相心跳,他们互相发送PING/PONG信息。 2).每隔6s检测一次 (实际会在这个基础上加上一个随机时间来避免峰值) 3).20s没有检测到心跳回复,加入failure队列 (失败)

OSD与Mon心跳检测

Ceph 心跳机制原理详解

OSD报告给Monitor

  • OSD发生问题时 (比如故障、PG变更)

  • 自身启动5秒内

  • OSD周期性的上报给Monito 1️⃣ OSD检查failure_queue中的伙伴OSD失败信息 2️⃣ 向Monitor发送失效报告,并将失败信息加入failure_pending队列,然后将其从failure_queue移除 3️⃣ 收到来自failure_queue或者failure_pending中的OSD的心跳时,将其从两个队列中移除,并告知Monitor取消之前失效的报告 4️⃣ 当发生与Monitor网络重连时,将会failure_pending中的错误报告加回到failure_queue中,并再次发送给Monitor

  • Monitor 统计下线OSD (1) Monitor收集来自OSD的伙伴无效报告 (2)当错误报告指向的OSD失效超过一定阈值,且有足够多的OSD报告其失效时,将该OSD下线

端口(扩展)
Public端口
  • Public端口是OSD节点监听来自Monitor和Client的连接的端口。

  • Monitor使用Public端口与OSD节点进行通信,发送命令和接收状态信息。

  • Client通过Public端口与OSD节点进行数据读写操作。

Cluster端口
  • Cluster端口是OSD节点监听来自其他OSD节点(OSD Peer)的连接的端口。

  • OSD节点之间通过Cluster端口进行数据复制、数据恢复和集群内部的通信。

  • 使用Cluster端口可以确保集群内部的数据传输和通信是安全和可靠的。

Front端口
  • Front端口是供客户端连接集群使用的网卡端口。

  • 客户端可以通过Front端口与Ceph集群进行数据读写操作。

  • Front端口通常对外提供服务,允许外部主机通过网络连接到Ceph集群。

Back端口
  • Back端口是供Ceph集群内部使用的网卡端口。

  • 集群内部的各个组件(如Monitor、OSD、MDS等)可以通过Back端口进行通信和心跳检测。

  • Back端口通常用于集群内部的数据传输和通信,以确保集群的正常运行和故障检测。

HBclient(心跳客户端)
  • HBclient是一种Ceph Messenger,用于发送ping心跳消息。

  • 它用于在Ceph集群中的不同节点之间进行心跳检测。

  • 通过发送ping心跳消息,Ceph可以实时检测节点的可用性和状态,并采取相应的措施来处理故障情况。

原创文章,作者:geeklinux.cn,如若转载,请注明出处:https://www.geeklinux.cn/cloud-native/ceph/759.html

(0)
geeklinux.cn的头像geeklinux.cn
上一篇 2023 年 9 月 13 日
下一篇 2023 年 12 月 12 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注