zoukankan      html  css  js  c++  java
  • HDFS高可用性及其分布式系统思想基础

    源自单点失效问题,也就是当NameNode不可用的时候,用什么办法可以平滑过渡?

    最直接的办法是再添加一个备用的NN,这就产生了Active NameNode和Standby NameNode的设计思路。

    接下来的一个问题是,如何让Standby Namenode的文件系统命名空间元数据与Active NameNode 的一致呢?

    目前的解决办法有QJM方法和NFS方法。

    QJM方案:添加多个Journal Node,这个数字是2F+1,通过Paxos协议保证数据的一致性,QJM最多可容忍F个JournalNode同时发生故障而系统仍然可以正常运行。

    还有一个问题是,当ANN出现了故障之后,如何自动切换?

    目前采用的方案是使用zookeeper实现“领导选举”。

    参见下图(图片来自Linux公社):

    Hadoop2.0的HA介绍

    现在有这样一个问题:

      zookeeper如何实现“领导选举”?

    以下内容来自《大数据日知录:架构与算法》一书。

    Zookeeper在实现领导选举时,实现方法参加如下python代码:

      ZookeeperLeaderElect.py

      handle = zookeeper.init("localhost:2181",my_connection_watcher,10000,0);//初始化

      (data,stat) = zookeeper.get(handle,"/services/myservice/leader",True)//获取领导者节点信息

      if(stat=None)

        path = zookeeper.create(handle,"/services/myservice/leader",hostname:info,[ZOO_OPEN_ACL_UNSAFE],zookeeper.EPHEMERAL)

        if (path==None)//说明创建leader路径失败,也就是说无法将目前节点设置为领导者节点,也就意味着在程序执行过程中间,有其他的节点的进程设置了leader节点

          (data,stat) = zookeeper.get(handle,"services/myservice/leader",True)

          #其他服务器是领导者

          #从leader节点读取并解析领导者地址信息

        else

          #当前节点已经成功设置为领导者节点

       else

        #其他服务器是领导者

        #从leader节点读取并解析领导者地址信息

  • 相关阅读:
    【树形dp】Find Metal Mineral
    【树形dp】Apple Tree
    【状压dp】Islands and Bridges
    【状压dp】Travelling
    【状压dp】Most Powerful
    【线段树】Mayor's posters
    【线段树】I Hate It
    【线段树】Atlantis
    【线段树】校门外的树
    【并查集】银河英雄传说
  • 原文地址:https://www.cnblogs.com/xiamodeqiuqian/p/4887471.html
Copyright © 2011-2022 走看看