我已经完成documentation的RM HA事务。除了一个关键部分,我了解基本知识。当活动RM发生故障时,备用RM如何知道其中一个需要接管?以下是文档中的相关部分:
ZooKeeper状态存储通过ACL实现了这种隐式隔离。所有ResourceManager都具有对存储的共享读写管理访问权限,但只有Active具有创建-删除访问权限。当过渡到活动状态时,ResourceManager声明此创建-删除访问。在这一点上,以前具有创建-删除访问权限的任何其他ResourceManager都将失去访问权限,无法对存储进行更改并将其自身转换为Standby。通过让每个ResourceManager如此频繁地创建一个虚拟znode(默认情况下为10秒),总是可以通知ResourceManager对存储的访问权限。
这是否意味着所有RM都会定期向Zookeeper发送消息以获取对ZKResourceManagerStateStore
的访问权限?谁拥有创建删除访问权限,谁将扮演Active角色?
更新:发现了this个很棒的文章,它详细解释了RM HA的工作原理。供参考。
答案 0 :(得分:0)
Zookeeper因其协调性而闻名。因此,当您阅读文档时,在问题中提到了链接,因此我假设您已经阅读了自动故障转移部分。
Zookeeper通过时代号策略来维护Active-Standby高可用性。两个RM均参加领导选举,但只有一个纪元数最少的被选为领导。 RM不需要像Namenodes这样的Zookeeper故障转移控制器。默认情况下,activestandbyelector嵌入在RM中。
这就是领导者向Zookeeper进行写操作的原因,当它未能写入时,Zookeeper会认为Active RM已变得无响应,并让另一个RM成为新的Leader。