下文以YARN为例,描述Zookeeper是如何帮助YARN实现HA机制的
- 创建锁节点
所有的ResourceManager在启动的时候会竞争写一个/yarn-leader-election/pseudo-yarn-rm-cluster节点(临时节点),创建成功的ResourceManager节点变成Active节点,其他的切换为StandBy - 注册Watcher节点
所有的standby的ResourceManager节点会向/yarn-leader-election/pseudo-yarn-rm-cluster节点注册一个Watcher - 主备切换
当Active的ResourceManager节点出现异常或挂掉时,起在zookeeper上创建的临时节点也会被删除,standy的ResourceManager节点检测到该节点发生变化时,会重新发起竞争,直到产生一个Active节点 - 如果集群中存在两个ResourceManager节点RM1,RM2,在通过竞争操作后,RM1变成了Active后,如果某个时间段RM1由于资源损耗比较严重,产生了假死的现象,此时的zookeeper会以为RM1这台机器出现了故障,于是发起新一轮的竞选,选了RM2作为Active,在RM2变成Active后,RM1恢复了服务但是它任然以为自己是Active的,此时就出现了两个Active的情况,这种情况又称为“脑裂”,为了解决这种问题可以在创建根节点的时候引入ACL控制,这样的话当RM1恢复后尝试更新数据时,会发现对应的节点必须提供RM2的ACL信息才可以更新对应的数据
- 在Hadoop中负责解决该问题的组件是Hadoop-common 中的ActiveStandElector组件
|
|