多节点Nacos如何获得主节点、从节点
背景
Nacos是一个开源的服务注册与发现、配置管理的平台,它用于帮助应用程序实现动态服务发现和配置。
一、CAP原则:
CAP理论是针对分布式数据库而言的,它是指在一个分布式系统中,
一致性(Consistency,C)
、
可用性(Availability,A)
、
分区容错性(Partition Tolerance, P)
三者不可兼得。
Nacos支持"AP"(可用性 | 分区容错性) 和"CP"(一致性 | 分区容错性)两种 默认是AP
- AP(可用性/分区容忍性)模式下,即使发生了网络分区(网络中的某些节点无法与其他节点通信),系统仍然可以可用。这是通过将系统分成多个区域(Partition)来实现的,每个区域都独立运行,不依赖其他区域的状态。在AP模式下,系统可以容忍节点之间的数据不一致,因此会出现 eventual consistency(最终一致性)的问题。
如果注册Nacos的client节点注册时
ephemeral=true
,那么Nacos集群对这个client节点的效果就是AP
,采用distro协议实现;
- CP(一致性/分区容忍性)模式下,当网络分区发生时,系统保证一致性,并停止对外提供服务。在CP模式下,系统会追求强一致性,即数据在所有节点上保持一致。这意味着,在发生网络分区时,系统会停止对外提供服务,直到网络恢复并保证了一致性。
如果注册Nacos的client节点注册时
ephemeral=false
,那么Nacos集群对这个节点的效果就是CP
的,采用raft协议实现。
根据client注册时的属性,AP,CP同时混合存在,只是对不同的client节点效果不同。Nacos可以很好的解决不同场景的业务需求。
false
为永久实例,true
表示临时实例开启,注册为临时实例,默认是true
spring.cloud.nacos.discovery.ephemeral=true
-
AP模式采用distro 协议,每个 distro 节点都可以接收到读写请求,所以在Nacos中,
节点在AP模式下没有明确的主从之分
。每个节点都具有相同的功能和权重,并且可以独立处理请求。当然,具体的部署方式和负载均衡策略可能会根据实际情况进行调整,但整体上节点在AP模式下是对等的。 -
在CP模式下采用raft协议,nacos节点之间有主maste从follow关系。
因为raft 有master follower两种角色。master负责读写,follower只负责读,收到写请求会转发给master完成写。一次写操作,要经过半数follower写入成功ack应答,才能算完成一次成功的写操作。master、follower最终都拥有全量数据,达到数据一致性。
二、主从节点的异同
Nacos是一个用于动态配置管理和服务发现的开源系统。在Nacos中,有主节点和从节点两种类型的节点,它们在功能和角色上有一些异同。
(以下关于主、从节点的描述均是指Nacos在CP模式下:)
异同之处如下:
-
主节点(Leader):
- 负责整个Nacos集群的管理和调度。
- 处理配置信息的写入和更新操作。
- 管理和分配从节点的任务并协调它们之间的工作。
- 如果主节点不可用,从节点中的一个会被选举为新的主节点。
-
从节点(Follower):
- 接收主节点分配的任务并执行它们。
- 从主节点同步配置信息。
- 当主节点不可用时,从节点之间会通过选举机制选择新的主节点。
- 不能处理写入和更新操作,这些操作只能由主节点执行。
总的来说,主节点负责整个Nacos集群的管理和调度,处理写入和更新操作,而从节点则负责执行主节点分配的任务和同步配置信息。当主节点出现故障或不可用时,从节点会通过选举产生新的主节点,以保证系统的正常运行。
三、在Web端配置方面的区别
在Nacos的Web端配置主节点和从节点主要涉及以下方面的不同:
-
配置主节点:
- 在Nacos的Web端,配置主节点需要设置节点类型为主节点(Leader)。
- 主节点负责整个Nacos集群的管理和调度,处理写入和更新操作。
- 主节点需要管理和分配从节点的任务,并协调它们之间的工作。
-
配置从节点:
- 在Nacos的Web端,配置从节点需要设置节点类型为从节点(Follower)。
- 从节点接收主节点分配的任务并执行它们,同时与主节点同步配置信息。
- 从节点不能处理写入和更新操作,这些操作只能由主节点执行。
需要注意的是,在Nacos的Web端配置节点类型为主节点或从节点时,需要确保节点已经正确地部署和启动,以便进行节点注册与发现。此外,配置主节点和配置从节点都是基于Nacos的集群环境,用于提高系统的可用性和可扩展性。
四、选举原理:
我们以三节点部署的Nacos集群为例,简单描述下Nacos集群的选举原理
在三节点的Nacos集群中,有一个节点会被选举为主节点,而其他两个节点则成为从节点。Nacos使用Raft一致性算法
来实现主节点的选举和数据的复制。
Raft算法中的角色分为三种:候选人(Candidate)
、领导者(Leader)
和追随者(Follower)
。
-
1.初始情况下,所有的节点都是追随者。当集群启动或者当前的领导者节点宕机时,选举过程开始。以下是选举过程的简要描述:
-
2.候选人状态:节点向其他节点发送投票请求,并将自己的状态更改为候选人状态,更新自己的
任期(term)
。 -
3.投票阶段:其他节点接收到投票请求后,检查自己的当前任期,如果比候选人的任期小,则投票给候选人,并将自己的状态更改为追随者状态。
-
4.必要条件:在获得超过一半的选票之后,候选人将成为新的领导者。
-
5.一旦选举完成,新的领导者将负责处理来自客户端的请求,并将更新的数据复制到其他节点上。追随者节点将按照领导者节点的指示来复制数据并保持一致。
除了选举过程之外,Nacos还提供了API和Web界面来查看当前的集群状态。在Web界面中,您可以查看每个节点的角色和状态,并明确哪个节点是主节点,哪些是从节点。
- 需要注意的是,选举过程需要一定的时间,所以在
初始选举
期间可能会有一小段时间的不可用性
。但一旦选举完成,Nacos集群将恢复正常运行,并确保数据的一致性和高可用性。
五、如何选举新的主节点:
当Nacos集群的三个节点之中有一个节点挂掉后,剩下的两个节点会继续参与选举新的主节点。以下是选举过程的简要描述:
-
挂掉节点检测:剩下的两个节点会定时发送心跳包给其他节点,以检测其他节点的存活状态。如果其中一个节点长时间没有收到心跳包,则它会认为该节点挂掉。
-
新的选举过程开始:当一个节点检测到其他节点挂掉后,它会立即进入候选人状态,并开始新的选举过程。它会向其他节点发送投票请求,并更新自己的任期。
-
投票阶段:其他节点接收到投票请求后,检查自己的当前任期,如果比候选人的任期小,则投票给候选人,并将自己的状态更改为追随者状态。
-
必要条件:在获得超过一半的选票之后,候选人将成为新的领导者。
需要注意以下几点:
-
1.网络稳定性:确保集群中剩余的两个节点之间的网络稳定性,以便它们能够正常通信。否则,选举过程可能会受到干扰。
-
2.节点配置:在Nacos配置文件中,需要正确配置节点的集群信息,包括节点的IP地址和端口号。确保配置正确无误,以便节点能够正确地发现和通信。
-
3.选举超时时间:Nacos提供了选举超时时间的配置选项。如果选举超时时间较长,会增加选举过程的时间和整体的不可用性。您可以根据实际需求来配置合适的选举超时时间。
-
4.节点恢复:当挂掉的节点重新启动后,它将以追随者的身份加入集群,参与选举新的主节点。节点重新加入集群后,数据将会进行同步,保持集群的一致性。
通过以上步骤和注意事项,Nacos集群中的两个节点能够进行选举,选择出新的主节点,并保持集群的正常运行。