论技术原理的相通性示例之三:Master可用性

在分布式架构中,Master/Slave架构是主流架构之一,通常表现为一主多从的服务器部署结构,其中Master是整个架构的核心节点。Master/Slave架构中关于Master存在一个普遍性的问题,即如何确保Master的高可用性。

通常,我们可以采用热备方案实现Master的高可用。在热备方案中,存在一个Active Master和若干个Standby Master,当Active Master失效时,从若干个Standby Master中挑选一个作为Active Master。为了能够实现Active Master和Standby Master之间的无缝切换,一般都会采用共享存储的解决方案,即Active Master不断写入信息,Standby Master不断同步信息,当主备切换时,选中的Standby Master保证信息完全同步之后再切换到Active Master。这里的共享存储实现媒介可以包括Zookeeper、NFS、HDFS、BookKeeper和QJM(Qurom Journal Manager)等,简单起见我们还是基于Zookeeper来讨论如何实现Active Master和Standby Master的切换过程,也将依赖前面Zookeeper示例中提到的临时节点和Watcher机制。

Master/Slave架构应用非常广泛,几乎所有的非对等性分布式系统中都采用了这一架构。在本节中,我们将使用大数据技术体系中的YARN架构作为示例来讲解Master的可用性。YARN架构的结构图如下所示,可以看到通过ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)和Container之间的分布式调用构成了整体的工作流程。这里ResourceManager就是Master,负责集群中所有资源的统一管理和分配,接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序。

    YARN的ResourceManager高可用方案采用多个ResourceManager并存的方式,其中一个处于Active状态,当Active ResourceManager失效时,处于Standby的ResourceManager就会通过竞争选举产生新的Active节点。YARN就是使用Zookeeper来实现这一过程,包括以下三个主要步骤:

下面对这三个步骤做简单展开:

  •  创建锁节点

所有的ResourceManager在启动的时候都会去竞争写一个Lock子节点,该节点为临时节点,Zookeeper能够为我们保证最终只有一个ResourceManager能够创建成功。创建成功的那个ResourceManager就切换为Active状态,没有成功的那些ResourceManager则切换为Standby状态。

  • 注册Watcher监听

所有处于Standby状态的ResourceManager都会对处于Active状态的ResourceManager节点注册一个节点变更的Watcher监听。利用Watcher机制,能够快速感知到处于Active状态的ResourceManager节点的运行情况。

  • 主备切换

当Active状态的ResourceManager出现诸如宕机或重启的异常情况时,其在ZooKeeper上连接的客户端会话就会失效,因此该临时节点就会被删除。此时其余各个Standby状态的ResourceManager就都会接收到来自ZooKeeper服务端的Watcher事件通知,然后会重复进行步骤一的操作。

上述三个步骤的示意图参考下图。该示意图中展示的工作流程在很多确保Master可用性的分布式架构中都有所体现,可以理解为一种通用的知识体系。当我们面对不同的工具或框架时,回想这张示意图能够帮助我们快速掌握背后的原理。

更多内容可以关注我的公众号:程序员向架构师转型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章