OB 数据库 V2.X 版本的磁盘故障检测原理

本文主要介绍 OceanBase 数据库的磁盘故障检测逻辑。

适用版本

OceanBase 数据库 V2.X 版本

数据盘故障检测逻辑

对于写操作,如果在 1 分钟内出现 100 次失败,则 OceanBase 数据库会将数据盘标记为故障。

对于读操作,OceanBase 数据库会根据读操作超时次数进行以下操作:

  • 默认读操作的超时时间为 5 秒,重试超时的时长计算方法为

    max{30,5*2n}

    ,其中 n 为重试次数。

  • 连续三次超时后,该台 OBServer 上的 Leader 会卸任,进入无主选举。卸任的 Leader 节点会被加入黑名单。有关 OceanBase 数据库选举黑名单相关的信息,请参见 如何配置选举配置项 election_blacklist_interval。 进入无主选举的检测时间为

    5 + 30 + 30 = 65

    秒。

  • 连续六次超时后,OceanBase 数据库会将数据盘标记为故障。

  • 数据盘被标记为故障的检测时间为

    5 + 30 + 30 + 40 + 80 + 160 = 345

    秒。

被标记为故障的磁盘所在的 OBServer 上所有的分区均不允许被选举为 Leader 副本,但该 OBSevrer 仍会参与投票。

日志盘故障检测逻辑

OceanBase 数据库 V2.X 版本日志盘使用 Linux Aio Write 写入,在有任意日志写入的情况下,无论任何原因出现停写时间超过

10

秒,OceanBase 数据库都会将故障日志盘所在的 OBServer 上的所有分区副本 Leader 切换到其他节点。

该行为由配置项

_ob_clog_timeout_to_force_switch_leader

控制,表示当 Clog 停写超过该配置项指定的值后,就会发生 Leader 卸任。默认为

10

秒,取值范围为

[0s,60m]