专业的编程技术博客社区

网站首页 > 博客文章 正文

网络环境问题导致的nacos集群故障

baijin 2024-10-01 07:16:43 博客文章 6 ℃ 0 评论

前段时间我在部署nacos集群的时候,遇到了一点麻烦。最后排查出来的结果居然真是网络环境问题。这个原因应该有些代表性,本文就做个简单分享。

nacos是阿里巴巴开源的一个动态服务发现(注册)、配置管理和服务管理平台。我部署的应用的微服务版本就使用nacos作为应用的服务配置和注册中心。此次为了搭建nacos集群,使用了某电信运营商的边缘计算服务器集群,集群内共3台服务器,我们就简称为nacos1、nacos2、nacos3。

安装的步骤这里就不再赘述了,网上资源很多,直接参考即可。安装的过程也很顺利,毕竟我最近装了不少。部署好nacos程序,设置好配置文件,初始化了数据库,在nacos1、nacos2、nacos3上顺利启动了nacos,似乎又是一次非常顺利的安装。

不过分别登录nacos1、nacos2、nacos3上的管理网页,我发现集群状态异常。正常情况下,每个nacos服务器上的管理网页里看到的状态是一样的,三个节点的状态也都是绿色的“UP”状态。这次不一样的是,异常的nacos节点上看到的所有节点状态都是“UP”,但是其他节点上总显示该节点状态是“DOWN”,节点之间通讯异常!

重启异常的nacos节点,情况没有任何改变。我用netstat命令查看服务器上的网络状态,发现状态异常的nacos节点上有很多nacos进程的TCP连接处在“SYN_SENT”状态,不仅仅是异常nacos节点到其他nacos节点nacos进程的TCP连接处在“SYN_SENT”状态,甚至异常nacos节点到本机的nacos进程的TCP连接也会处在“SYN_SENT”状态!这些连接甚至连TCP/IP连接建立之前的“三次握手”都没有正常完成!

这种情况一般都是先检查防火墙状态,不过这几个节点的防火墙我早就关闭了,局域网中也不应该存在网络访问限制。

排除了防火墙和网络的原因,我更换过nacos的版本,甚至降过级,问题都没有解决。我也从网上搜索了类似的故障,不过也没有得到有价值的建议,但是确实有好几个帖子最后都是以“网络环境”问题为结论最终关闭了,至于是怎样的“网络环境”问题估计大家都不清楚。

实在没有招了,我也从故障nacos节点上通过tcpdump抓了包,可惜第1次没有看出问题,于是我又联系云平台,放“大招”,重装了服务器的操作系统(当时还发现有一台节点的操作系统版本和其他节点不一致,一度以为找到了问题原因),可惜都是“无用功”。

就在我准备放弃,打算直接升级问题响应并反馈到云平台技术支持的时候,我又静下心来仔细查看了一下之前捕获的TCP/IP通讯包,这次终于找到了故障原因。

截图中网络包的源IP地址和目标IP地址一致,都是本机,但是二层MAC地址就不一样了,源IP地址和目标IP地址相同的情况下,却出现了不同的源MAC地址和目标MAC地址!这2个地址中目标MAC地址竟然搞错了!

根据TCP/IP原理(大意),TCP/IP协议栈收到数据以后,会从底层开始解封装。数据链路层会检查收到的报文的目的MAC地址,是本机的,交上层协议处理;不是本机的,直接丢弃!这也就是这些网络连接一直处在SYN_SENT状态,无法完成“3次握手”,实现网络通讯的根本原因!

找到了问题原因,下来就好办了,在3个节点服务器上用arp命令手工添加nacos1、nacos2、nacos3的IP地址和MAC地址的静态映射,重启所有节点的nacos服务,收工!

这是我第一次通过TCPDUMP和TCP/IP原理解决实际生产问题,一是没有太多经验,二是不够细心。这里将这个经历和结果写出来,也是希望对读者有所帮助,遇到类似问题时排查一下是否也是相同的网络问题,以免耽误交付进度。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表