开发者社区 > 云原生 > 微服务 > 正文

在Nacos中删除pod后重启节点,选举日志一直打印在发起投票,无法加入到现有集群,该如何排障?

在Nacos中 2.x在k8s上删除pod后重启节点,选举日志一直打印在发起投票,无法加入到现有集群,该如何排障?

展开
收起
花开富贵111 2024-05-13 09:59:04 73 0
1 条回答
写回答
取消 提交回答
  • 我们给到的建议是:
    首先,针对Nacos 2.x在Kubernetes(k8s)环境中,当删除Pod后重启节点,若遇到选举日志持续显示在发起投票,无法成功加入现有集群的问题,我们可以依据已有知识进行分析与排障。
    分析问题原因:

    网络配置问题:Kubernetes环境下,网络的瞬态性可能导致新加入的节点与其他节点间的网络通信不稳定,特别是对于Nacos集群依赖的内部通信端口(如8848, 9849, 7848)。

    配置不一致性:新Pod启动时,若使用动态配置(如ConfigMap)来管理cluster.conf或应用配置,可能存在配置未及时更新或更新不一致的情况。

    旧节点元数据未更新:正如之前讨论的相似问题,新节点加入时,其元数据已包含集群中其他节点信息,但旧节点可能因缓存或其他原因未及时同步新节点的元数据。

    选举机制问题:Nacos采用Raft协议进行选举,可能存在选举超时、节点状态异常未正确响应投票请求等情况。

    排障步骤:

    检查网络连通性:确保Kubernetes集群内的所有Nacos节点间的必要端口(8848, 9849, 7848)可以相互访问。使用kubectl exec命令进入每个Nacos节点容器,尝试相互ping或telnet测试。

    验证配置一致性:检查新Pod使用的ConfigMap或Secret是否与集群中其他节点使用的配置完全一致,包括cluster.conf中的集群成员信息及application.properties的其他关键配置。如有差异,需进行同步更新,并重启受影响的Nacos节点。

    强制刷新旧节点元数据:虽然直接操作较为复杂,但理论上可以通过Nacos提供的API或管理界面尝试手动触发元数据刷新,或考虑重启旧节点以强制重新加载集群配置。

    查看并分析日志:收集新加入节点及集群中至少一个旧节点的日志,重点关注alipay-jraft.log, protocol-distro.log, protocol-raft.log, nacos-cluster.log。查找关于选举失败、网络连接异常或配置不匹配的错误信息。

    调整选举超时与重试策略:如果上述步骤未能解决问题,考虑调整Nacos配置中与选举相关的超时时间(如选举超时时间、跟随者心跳超时等),以及增加重试次数,以提高集群对网络瞬态问题的容忍度。这通常需要修改Nacos配置文件后重启服务。

    动态修改日志级别:为了更详细地追踪问题,可以按照提供的方法动态调整Nacos-Server的日志级别至DEBUG,特别是针对选举相关的日志模块,以便获取更多调试信息。此回答整理来自钉群“Nacos社区群2(已满,欢迎加4群:12810027056)”。

    2024-05-14 17:28:01
    赞同 展开评论 打赏

为微服务建设降本增效,为微服务落地保驾护航。

相关电子书

更多
Python第四讲——使用IPython/Jupyter Notebook与日志服务玩转超大规模数据分析与可视化 立即下载
大规模日志数据平台架构面临的问题与挑战 立即下载
Nacos 启航,发布第一个版本, 云原生时代助力用户微服务平台建设 立即下载