1. 心跳介绍
心跳是用于节点间检测对方是否故障的,以便及时发现故障节点进入相应的故障处理流程。
问题:
- 故障检测时间和心跳报文带来的负载之间做权衡。
- 心跳频率太高则过多的心跳报文会影响系统性能。
- 心跳频率过低则会延长发现故障节点的时间,从而影响系统的可用性。
故障检测策略应该能够做到:
- 及时:节点发生异常如宕机或网络中断时,集群可以在可接受的时间范围内感知。
- 适当的压力:包括对节点的压力,和对网络的压力。
- 容忍网络抖动:网络偶尔延迟。
- 扩散机制:节点存活状态改变导致的元信息变化需要通过某种机制扩散到整个集群。
2. Ceph 心跳检测
![v2-c16c69b6845886d4238d85d2fb43237a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/a6fc47f7d2b36141c3567c8ecd64ba5b.jpeg)
OSD节点会监听public、cluster、front和back四个端口
- public端口:监听来自Monitor和Client的连接。
- cluster端口:监听来自OSD Peer的连接。
- front端口:供客户端连接集群使用的网卡, 这里临时给集群内部之间进行心跳。
- back端口:供客集群内部使用的网卡。集群内部之间进行心跳。
- hbclient:发送ping心跳的messenger。
3. Ceph OSD之间相互心跳检测
![v2-66f195fbe464f5f7ea70e43d4415d9d1_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/38a46768025fe142609a039cef158355.jpeg)
步骤:
- 同一个PG内OSD互相心跳,他们互相发送PING/PONG信息。
- 每隔6s检测一次(实际会在这个基础上加