polardb-x重启节点后CN(polardbx-sql)服务无法启动原因查找及处理

镜像:

PolarDB-X Operator:1.4.0

CDC:docker.io/polardbx/polardbx-cdc:5.4.15-20230323180912

DN:docker.io/polardbx/polardbx-engine:80-8.0.18-20230323180912

CN:docker.io/polardbx/polardbx-sql:5.4.15-20230328160000

最新的operator 1.4部署集群,所有的镜像都是默认的,当我重启其中的某一个节点,我发现这个节点上的CDC、DN、GMS这三个pod都能重建,但是唯独CN的pod,一直是2/3

原因查找:

1、先执行 kubectl annotate pod runmode=debug

然后进去 CN 的 pod ,看下 /home/admin/drds-server/logs/tddl/tddl.log 里的报错信息

kubectl annotate pod polardb-x-9zk9-cn-default-fdd67b679-fmgzh runmode=debug

kubectl exec -it polardb-x-9zk9-cn-default-fdd67b679-fmgzh — bash

cd /home/admin/drds-server/logs/tddl/

grep ERROR *.log

2、查找到报错信息如下:

[ManagerExecutor-16-thread-1] ERROR com.alibaba.polardbx.ClusterSyncManager – [] [TDDL] Failed to SYNC to ‘10.233.100.75:3406’ before check for RefreshNodeSyncAction. Caused by: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server., tddl version: 5.4.15-20230328

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

3、在报错的 CN 的 pod 里面,su – admin 切换权限,然后 ctmeta ,可以登到 metadb ,然后执行 select * from server_info 看看

$ su – admin

$ ctmeta

mysql> select * from server_info;

+—-+———————+———————+———–+———–+—————+——+———–+———-+———-+——–+———–+———-+——–+———-+————+——————————————-+ | id | gmt_created | gmt_modified | inst_id | inst_type | ip | port | htap_port | mgr_port | mpp_port | status | region_id | azone_id | idc_id | cpu_core | mem_size | extras | +—-+———————+———————+———–+———–+—————+——+———–+———-+———-+——–+———–+———-+——–+———-+————+——————————————-+ | 1 | 2023-03-30 11:20:50 | 2023-03-30 11:20:50 | polardb-x | 0 | 10.233.73.254 | 3306 | 3606 | 3406 | 3506 | 0 | NULL | NULL | NULL | 4 | 2147483647 | polardb-x-9zk9-cn-default-fdd67b679-74824 | | 2 | 2023-03-30 11:20:50 | 2023-03-30 11:20:50 | polardb-x | 0 | 10.233.100.75 | 3306 | 3606 | 3406 | 3506 | 0 | NULL | NULL | NULL | 4 | 2147483647 | polardb-x-9zk9-cn-default-fdd67b679-fmgzh | | 3 | 2023-03-30 11:21:25 | 2023-03-30 11:21:25 | polardb-x | 0 | 10.233.95.217 | 3306 | 3606 | 3406 | 3506 | 0 | NULL | NULL | NULL | 4 | 2147483647 | polardb-x-9zk9-cn-default-fdd67b679-5x2d8 | | 4 | 2023-03-30 12:01:29 | 2023-03-30 12:01:29 | polardb-x | 0 | 10.233.100.97 | 3306 | 3606 | 3406 | 3506 | 0 | NULL | NULL | NULL | 4 | 2147483647 | polardb-x-9zk9-cn-default-fdd67b679-fmgzh | +—-+———————+———————+———–+———–+—————+——+———–+———-+———-+——–+———–+———-+——–+———-+————+——————————————-+

发现里面有四条CN信息

4、把没用的那条CN的信息delete掉,然后再执行下面这条语句

UPDATE config_listener SET op_version = op_version + 1 WHERE data_id =’polardbx.inst.info’

mysql> delete from server_info where id=2;

mysql> UPDATE config_listener SET op_version = op_version + 1 WHERE data_id =’polardbx.inst.info’;

mysql> select * from server_info;

+—-+———————+———————+———–+———–+—————+——+———–+———-+———-+——–+———–+———-+——–+———-+————+——————————————-+ | id | gmt_created | gmt_modified | inst_id | inst_type | ip | port | htap_port | mgr_port | mpp_port | status | region_id | azone_id | idc_id | cpu_core | mem_size | extras | +—-+———————+———————+———–+———–+—————+——+———–+———-+———-+——–+———–+———-+——–+———-+————+——————————————-+ | 1 | 2023-03-30 11:20:50 | 2023-03-30 11:20:50 | polardb-x | 0 | 10.233.73.254 | 3306 | 3606 | 3406 | 3506 | 0 | NULL | NULL | NULL | 4 | 2147483647 | polardb-x-9zk9-cn-default-fdd67b679-74824 | | 3 | 2023-03-30 11:21:25 | 2023-03-30 11:21:25 | polardb-x | 0 | 10.233.95.217 | 3306 | 3606 | 3406 | 3506 | 0 | NULL | NULL | NULL | 4 | 2147483647 | polardb-x-9zk9-cn-default-fdd67b679-5x2d8 | | 4 | 2023-03-30 12:01:29 | 2023-03-30 12:01:29 | polardb-x | 0 | 10.233.100.97 | 3306 | 3606 | 3406 | 3506 | 0 | NULL | NULL | NULL | 4 | 2147483647 | polardb-x-9zk9-cn-default-fdd67b679-fmgzh | +—-+———————+———————+———–+———–+—————+——+———–+———-+———-+——–+———–+———-+——–+———-+————+——————————————-+

5、最后把直接把有问题的pod删除,就恢复正常了

根本原因:由于server_info里面的脏数据没有清除导致的

留下评论

error: Content is protected !!