跳转至

executor故障处理

executor故障恢复

SeaboxMPP数据库集群在运行过程中,可能会由于各种问题导致executor发生故障,如果executor故障无法提供服务,则会将其status修改为d(掉线)。可能有多种原因导致executor实例故障:

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

  • executor实例没有运行

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

如果SeaboxMPP数据库集群未启用executor镜像功能,则只能手动修复故障的executor。如果SeaboxMPP数据库集群启用了executor镜像功能,当executor发生故障时,系统会自动对其进行恢复操作,具体的恢复步骤如下:

  1. 将executor实例的status设置为d(掉线)
    • 此时SeaboxMPP集群的所有操作都将被阻塞
  2. 向此executor实例发送启动命令,尝试重新启动executor
  3. 如果executor已经启动,则executor恢复成功
  4. 如果在设定的时间(默认30s)内,无法启动executor,则将其status设置为b(损坏)
    • 此时SeaboxMPP集群涉及到该executor的操作都将失败
  5. 如果此executor为primary executor,则会将对应的mirror executor升级为primary executor;如果此executor为mirror executor,则需要断开其对应的primary executor的日志同步功能
  6. 连接SeaboxMPP集群,执行CHECKPOINT操作
  7. 在故障的executor实例上执行REWIND操作,从对应的primary executor中同步数据日志
  8. 重新启动已经修复的executor实例,如果启动失败,则转到第4步继续执行
  9. 打开对应的primary executor的日志同步功能
  10. 已修复的executor启动成功后,将此executor的status设置为u(在线)
  11. 如果已修复的executor的rolepreferred_role不一致,则将进行自动切换其role,以确保rolepreferred_role一致
  12. executor实例恢复完成

注意

  1. executor实例进行自动恢复的前提是,SeaboxMPP开启了executor镜像功能,并且primary executor和mirror executor不能同时损坏
  2. executor实例进行自动恢复有两种方式可以选择:
    • REWIND,需要mirror executor从primary executor同步日志数据,然后在自身将这些日志应用。默认采用此方法进行executor实例恢复。此方法的优点是传输数据量较小,数据进行增量恢复,恢复速度较快。
      seabox config -c monitor_enable_exec_rewind -v 1
      
    • SD_BASEBACKUP,需要mirror executor从primary executor拷贝数据文件,拷贝完成后,将executor启动。如果mirror executor长时间掉线,与primary executor的数据差别非常大,此方法就会体现出优势,可以直接拷贝primary executor的数据,节省了日志应用的时间。
      seabox config -c monitor_enable_exec_basebackup -v 1
      
  3. executor恢复完成后,可能会自动切换role,以确保rolepreferred_role一致,但是切换过程中,SeaboxMPP数据库的业务会有一个瞬时的中断,如果不希望系统进行自动切换,可以将此功能禁止:
    seabox config -c monitor_enable_exec_rebalance -v 0
    
  4. 如果不希望executor进行自动恢复,则需要进行如下设置:
    seabox config -c monitor_enable_exec_rewind -v 0
    seabox config -c monitor_enable_exec_rewind_checksum -v 0
    seabox config -c monitor_enable_exec_basebackup -v 0
    
  5. executor实例发生故障,statusd(掉线)到b(损坏)之间的这段时间,SeaboxMPP集群的所有操作都会被阻塞,无法进行。默认的设定时间为30s,可以根据实际业务需求对此时间进行修改。例如,将此设定时间修改为10s:
    seabox config -c monitor_exec_bad_time -v 10