大数据之zookeeper(二) --- leader的推选过程分析,配置完全分布式zk集群,从零开始部署hdfs和yarn的HA集群,并实现zk自动容灾

一、leader的推选过程分析
---------------------------------------------------------
    1.所有的主机在同一个目录下创建临时的序列节点

    2.节点下就会生成同样名称但是后缀不同的路径 -- /xx/xxx000000001,/xx/xxx000000002(如果有一个创建001了,第二个创建的时候就是002)

    3.这样就可以知道谁处理请求的速度最快了(数值最小的那个肯定最快)。所以,就将小号的作为leader,其余的作为follower

    4.然后通过序号进行顺序"监控",002监控001,003监控002 ...(其实就是按照序号从小到大排队,注册观察者,大号监控小号)

    5.当leader挂掉,leader创建的那个节点[/xx/xxx000000001]就会被同步删除,同时,队伍中的下一个序号[002],会查找,是否还有比它自己靠前的数值(000啥的)

    6.如果有比自己还小的,就推选小的当leader.如果没有比自己再小的了,自己就当leader


二、配置完全分布式zk集群
-------------------------------------------------------
    1.一般配置3个主机节点
        s100 s200 s300

    2.每台机器都安装zk


    3.配置zk
        a.修改[etc/zoo.cfg],然后分发
            在文件末尾添加
            server.1=s100:2888:3888
            server.2=s200:2888:3888
            server.3=s300:2888:3888

        b.在每台主机的/home/ubuntu/zookeeper中添加myid文件,内容分别是1,2,3

        c.修改zookeeper的日志存放目录[conf/log4j.properties]
            zookeeper.log.dir=/home/ubuntu/zookeeper/logs
            zookeeper.tracelog.dir=/home/ubuntu/zookeeper/logs
            注意:/home/ubuntu/zookeeper/logs文件夹必须存在

    4.启动集群 -- 在每台主机上启动zkserver
        $> zkServer.sh start

    5.查看每台服务器的状态
        $> zkServer.sh status


三、从零开始部署hadoop ha集群,并实现zk自动容灾
-----------------------------------------------------------------
    1.停止hadoop的所有进程
        $> stop-all.sh

    2.删除hadoop的所有节点的日志和本地数据,包括journalnode的日志和数据
        $> xcall.sh "rm -rf /soft/hadoop/logs/*"            //删除所有节点的日志
        $> xcall.sh "rm -rf /home/ubuntu/hadoop/*"          //删除所有节点的本地数据
        $> xcall.sh "rm -rf /home/ubuntu/journal/*"          //删除所有节点的ha数据

    3.改换hadoop的快捷连接指向ha

    4.登录每一台JN节点主机,启动JN进程
        [s200 s300 s400]
        $> hadoop-daemon.sh start journalnode

    5.格式化文件系统
        在s100上格式化文件系统
        $s100> hadoop  namenode -format;

    6.复制s100上的nn的元数据到s500下
        $s100> scp -r ~/hadoop/* ubuntu@s500:/home/ubuntu/hadoop

    7.启动s100的namenode
        $s100> hadoop-daemon.sh start namenode;

    8.在未格式化的NN(s500)上执行命令,做standby引导,过程中选择N,不要格式化
        $s500> hdfs namenode -bootstrapStandby

    9.将s100的编辑日志同步到JNs上
        $s100> rm /soft/hadoop/dfs/name/in_use.lock;   //不删的话会提示格式化JN失败。是锁住的
        $s100> hdfs namenode -initializeSharedEdits;    //过程中询问是否格式化JN,选择Y

    10.启动s500的名称节点和所有的数据节点以及yarn节点
        $s100> hadoop-daemons.sh start datanode;        //启动所有的数据节点
        $s100> start-yarn.sh                            //启动yarn进程
        $s500> hadoop-daemon.sh start namenode;         //启动2NN

    11.查看webui
        s100:50070
        s500:50070

    12.自动容灾介绍
        a.自动容灾要引入两个组件:ZooKeeper quorum, and the ZKFailoverController process (ZKFC).

        b.运行NN的主机,要运行ZKFC进程
            ZKFC主要负责:健康监控,session管理,leader管理

    13.开始配置自动容灾
        a.停止所有hadoop相关的进程
            $> stop-all.sh

        b.修改配置文件并分发到所有节点,启用自动容灾并指定zk的服务器地址
            [hdfs.site.xml]
             <property>
               <name>dfs.ha.automatic-failover.enabled</name>
               <value>true</value>
             </property>

             [core-site.xml]
              <property>
                <name>ha.zookeeper.quorum</name>
                <value>192.168.43.131:2181,192.168.43.132:2181,192.168.43.133:2181</value>
              </property>

        c.在ZK中初始化ha状态--登录其中一台NN
            $> xcall.sh "rm -rf /home/ubuntu/zookeeper/version-2"   //干掉所有节点上的zk数据文件夹,以免干扰[~/zk/version-2]
            $s100> hdfs zkfc -formatZK;                  //在zookeeper上初始化ha节点
            $zk > ls /hadoop_ha                          //查看zookeeper上的ha节点

        d.在一台NN主机上启动hdfs进程
            $s100> start-dfs.sh

        e.查看webui

    14.测试自动容灾
        手动杀死活跃节点,然后查看webui


四、配置ResourceManager(Yarn)的自动容灾
------------------------------------------------------------------------
    1.[yarn-site.xml] -- 添加如下信息
        <property>
          <name>yarn.resourcemanager.ha.enabled</name>
          <value>true</value>
        </property>
        <property>
          <name>yarn.resourcemanager.cluster-id</name>
          <value>cluster1</value>
        </property>
        <property>
          <name>yarn.resourcemanager.ha.rm-ids</name>
          <value>rm1,rm2</value>
        </property>
        <property>
          <name>yarn.resourcemanager.hostname.rm1</name>
          <value>s100</value>
        </property>
        <property>
          <name>yarn.resourcemanager.hostname.rm2</name>
          <value>s500</value>
        </property>
        <property>
          <name>yarn.resourcemanager.webapp.address.rm1</name>
          <value>s100:8088</value>
        </property>
        <property>
          <name>yarn.resourcemanager.webapp.address.rm2</name>
          <value>s500:8088</value>
        </property>
        <property>
          <name>yarn.resourcemanager.zk-address</name>
          <value>192.168.43.131:2181,192.168.43.132:2181,192.168.43.133:2181</value>
        </property>

    2.启动yarn集群
        $s100> start-yarn.sh                                //启动yarn
        $s500> yarn-daemon.sh start resourcemanager         //在s500上单独启动RM

    3.使用管理命令(慎用,因为已经zookeeper自动化管理了)
        $s100> yarn rmadmin -getServiceState rm1        //查看状态
        $s100> yarn rmadmin -getServiceState rm2
        $s100> yarn rmadmin -transitionToStandby rm1    //切换状态到standby

    4.容灾测试
        手动杀死当前活跃的RM进程,查看是否容灾了

猜你喜欢

转载自blog.csdn.net/xcvbxv01/article/details/82667318