暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

分布式数据库学习Note234:OceanBase社区版中,如何处理少数派节点故障?

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/


本节主要介绍少数派节点故障的处理流程。

背景信息

OceanBase 数据库是一款分布式数据库,典型的部署模式为多副本架构,本章节仅介绍不影响任何日志流的多数派副本的节点故障。例如,三副本部署架构下,可以容忍任意一个节点故障而不影响多数派;五副本部署架构下,可以任意两个节点故障而不影响多数派。如果已经存在部分日志流缺少副本,可能少于预期容忍度的节点故障依然会影响多数派,该场景请参见 多数派节点故障

常见的节点故障主要有:

  • 节点硬件异常导致宕机。

  • 节点硬件异常尚未宕机,但导致该节点上的 observer 进程异常退出,例如,主机内存故障导致的 observer 进程崩溃。

  • 节点硬件异常尚未宕机,但导致该节点上的 observer 进程状态异常,例如,IO 异常导致 observer 进程的读写请求超时。

  • 节点硬件异常尚未宕机,但导致该节点上的 observer 进程写入 SSTable 或 RedoLog 的数据错误,并于随后的 Checksum 校验中检查出来。

  • OceanBase 数据库 Bug 导致的 observer 进程异常,例如,线程卡住、内存超限、进程崩溃等异常。

操作步骤

如果是 OceanBase 数据库的 Bug 导致的 observer 进程异常,首先应尽快隔离节点,隔离节点的相关操作请参见 隔离节点。如果不影响服务,可以保留现场并联系 OceanBase 技术支持人员协助处理。如果已经影响服务,需要尽快重启进程或者拉起进程,然后联系 OceanBase 技术支持人员协助处理。

如果由于硬件异常导致节点异常,或者怀疑硬件异常时,需要隔离并替换该异常节点,具体操作如下:

  1. 使用 root 用户登录到集群的 sys 租户。

    连接示例如下,连接数据库时请以实际环境为准。

    obclient -h10.xx.xx.xx -P2883 -uroot@sys -p***** -A
    

    有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)

  2. 尽快对异常节点执行 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 操作的内部执行流程相关信息请参见 隔离节点

  3. 在异常节点所在的 Zone 增加节点。

    增加节点的具体操作请参见 添加节点

  4. 在新增节点上补全异常节点上的副本。

    分为以下三种场景:

    • 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 迁移,可以实时观测迁移流量对集群资源的占用,避免影响应用流量。
    • 如果发现节点异常时,距离节点退出已经超过永久下线时间,并且 Root Service 已经自动发起 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 在新增节点上补全后,删除异常节点。

      删除节点的具体操作请参见 删除节点

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论