问题现象
clog 盘(默认 /data/log1)使用率 100% 后,故障节点上的分区会通过高可用机制切主,将分区的 Leader 切换到其他正常节点。但是在故障恢复后,通过观测发现 Leader 很长时间未按照 Primary Zone 的配置方式切换回已经恢复的节点,对副本手动切主也无法成功将主切回已经恢复的节点,必须重启恢复的节点 Leader 才能正常切回。
触发条件
clog 盘满导致磁盘持续读数据失败。
关键信息
通过过滤关键日志中含有的 system_score_=1600(代表 SYSTEM_SCORE_DATA_DISK_ERROR 状态) 获取完整日志信息。
grep "system_score_=1600" observer.log
输出内容如下:
[2024-11-19 22:49:38.502199] WARN [CLOG] get_candidates_array (ob_clog_mgr.cpp:2165) [15172][0][YB4268FFEF91-00062743F46BC86E-0-0] [lt=4] [dc=99] dst_server priority is less than self(cur_pkey={tid:1105009185915135, partition_id:0, part_cnt:0}, cur_server="xxx.xxx.xx.xx:2882", priority=[is_candidate=1, membership_version=1732024340365619, log_id=11388, data_version="0-0-0", locality=0, system_score_=1600], cur_self_priority=[is_candidate=1, membership_version=1732024340365619, log_id=11388, data_version="0-0-0", locality=0, system_score_=0])
问题原因
clog 盘使用率达到 100% 后,此节点会被标记上磁盘故障状态,此节点上的副本无法再当选 Leader,必须手动清理磁盘故障的标记后才能重新当选 Leader。
问题的风险及影响
后续 Leader 无法回切,Leader 不均衡。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
适用版本
OceanBase 数据库 V2.x、V3.x 版本。
解决方法及规避方式
清理磁盘错误标记,命令如下。
ALTER SYSTEM SET DISK VALID SERVER = '<IP>:<PORT>';