我已经浏览了RM HA的文档。除了一个关键部分,我了解基本原理。当一个活动RM宕机时,备用RM如何知道其中一个需要接管?以下是文档中的相关部分:
ZooKeeper状态存储通过ACL实现了这种隐式围栏。所有ResourceManager都具有对存储的共享读写管理访问权限,但只有Active具有创建-删除访问权限。ResourceManager在转换到Active时声明此创建-删除访问权限。此时,以前具有创建删除访问权限的任何其他ResourceManager都将失去访问权限,无法对存储进行更改,并将自身转换为备用。通过让每个ResourceManager每隔一段时间(默认情况下为10秒(创建一个虚拟znode,ResourceManager总是被告知其对存储的访问权限。
这是否意味着所有RM都会定期向Zookeeper发送消息以访问ZKResourceManagerStateStore
?获得创建-删除访问权限的人将承担Active的角色?
更新:找到了这篇很棒的文章,详细解释了RM HA是如何工作的。保存以供参考。
Zookeeper通过历元数策略保持主动待机高可用性。两个RM都参加了领导人选举,但只有一个具有最小历元数的RM被选为领导人。RM不需要像Namenodes那样的Zookeeper故障切换控制器。activestandbyelector默认嵌入RM中。
这就是为什么领导者写信给Zookeeper,当它写不出来时,Zookeepher会认为活动RM已经没有反应,并让另一个RM成为新的领导者。