zoukankan      html  css  js  c++  java
  • Hadoop 高可用(HA)的自动容灾配置


    参考链接  

      Hadoop 完全分布式安装

      ZooKeeper 集群的安装部署


    0. 说明

      在 Hadoop 完全分布式安装 & ZooKeeper 集群的安装部署的基础之上进行 Hadoop 高可用(HA)的自动容灾配置

      Hadoop 高可用

      High Availablility 相当于再配置一台 NameNode


      单节点模式容易产生单点故障


      冷备份和热备份的区别

      热备份:有两个 NameNode 同时工作,其中一台机器处于 active 状态,另一台机器处于 standby 状态。
          两个节点数据是即时同步的,起同步作用的进程成为 JournalNode

      冷备份:相当于 SecondaryNameNode


    1. NameNode & DataNode 多目录配置

      0. 关闭集群

    stop-all.sh

      1. NameNode 多目录配置

      目的:用于冗余,存储多个镜像文件副本

    # 编辑 hdfs-site.xml
    sudo vim /soft/hadoop/etc/hadoop/hdfs-site.xml
    
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/centos/hadoop/dfs/name1,/home/centos/hadoop/dfs/name2</value>
    </property>

      分发配置文件

    xsync.sh /soft/hadoop/etc/hadoop/hdfs-site.xml

      重命名 name 文件夹为 name1 ( 在 /home/centos/hadoop/dfs 目录执行以下操作 )

    mv name name1

      拷贝 name1 文件夹到 name2

    cp -r name1 name2

    2. DataNode 多目录配置

      目的:用于扩容,将所有数据文件存放在不同的磁盘设备上,如 SSD 等等

    # 编辑 hdfs-site.xml
    sudo vim /soft/hadoop/etc/hadoop/hdfs-site.xml

    <property> <name>dfs.datanode.data.dir</name> <value>/home/centos/hadoop/dfs/data1,/home/centos/hadoop/dfs/data2</value> </property>

      分发配置文件

    xsync.sh /soft/hadoop/etc/hadoop/hdfs-site.xml

      重命名 data 文件夹为 data1

    xcall.sh mv /home/centos/hadoop/dfs/data /home/centos/hadoop/dfs/data1

      启动 HDFS

    start-dfs.sh



     3. 配置高可用(冷备份)

      3.0 拷贝 full 文件夹到 ha

    # 复制 Hadoop 配置文件
    cp -r /soft/hadoop/etc/full /soft/hadoop/etc/ha
    
    # 更改软链接
    ln -sfT /soft/hadoop/etc/ha /soft/hadoop/etc/hadoop

      3.1 修改 hdfs-site.xml

    <?xml version="1.0"?>
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>s105:50090</value>
        </property>
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>/home/centos/ha/dfs/name1,/home/centos/ha/dfs/name2</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>/home/centos/ha/dfs/data1,/home/centos/ha/dfs/data2</value>
        </property>
    
        <!-- hdfs高可用配置 -->
        <property>
            <name>dfs.nameservices</name>
            <value>mycluster</value>
        </property>
        <property>
            <name>dfs.ha.namenodes.mycluster</name>
            <value>nn1,nn2</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.mycluster.nn1</name>
            <value>s101:8020</value>
        </property>
        <property>
            <name>dfs.namenode.rpc-address.mycluster.nn2</name>
            <value>s105:8020</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.mycluster.nn1</name>
            <value>s101:50070</value>
        </property>
        <property>
            <name>dfs.namenode.http-address.mycluster.nn2</name>
            <value>s105:50070</value>
        </property>
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://s102:8485;s103:8485;s104:8485/mycluster</value>
        </property>
        <property>
            <name>dfs.client.failover.proxy.provider.mycluster</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <property>
            <name>dfs.ha.fencing.methods</name>
            <value>shell(/bin/true)</value>
        </property>
    </configuration>

      3.2 修改 core-site.xml

    <?xml version="1.0"?>
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://mycluster</value>
        </property>
        <property>
            <name>dfs.journalnode.edits.dir</name>
            <value>/home/centos/ha/dfs/journal/node/local/data</value>
        </property>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/home/centos/ha</value>
        </property>
    </configuration>



      3.3  修改 slaves 文件

    s102
    s103
    s104

      3.4 配置 s105 的 SSH 免密登陆

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    
    ssh-copy-id centos@s101
    ssh-copy-id centos@s102
    ssh-copy-id centos@s103
    ssh-copy-id centos@s104
    ssh-copy-id centos@s105

      3.5 将 s101 的工作目录发送给 s105


      删除 s102-s105 的配置文件,不要用 xcall.sh 脚本

    ssh s102 rm -rf /soft/hadoop/etc
    ssh s103 rm -rf /soft/hadoop/etc
    ssh s104 rm -rf /soft/hadoop/etc
    ssh s105 rm -rf /soft/hadoop/etc

      将 s101 配置文件分发

    xsync.sh /soft/hadoop/etc

      3.6 启动 JournalNode

    hadoop-daemons.sh start journalnode

      3.7 格式化 NameNode

    hdfs namenode -format

      3.8 将 s101 的 ha 目录发送给 s105

    scp -r ~/ha centos@s105:~


      3.9 启动 HDFS ,观察 s101 和 s105 的 NameNode 情况

    start-dfs.sh

           

      3.10 手动切换 s101 的 NameNode 为 active 状态

    hdfs haadmin -transitionToActive nn1

      


    4. 配置高可用(热备份)

      4.0 说明

      Hadoop 高可用热备份的配置建立在冷备份的配置基础之上

      4.1 关闭 Hadoop

    stop-all.sh

      4.2 启动 s102-s104 的 ZooKeeper

    zkServer.sh start

      4.3 修改 hdfs-site.xml ,添加以下内容

    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>

      4.4 修改 core-site.xml ,添加以下内容

    <property>
        <name>ha.zookeeper.quorum</name>
        <value>s102:2181,s103:2181,s104:2181</value>
    </property>

      4.5 分发配置文件

    xsync.sh /soft/hadoop/etc/hadoop/hdfs-site.xml
    xsync.sh
    /soft/hadoop/etc/hadoop/core-site.xml

      4.6 初始化 ZooKeeper

    hdfs zkfc -formatZK

      4.7 启动 HDFS

    start-dfs.sh

      4.8 查看进程

    xcall.sh jps

      

      4.9 启动 Zookeeper 命令行脚本 zkCli.sh

    zkCli.sh

       


    5. 测试 Hadoop 高可用(HA)的自动容灾

      5.0 说明

      通过关闭 s101 的 NameNode 进程验证 Hadoop 高可用的自动容灾

      5.1 通过 Web 查看 Hadoop 两个节点 s101 、s105 的状态

      http://192.168.23.101:50070

      http://192.168.23.105:50070

      

      

      5.2 关闭 s101 

       已知 s101 的 NameNode 进程 id 为 3478

    kill -9 3478

      5.3 再次查看 Hadoop 两个节点 s101 、s105 的状态

      通过 Web 可以看出 s105 的状态为 active ,实现了自动容灾

     

      


    6. 查看 Hadoop 高可用文件

      在 s102 启动 ZooKeeper 命令行( zkCli.sh ),再执行以下操作

      其中:

    1. ActiveStandbyElectorLock 是临时结点,负责存储 active 状态下的节点地址
    2. ActiveBreadCrumb 是永久结点,负责在 ZooKeeper 会话关闭时,下一次启动状态下正确分配 active 节点,避免脑裂(brain-split),即两个 active 节点状态
    [zk: localhost:2181(CONNECTED) 0] ls /
    [zookeeper, hadoop-ha]
    [zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha
    [mycluster]
    [zk: localhost:2181(CONNECTED) 2] ls /hadoop-ha/mycluster
    [ActiveBreadCrumb, ActiveStandbyElectorLock]
    [zk: localhost:2181(CONNECTED) 3] get /hadoop-ha/mycluster/ActiveBreadCrumb
    
        myclusternn1s101 �>(�>
    cZxid = 0x500000008
    ctime = Thu Sep 27 10:16:23 CST 2018
    mZxid = 0x500000016
    mtime = Thu Sep 27 11:13:05 CST 2018
    pZxid = 0x500000008
    cversion = 0
    dataVersion = 2
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 28
    numChildren = 0
    [zk: localhost:2181(CONNECTED) 4] get /hadoop-ha/mycluster/ActiveStandbyElectorLock 
    
        myclusternn1s101 �>(�>
    cZxid = 0x500000015
    ctime = Thu Sep 27 11:13:05 CST 2018
    mZxid = 0x500000015
    mtime = Thu Sep 27 11:13:05 CST 2018
    pZxid = 0x500000015
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x666618cd7c5a0005
    dataLength = 28
    numChildren = 0

    且将新火试新茶,诗酒趁年华。
  • 相关阅读:
    使用springboot缓存
    Something wrong with EnCase v8 index search results
    Is it a full physical image???
    FB的新专利竟要监看使用者的脸
    How to image a CD/DVD ROM and generate hash value
    Mobile game forensics
    物理提取大绝招”Advanced ADB”???
    How to trace the Geolocation of network traffic
    App forensics
    专做手机取证的大厂被人给黑了
  • 原文地址:https://www.cnblogs.com/share23/p/9708473.html
Copyright © 2011-2022 走看看