问题现象
在一主多备集群或主备从集群部署模式下,对某一DN进行了重建,在此过程中,重启 集群,该DN状态为Pending Starting,其余DN状态为Pending Need Repair,无法仲 裁出主备,状态为Pending Starting的DN报出大量无法接受业务连接的日志。
redo minRecoveryPoint at 2/321C31C0; backupStartPoint at 1/C13075B0; backupEndRequired FALSE LOG: redo starts at 1/C5F9D820 LOG: invalid record length at 2/2170F700: wanted 32, got 0 FATAL: the database system is starting up FATAL: the database system is starting up FATAL: the database system is starting up ...
原因分析
-
步骤1 集群启动过程中,所有DN状态是Pending Starting。首先对已有xlog进行REDO,日志 分析发现问题DN已经REDO到了后一条xlog record,依然没有达到ControlFile里的 小恢复点MinRecovery Point
-
步骤2 问题DN在该场景下,无法在REDO过程中通过CheckConsistency检查,无法发信号给 PostMaster主线程,进行PM状态机迁移。
-
步骤3 集群是以归档恢复模式启动的,由于状态机无法正常迁移,因此DN无法接受连接, CM Agent无法将DN的状态设置成Pending Need Repair。
-
步骤4 在该问题场景下,CM Server无法仲裁出DN的主备,导致DN的REDO线程一直循环, 无法接收外部业务请求,报错信息显示如下: FATAL : the database system is starting up。
----结束
处理办法
-
步骤1 kill处于Pending Starting状态的DN进程,即剔除DN;
-
步骤2 等待其他处于Pending Need Repair状态的DN仲裁出主备,恢复到Primary Normal或 Standby Normal状态;
-
步骤3 对问题DN做全量重建,待其重建成功则问题修复,执行的全量重建命令如下: cm_ctl build -n NODEID -D DATADIR -b full NODEID是节点ID,DATADIR是待重建DN的数据目录。




