我已经浏览了rm ha的文档。我理解基本原理,除了一个关键部分。当一个活动rm宕机时,备用rm如何知道其中一个需要接管?以下是文件的相关部分:
zookeeper状态存储通过ACL实现这种隐式防护。所有resourcemanagers都共享对存储的读写管理访问权限,但只有活动的resourcemanagers具有create-delete访问权限。resourcemanager声明在转换为活动时创建删除访问。此时,以前具有create-delete访问权限的任何其他resourcemanager都将失去访问权限,无法更改存储,并将自身转换为备用。通过让每个resourcemanager每隔一段时间(默认情况下为10秒)创建一个虚拟znode,resourcemanager总是被告知其对存储的访问。
这是否意味着所有的rm都会定期向zookeeper发送消息以访问 ZKResourceManagerStateStore
? 获得create-delete访问权限的人将承担active角色?
更新:找到了这篇非常棒的文章,它非常详细地解释了rmha的工作原理。留作参考。
1条答案
按热度按时间yzxexxkh1#
Zookeeper以协调著称。因此,在您阅读了您在问题中提到的链接的文档之后,我假设您已经阅读了自动故障转移部分。
zookeeper通过epoch编号策略保持了主备的高可用性。两个rm都支持领导人选举,但只有一个具有最小历元数的rm被选为领导人。rm不需要像namenodes那样的zookeeper故障转移控制器。默认情况下,activestandbyelector嵌入在rms中。
这就是领导者向zookeeper写入内容的原因,当它无法写入内容时,zookeeper会假定活动的rm已无响应,并使另一个rm成为新的领导者。