欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/
本节主要介绍少数派节点故障的处理流程。
背景信息
OceanBase 数据库是一款分布式数据库,典型的部署模式为多副本架构,本章节仅介绍不影响任何日志流的多数派副本的节点故障。例如,三副本部署架构下,可以容忍任意一个节点故障而不影响多数派;五副本部署架构下,可以任意两个节点故障而不影响多数派。如果已经存在部分日志流缺少副本,可能少于预期容忍度的节点故障依然会影响多数派,该场景请参见 多数派节点故障。
常见的节点故障主要有:
节点硬件异常导致宕机。
节点硬件异常尚未宕机,但导致该节点上的 observer 进程异常退出,例如,主机内存故障导致的 observer 进程崩溃。
节点硬件异常尚未宕机,但导致该节点上的 observer 进程状态异常,例如,IO 异常导致 observer 进程的读写请求超时。
节点硬件异常尚未宕机,但导致该节点上的 observer 进程写入 SSTable 或 RedoLog 的数据错误,并于随后的 Checksum 校验中检查出来。
OceanBase 数据库 Bug 导致的 observer 进程异常,例如,线程卡住、内存超限、进程崩溃等异常。
操作步骤
如果是 OceanBase 数据库的 Bug 导致的 observer 进程异常,首先应尽快隔离节点,隔离节点的相关操作请参见 隔离节点。如果不影响服务,可以保留现场并联系 OceanBase 技术支持人员协助处理。如果已经影响服务,需要尽快重启进程或者拉起进程,然后联系 OceanBase 技术支持人员协助处理。
如果由于硬件异常导致节点异常,或者怀疑硬件异常时,需要隔离并替换该异常节点,具体操作如下:
使用
root用户登录到集群的sys租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys -p***** -A有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)。
尽快对异常节点执行
Stop Server或Force Stop Server操作,并确保执行成功,避免影响业务流量。Stop Server的语句如下:obclient [(none)]> ALTER SYSTEM STOP SERVER 'svr_ip:svr_port';示例:
obclient [(none)]> ALTER SYSTEM STOP SERVER '172.xx.xx.xx:2882';Force Stop Server的语句如下:obclient [(none)]> ALTER SYSTEM FORCE STOP SERVER 'svr_ip:svr_port';示例:
obclient [(none)]> ALTER SYSTEM FORCE STOP SERVER 172.xx.xx.xx:2882';Stop Server和Force Stop Server操作的内部执行流程相关信息请参见 隔离节点。在异常节点所在的 Zone 增加节点。
增加节点的具体操作请参见 添加节点。
在新增节点上补全异常节点上的副本。
分为以下三种场景:
observer 进程已经退出的场景。
可以主动发起 Unit 迁移,也可以等待 Root Service 自动发起 Unit 迁移。observer 进程退出超过永久下线时间后 Root Service 会自动发起 Unit 迁移,永久下线时长由系统配置项
server_permanent_offline_time控制 ,同时需要确保系统配置项enable_rereplication处于打开状态。手动发起 Unit 迁移的相关操作请参见 Unit 迁移。
异常节点上的数据错误,或者进程状态异常导致迁移 Unit 操作卡住,或者进程状态异常导致全局状态异常(例如,合并卡住)的场景。
可以主动 kill observer 进程,然后参考第一种场景(observer 进程已经退出的场景)处理。
硬件隐患,以及不会导致集群全局状态异常的场景。
该场景不需要 Kill observer 进程(避免 Kill observer 后导致的集群风险敞口变大)。可以主动发起 Unit 迁移,将异常节点上的 Unit 全部迁移至新增节点。
手动发起 Unit 迁移的相关操作请参见 Unit 迁移。
说明
建议总是主动发起 Unit 迁移:
- 主动迁移可以控制从异常节点上迁移所有 Unit 到新节点,避免 Root Service 自动发起,从而保持原先的 Unit 拓扑结构,避免打破节点之间的均衡。
- Root Service 自动发起 Unit 迁移,需要等待进程退出超过永久下线时间,会增大节点异常的风险敞口。
- 主动发起 Unit 迁移,可以实时观测迁移流量对集群资源的占用,避免影响应用流量。
操作结束后,可以通过
oceanbase.DBA_OB_UNIT_JOBS视图查看数据补全进度。obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_UNIT_JOBS WHERE JOB_TYPE = 'MIGRATE_UNIT'; +--------+--------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------+----------+------------+------------+-------------+ | JOB_ID | JOB_TYPE | JOB_STATUS | RESULT_CODE | PROGRESS | START_TIME | MODIFY_TIME | TENANT_ID | UNIT_ID | SQL_TEXT | EXTRA_INFO | RS_SVR_IP | RS_SVR_PORT | +--------+--------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------+----------+------------+------------+-------------+ | 4 | MIGRATE_UNIT | INPROGRESS | NULL | 0 | 2023-01-04 17:22:02.208219 | 2023-01-04 17:22:02.208219 | 1004 | 1006 | NULL | NULL |xx.xx.xx.238| 2882 | +--------+--------------+------------+-------------+----------+----------------------------+----------------------------+-----------+---------+----------+------------+------------+-------------+如果查询结果为空,则表示 Unit 迁移完成,数据补全成功。
待异常节点上的 Unit 在新增节点上补全后,删除异常节点。
删除节点的具体操作请参见 删除节点。
如果发现节点异常时,距离节点退出已经超过永久下线时间,并且 Root Service 已经自动发起 Unit 迁移,需要观察迁移后的拓扑结构、观察迁移流量对集群资源的占用、做好对业务人员的同步。
欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/




