前言
在linux 源码部署polardb-x 遇到不少错误,特在此做个汇总。
问题列表
CN 启动报错 Failed to init new TCP
详细错误如下
Caused by: Failed to init new TCP. XClientPool to my_polarx#267b21d8@127.0.0.1:33660 now 0 TCP(0 aging), 0 sessions(0 running, 0 idle), 0 waiting connection.
at com.alibaba.polardbx.rpc.pool.XConnectionManager.getConnection(XConnectionManager.java:514)
at com.alibaba.polardbx.rpc.compatible.XDataSource.getConnection(XDataSource.java:193)
... 25 more
Caused by: Failed to init new TCP.
at com.alibaba.polardbx.rpc.pool.XClientPool.getConnection(XClientPool.java:491)
at com.alibaba.polardbx.rpc.pool.XClientPool.getConnection(XClientPool.java:287)
at com.alibaba.polardbx.rpc.pool.XConnectionManager.getConnection(XConnectionManager.java:502)
... 26 more
Caused by: ERR-CODE: [PXC-10001][ERR_X_PROTOCOL_CLIENT] XClientPool to my_polarx#267b21d8@127.0.0.1:33660 connect fail.
at com.alibaba.polardbx.rpc.pool.XClientPool.getConnection(XClientPool.java:474)
... 28 more
分析
CN 在 获取tcp 连接失败 端口是 33660 这个问题 比较复杂 本质上是DN的rpc端口和 CN连接使用端口不匹配 逐步排查
可能是DN初始化使用的33660 但是依然无法连接
可能是DN初始化使用的32886 但是CN连接使用的33660 肯定连接不上的
解决步骤
- 在DN启动 增加mysql参数 指定 连接rpc 端口 rpc_port=32886
具体观察查看 DN启动日志
- 确认DN rpc端口为32886
# 登录DN
mysql -u root -S /usr/local/develop/PolarDB-X/polardbx_engine/run/mysql.sock -p
# 查看 rpc端口生效的配置
show variables like '%rpc_port%';
# 是否new_rpc
show variables like '%new_rpc%';
rpc_port默认应该是32886
-
在CN启动 增加mysql参数 指定 连接metab-db rpc 端口 storageDbXprotoPort=32886
-
检查CN 连接使用的端口配置 默认应该是连接32886
# 登录DN
mysql -u root -S /usr/local/develop/PolarDB-X/polardbx_engine/run/mysql.sock -p
# 选择metadb
use polardbx_meta_db_polardbx;
select * from storage_info;
# 查看结果列中 xport端口是否为32886
# 如果不是的话 修改xport 为32886
update storage_info set xport=32886;
- 配置错误
检查DN 配置 rpc_port=32886 loose_polarx_port= 32886 loose_galaxyx_port=32886 CN的 配置 metaDbXprotoPort=32886 storageDbXprotoPort=32886
CDC 首次启动报错 task config is null
详细错误如下
2024-08-08 16:46:13.516 [main] INFO org.eclipse.jetty.server.Server - Started @20461ms
2024-08-08 16:46:13.517 [main] INFO c.a.p.binlog.daemon.rest.RestServer - REST server listening at http://192.168.104.234:3007/
2024-08-08 16:46:13.528 [main] INFO c.a.p.binlog.monitor.MonitorManager - Monitor Server is started.
2024-08-08 16:46:13.606 [main] INFO c.a.polardbx.binlog.TaskBootStrap - ## starting the task, with name Final.
2024-08-08 16:46:13.617 [main] ERROR c.a.polardbx.binlog.TaskBootStrap - ## Something goes wrong when starting up the task process:
com.aliyun.polardbx.binlog.error.PolardbxException: task config is null
at com.aliyun.polardbx.binlog.TaskConfigProvider.getTaskRuntimeConfig(TaskConfigProvider.java:65)
at com.aliyun.polardbx.binlog.TaskController.<init>(TaskController.java:56)
at com.aliyun.polardbx.binlog.TaskBootStrap.boot(TaskBootStrap.java:77)
at com.aliyun.polardbx.binlog.daemon.DaemonBootStrap.main(DaemonBootStrap.java:107)
分析
第一次启动需要初始化一些元数据信息,配置runtime_mode=LOCAL_SINGLE LOCAL_SINGLE 模式不会等元数据初始化好,直接开始尝试消费Binlog ,所以会有缺失配置的报错
解决
先使用 runtime_mode=LOCAL 启动, 等daemon进程正常运行成功后,kill -9 杀掉进程,然后在用 LOCAL_SINGLE 启动
CDC 启动 unrecognized option: -XLog:gc*:xx
分析
jdk1.8 不支持 XLog:gc 参数
解决
安装jdk11,然后确认环境变量为jdk11 ,最后重新进行部署
结尾
其他更多问题 等待后续补充。
good day !!!