hazelcast使用什么算法查找主节点
我正在研究hazelcast用于以多播方式查找主节点的算法。首先,我找到了查找主节点的函数:com.hazelcast.cluster.MulticastJoiner.findMasterWithMulticast()hazelcast使用什么算法查找主节点,hazelcast,multicast,Hazelcast,Multicast,我正在研究hazelcast用于以多播方式查找主节点的算法。首先,我找到了查找主节点的函数:com.hazelcast.cluster.MulticastJoiner.findMasterWithMulticast() 专用地址findMasterWithMulticast(){ 试一试{ if(logger.isFinestEnabled()){ finest(“搜索主节点。最大尝试次数:”+maxTryCount.get()); } JoinRequest JoinRequest=node.
专用地址findMasterWithMulticast(){
试一试{
if(logger.isFinestEnabled()){
finest(“搜索主节点。最大尝试次数:”+maxTryCount.get());
}
JoinRequest JoinRequest=node.createJoinRequest();
而(node.isActive()&¤tTryCount.incrementAndGet()Hazelcast的主要功能之一是它没有主成员。每个集群成员的功能配置相同。
最早的成员(在群集中创建的第一个成员)将自动向群成员执行数据分配
启动成员时,会在其中创建分区表。此表存储分区ID及其所属的群集成员。此表的目的是使群集中的所有成员(包括lite成员)都知道此信息,确保每个成员都知道数据的位置
群集中最老的成员(首先启动的成员)定期向所有成员发送分区表。这样,群集中的每个成员都会被告知分区所有权的任何更改。例如,当新成员加入群集中时,或当成员离开群集中时,所有权可能会发生更改
注意:如果集群中最早的成员宕机,则下一个最早的成员将分区表信息发送给其他成员
谢谢在多播发现中,每个节点在启动加入过程之前计算自己的maxTryCount
。maxTryCount
是该特定节点在声明自己为主节点之前将发布的加入消息的最大数量
它是使用一些参数计算的,比如多播超时、IP地址和节点的端口等。请参阅。因此,这里的主要目的是每个节点(很可能)都有不同的最大尝试次数
此外,当节点接收到加入请求时,如果在MulticastJoiner.onReceivedJoinRequest()中定义的值返回true
,则将maxTryCount
递增1
:
joinRequest.getUuid().compareTo(node.localMember.getUuid()) < 0
joinRequest.getUuid().compareTo(node.localMember.getUuid())<0
这是为了使两侧的编号发散maxTryCount
一旦一个节点发布了maxTryCount
join消息,它就声明自己是主节点(最早的成员)开始接受/响应加入请求。我知道这些问题。我要问的是它使用什么算法来选择集群中最老的成员。最老的成员实际上是uuid最小的成员。然后我的下一个问题是它如何确保只选择一个主节点?例如,Node1在许多节点中uuid最小。它是maxTryCCount减去currentTryCount等于1。此时,一个名为Nodex的新节点启动。Nodex的uuid小于Node1。在某段时间内,这两个节点的maxTryCount减去currentTryCount等于1。然后它们同时发送加入请求。Node1在处理Nodex的加入请求之前成为主节点。然后Nodex在Node1.H之后成为主节点如何避免这种情况发生?您还有其他问题吗?如果没有,请接受Mehmet的回答。相关:。
public void onReceivedJoinRequest(JoinRequest joinRequest) {
if (joinRequest.getUuid().compareTo(node.localMember.getUuid()) < 0) {
maxTryCount.incrementAndGet();
}
}
joinRequest.getUuid().compareTo(node.localMember.getUuid()) < 0