开发者社区 > 弹性计算 > 云服务器ECS > 正文

docker swarm集群部署nacos

大佬们,有没有遇到过用docker swarm内网集群下,用 stack 启动3个节点的nacos为集群模式,已确认同一个network下网络是通的,3个节点8848,9848,9849端口均开放状态,nacos启动无异常,但是nacos集群总是有两台是down的,只有主节点的能正常访问,查看nacos日志一直在刷以下错误:
Fail to connect server, after trying 161 times, last try server is {serverIp = 'nacos-node1', server main port = 8848}, error = unknown
ERROR Server check fail, please check server nacos-node2 ,port 9849 is available , error ={}
服务器防火墙关闭了又是正常集群的,防火墙一打开就不行。compoose启动文件如下:
8872dad619b1b23fa0bbd6ad113cfb9.png

展开
收起
1965226291353091 2024-09-06 18:58:01 107 0
2 条回答
写回答
取消 提交回答
  • 问题可能出在防火墙设置上,需要为Docker Swarm集群中的每个节点添加以下防火墙规则:

    允许节点之间的TCP通信,端口范围为8848-9849(Nacos集群的端口范围)。
    允许节点之间的UDP通信,端口范围为8848-9849(Nacos集群的端口范围)。

    image.png
    参考文档https://zhuanlan.zhihu.com/p/699712520

    2024-09-07 08:57:00
    赞同 84 展开评论 打赏
  • 针对您遇到的问题,即在Docker Swarm内网集群环境下使用stack部署Nacos集群时,尽管网络通畅且端口已开放,但集群中始终有两台节点显示为DOWN状态,仅主节点可正常访问,并且在开启服务器防火墙后问题加剧,日志中出现连接失败的错误信息。结合提供的参考资料,以下是可能的解决方案和排查步骤:

    1. 检查Nacos配置一致性
      确保所有Nacos节点的配置文件(如cluster.conf)中列出的集群成员信息一致且正确,包括IP地址和端口号。集群间的通信依赖于此配置[1]

    2. 网络连通性验证
      虽然您提到网络是通的,但仍需逐一验证每个节点间8848、9848、9849端口的连通性,包括在防火墙开启状态下。可以使用pingtelnetnc命令进行测试。

    3. 防火墙与安全组规则

      • 确认防火墙规则正确设置了对8848、9848、9849端口的允许访问,不仅是入站也要考虑出站规则。
      • 如果使用云服务,检查云服务提供商的安全组设置,确保所有必要的端口在安全组规则中开放,且规则应用到所有相关的云服务器实例上[1]
    4. Docker网络配置
      确认Docker Swarm服务使用的overlay网络配置正确,且服务发现机制(如DNS解析)在集群内部工作正常。确保Nacos容器内的网络配置没有限制对外通信。

    5. Nacos日志深入分析

      • 仔细检查报错节点的日志,寻找可能导致连接失败的具体原因,如网络配置不当、认证问题或服务初始化失败等。
      • 特别关注是否有与Distro协议初始化失败相关的错误,这可能是集群间通信障碍的一个迹象[2]
    6. 云环境特定因素

      • 如果您的集群跨越不同的子网或VPC,确保网络路由和云企业网(CEN)配置正确,以实现跨网络的通信。
      • 检查是否有ACL策略或云服务商的默认安全策略限制了集群间的通信。
    7. 服务注册与发现调整
      确认Nacos服务实例在集群中的注册逻辑正确无误,避免因注册信息不准确导致的连接失败。

    8. 资源与性能监控

      • 监控Nacos节点的资源使用情况,如CPU、内存和网络带宽,确保没有达到上限导致服务受限。
      • 考虑调整客户端的超时设置或升级到最新版本的Java Client以提高容错性[3]

    综上所述,问题可能涉及多方面,需要综合检查网络配置、安全规则、服务配置及资源状况。逐一排查并针对性地调整,应该能帮助您定位并解决问题。

    相关链接
    使用docker部署nacos https://developer.aliyun.com/ask/604718
    Nacos2.1 容器中报这个是因为啥问题? https://developer.aliyun.com/ask/548872
    使用MSE的Nacos注册中心 步骤一:购买并构建Nacos引擎 https://help.aliyun.com/zh/sae/serverless-app-engine-classic/user-guide/use-an-mse-nacos-registry
    如何解决MSE Nacos连接超时问题? 解决方案 https://help.aliyun.com/zh/mse/support/handle-the-timeout-issue-of-the-connection-between-an-application-and-an-mse-nacos-instance

    2024-09-06 22:56:04
    赞同 85 展开评论 打赏

云服务器ECS是一种安全可靠、弹性可伸缩的IaaS级云计算服务。在这里你可以获取最新的ECS产品资讯、最前沿的技术交流以及优惠活动等信息,加速自己的技术成长。

相关电子书

更多
应用 Docker 进行持续交付:用技术改变交付路程 立即下载
从Docker到容器服务 立即下载
Docker@Alibaba——超大规模Docker化的实战经验 立即下载