executor故障处理
executor故障恢复¶
SeaboxMPP数据库集群在运行过程中,可能会由于各种问题导致executor发生故障,如果executor故障无法提供服务,则会将其status
修改为d
(掉线)。可能有多种原因导致executor实例故障:
-
由于网络或者硬件失效,导致executor主机不可用
-
executor实例没有运行
-
executor实例的数据目录损坏或者丢失
如果SeaboxMPP数据库集群未启用executor镜像功能,则只能手动修复故障的executor。如果SeaboxMPP数据库集群启用了executor镜像功能,当executor发生故障时,系统会自动对其进行恢复操作,具体的恢复步骤如下:
- 将executor实例的
status
设置为d
(掉线)- 此时SeaboxMPP集群的所有操作都将被阻塞
- 向此executor实例发送启动命令,尝试重新启动executor
- 如果executor已经启动,则executor恢复成功
- 如果在设定的时间(默认30s)内,无法启动executor,则将其
status
设置为b
(损坏)- 此时SeaboxMPP集群涉及到该executor的操作都将失败
- 如果此executor为primary executor,则会将对应的mirror executor升级为primary executor;如果此executor为mirror executor,则需要断开其对应的primary executor的日志同步功能
- 连接SeaboxMPP集群,执行CHECKPOINT操作
- 在故障的executor实例上执行REWIND操作,从对应的primary executor中同步数据日志
- 重新启动已经修复的executor实例,如果启动失败,则转到第4步继续执行
- 打开对应的primary executor的日志同步功能
- 已修复的executor启动成功后,将此executor的
status
设置为u
(在线) - 如果已修复的executor的
role
与preferred_role
不一致,则将进行自动切换其role
,以确保role
与preferred_role
一致 - executor实例恢复完成
注意
- executor实例进行自动恢复的前提是,SeaboxMPP开启了executor镜像功能,并且primary executor和mirror executor不能同时损坏
- 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
- REWIND,需要mirror executor从primary executor同步日志数据,然后在自身将这些日志应用。默认采用此方法进行executor实例恢复。此方法的优点是传输数据量较小,数据进行增量恢复,恢复速度较快。
- executor恢复完成后,可能会自动切换
role
,以确保role
与preferred_role
一致,但是切换过程中,SeaboxMPP数据库的业务会有一个瞬时的中断,如果不希望系统进行自动切换,可以将此功能禁止:seabox config -c monitor_enable_exec_rebalance -v 0
- 如果不希望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
- executor实例发生故障,
status
为d
(掉线)到b
(损坏)之间的这段时间,SeaboxMPP集群的所有操作都会被阻塞,无法进行。默认的设定时间为30s,可以根据实际业务需求对此时间进行修改。例如,将此设定时间修改为10s:seabox config -c monitor_exec_bad_time -v 10