ob数据库中副本触发故障切换原理

【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作

什么条件下会触发副本切换?那个参数限制副本间的心跳频率,几次心跳不通就会触发切换?是依赖lease_time吗?

1 个赞

1、当 Election Leader 发现本机出现异常时会触发异常切主,当前包括如下场景:

  • CLOG_DISK_HANG:CLOG 盘 hang 住超过 5s,可通过集群配置项 log_storage_warning_tolerance_time 调整。
  • SLOG_WRITE_HANG:写 SLOG 的线程 hang 住超过 5s,可通过集群配置项 data_storage_warning_tolerance_time 调整。
  • SSTABLE_IO_HANG:数据盘 hang 住。
  • CLOG_DISK_FULL:CLOG 盘满。
  • SCHEMA_NOT_REFRESHED:Schema 未刷新

2、当 Leader 与多数派超过一个租约时长无法连通时,将开启新一轮的选举,并选出下一任 Leader。

默认的租约时长是 10s,用户可以修改配置变更租约时长。

3、obsever 每2秒给root service 上报自己的状态信息,超时触发切主

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002014011

obsever 每2秒给root service 上报自己的状态信息,Root Service 负责集群的节点管理,各节点通过心跳数据包(heartbeat)的方式,定期(每 2s)向 Root Service 汇报自己的进程状态,Root Service 通过监测节点的心跳数据包,来获取当前 observer 进程的工作状态,

3 个赞

@论坛小助手

1 个赞

根据文档库中的信息,关于OceanBase数据库中副本触发故障切换的原理如下:

  1. 触发副本切换的条件

    • 当Election Leader发现本机出现异常时会触发异常切主。这些场景包括但不限于CLOG盘hang住超过5秒(可通过集群配置项log_storage_warning_tolerance_time调整)、写SLOG线程hang住超过5秒(可通过集群配置项data_storage_warning_tolerance_time调整)、数据盘hang住、CLOG盘满以及Schema未刷新等。
    • 当Leader与多数派超过一个租约时长无法连通时,将开启新一轮的选举,并选出下一任Leader。默认的租约时长是10秒,用户可以修改配置变更租约时长。
  2. 心跳频率及超时处理

    • Observer每2秒给Root Service上报自己的状态信息。如果Root Service在lease_time时间内没有收到某节点的心跳数据包,则认为该Observer进程短暂断线,并标记该节点的心跳状态为lease_expired。默认情况下,lease_time设置为10秒。
    • 如果Root Service在server_permanent_offline_time时间内没有收到某节点的心跳数据包,则认为该Observer进程断线,并标记该节点的心跳状态为permanent_offline。默认情况下,server_permanent_offline_time设置为3600秒(1小时)。

因此,确实依赖于lease_time来判断短时间内的心跳丢失情况,而更长时间的心跳丢失则由server_permanent_offline_time参数控制。当节点被标记为permanent_offline后,系统会对该节点上的数据副本进行处理,确保数据副本Paxos成员组完整。

以上信息来源于《节点故障的自动处理》章节中的“节点状态监测”部分以及相关配置项说明。

更多信息请查看:

  1. server_permanent_offline_time
  2. 容灾架构及容灾级别
  3. 发现磁盘的静默错误
  4. 重启节点
  5. OceanBase 术语
  6. 少数派节点故障
  7. 日志流
  8. 副本介绍
  9. 节点故障的自动处理
  10. lease_time
2 个赞

怎么做到8秒的RTO的?

1 个赞

有点像副本多活

OB怎么做到,在不修改任何参数的情况下,RTO<8s