NDB集群ndbd节点相互等待停滞问题求助
NDB集群浮动IP连接问题排查与解决方案
核心问题
搭建了2个管理节点、2个数据节点(ndbd)、2个SQL节点的NDB集群,管理节点与数据节点共享虚拟机,SQL节点独立。切换为动态浮动IP后,数据节点、SQL节点无法与管理节点保持连接,持续重连,日志显示数据节点互相等待连接。
已做操作
- 为各虚拟机配置新NIC地址(eth0:1别名网卡)
- 尝试配置集群WAN模式
排查与解决步骤
1. 优先验证网络连通性
所有节点之间必须确保端口可达,这是集群通信的基础:
- 关键端口清单:管理节点需开放
1186(集群管理端口)、2186(统计端口);数据节点需开放2202(数据节点间通信)、2203(数据节点与SQL/管理节点通信);SQL节点需开放与数据节点通信的对应端口。 - 连通性测试命令:
在数据节点执行以下命令,测试与管理节点的连通性:# 测试ICMP连通性 ping [管理节点浮动IP/DNS] # 测试端口是否开放 nc -zv [管理节点浮动IP/DNS] 1186 nc -zv [管理节点浮动IP/DNS] 2186 - 防火墙与安全组检查:
- 虚拟机本地防火墙:确保上述端口已放行,例如:
iptables -A INPUT -p tcp --dport 1186 -j ACCEPT iptables -A INPUT -p tcp --dport 2186 -j ACCEPT - 云服务商安全组/网络ACL:确保集群所有节点的IP/端口在安全组规则中互相放行。
- 虚拟机本地防火墙:确保上述端口已放行,例如:
2. 修正浮动IP的网卡配置
当前NIC配置存在参数矛盾(BOOTPROTO=dhcp同时指定IPADDR),需调整:
- 问题点:
BOOTPROTO=dhcp会让网卡自动获取IP,但手动设置IPADDR和NETMASK=255.255.255.255可能导致路由异常。多数云平台的浮动IP无需手动配置网卡别名,只需将浮动IP关联到虚拟机主网卡即可。 - 调整方案:
- 删除
eth0:1别名网卡配置,恢复主网卡为默认配置。 - 按照云服务商文档,在控制台将浮动IP绑定到虚拟机主网卡(无需修改本地网卡)。
- 验证路由:执行
ip route show,确认浮动IP的流量能通过主网卡路由到其他节点。
- 删除
3. 优化config.ini配置
(1)主机名解析与IP绑定
- 规避DNS解析问题:将
HostName直接替换为浮动IP地址,而非DNS域名,例如:[ndb_mgmd] HostName=192.168.1.100 # 替换为实际浮动IP NodeId=1 PortNumber=1186 - 强制节点绑定到浮动IP:去掉数据节点的
TcpBind_INADDR_ANY=1,改为指定TcpBindAddress为浮动IP,确保节点仅监听浮动IP:[ndbd] HostName=[数据节点浮动IP] NodeId=3 TcpBindAddress=[数据节点浮动IP]
(2)WAN模式正确配置
若跨公网/WAN部署,需补充以下关键参数:
[tcp default] PreferIPVersion=4 SendBufferMemory=2M ReceiveBufferMemory=2M ConnectTimeout=30000 # 延长连接超时时间,适配WAN延迟 SocketCheckInterval=30000 [ndbd default] MaxBufferedEpochs=10 MaxSendBufferMemory=64M # 跨区域部署时,确保每个副本在不同节点组 NodeGroup=1,3 NodeGroup=2,4
4. 深入日志排查
查看更详细的日志定位错误:
- 管理节点日志:
/var/lib/mysql-cluster/cluster/ndb_1_cluster.log - 数据节点日志:
/var/lib/mysql/ndb_3_cluster.log(文件名中数字对应NodeId) - SQL节点日志:
/var/log/mysqld.log
重点查找关键词:connection refused、timeout、host unreachable、resolve failed等。
5. 验证节点状态
使用ndb_mgm工具连接管理节点,查看集群状态:
ndb_mgm -h [管理节点浮动IP] # 进入交互界面后执行 show
观察各节点的状态(connected/disconnected/starting),结合日志分析具体原因。
内容的提问来源于stack exchange,提问作者Galyushi
相关产品推荐
相关产品推荐

