跳转至

Coordinator故障处理

Coordinator异常恢复

SeaboxMPP数据库系统启用coordinator多活功能后,某个coordinator故障,不影响集群的整体可用性。coordinator故障的可能有如下原因:

  • 由于网络或者硬件失效,导致coordinator主机不可用

  • coordinator实例没有运行

  • coordinator实例的数据目录损坏或者丢失

当发现coordinator实例异常后,SeaboxMPP会自动对coordinator进行恢复,不需要人工干预,具体的恢复步骤如下:

  1. 将coordinator实例的status设置为d(掉线)

    • 此时SeaboxMPP集群的DDL和集群控制命令将会被阻塞
  2. 向此coordinator实例发送启动命令,尝试重新启动coordinator

  3. 如果coordinator已经启动,则coordinator恢复成功

  4. 如果在设定的时间(默认120s)内,无法启动coordinator,则将其status设置为b(损坏)

    • 此时SeaboxMPP集群的DDL和集群控制命令将会正常执行
  5. 将SeaboxMPP集群进入只读状态

  6. 调用sd_basebackup,从依然在线的coordinator实例中拷贝数据,来恢复故障的coordinator实例

  7. 重新启动已经修复的coordinator实例,如果启动失败,则转到第4步继续执行

  8. 已修复的coordinator启动成功后,将此coordinator的status设置为u(在线)

  9. SeaboxMPP集群退出只读状态,恢复为正常业务状态

  10. coordinator实例恢复完成

注意

  1. coordinator实例进行自动恢复的前提是,SeaboxMPP数据库集群中依然有在线的coordinator实例,如果集群中已经没有在线的coordinator实例,则无法进行自动恢复

  2. coordinator实例进行恢复前,需要将集群设置为只读状态,如果不能接受集群进入只读状态,可以禁止coordinator的自动恢复

seabox config -c monitor_enable_coor_basebackup -v 0
  1. coordinator实例发生故障,statusd(掉线)到b(损坏)之间的这段时间,SeaboxMPP集群的DDL操作会被阻塞,无法进行。默认的设定时间为120s,可以根据实际业务需求对此时间进行修改。例如,将此设定时间修改为30s:
seabox config -c monitor_coor_bad_time -v 30