本文主要介绍 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]
。