QJM With HDFS-HA Configuration details

目的

   总结HDFS-HA实施步骤及细节(概述HDFS高可用性(HA)功能以及如何使用Quorum Journal Manager(QJM)功能配置和管理HA HDFS群集)

背景

在Hadoop 2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF)。每个群集只有一个NameNode,并且如果该计算机或进程不可用,则整个群集将不可用,直到NameNode重新启动或在单独的计算机上启动。

这从两个方面影响了HDFS群集的总可用性:

  • 如果发生意外事件(例如机器崩溃),则在操作员重新启动NameNode之前,群集将不可用。

  • 计划内的维护事件,例如NameNode计算机上的软件或硬件升级,将导致群集停机时间的延长。

   HDFS高可用性功能通过提供以下选项来解决上述问题:在具有热备用功能的主动/被动配置中,可以在同一群集中运行两个(自3.0.0起,超过两个)冗余NameNode。这可以在计算机崩溃的情况下快速故障转移到新的NameNode,或出于计划维护的目的由管理员发起的正常故障转移。

在典型的HA群集中,将两个或更多单独的计算机配置为NameNode。在任何时间点,一个NameNode都恰好处于Active状态,其他NameNode 处于Standby状态。Active NameNode负责群集中的所有客户端操作,而Standby则仅充当工作程序,并保持足够的状态以在必要时提供快速故障转移。

硬件资源

  1. 虚拟Linux服务器:机器1(192.168.40.112),机器2号(192.168.40.113),机器3(192.168.40.114)
  2. 操作系统:CentOs 6.x
  3. CPU:8核
  4. 内存:8G以上

部署

1.前提

1.1 机器1,2,3 实现免密钥登录(彼此可互相登录)

(参考:https://blog.csdn.net/ReyzeLamp/article/details/102978351

1.2 机器1,2,3 的hosts文件配置彼此的域名映射

      192.168.40.112  bigdata-trianing01.com
              192.168.40.113  bigdata-trianing02.com
              192.168.40.114  bigdata-trianing03.com

1.3 Hadoop-2.5.0 (测试)及zookeeper-3.4.5分布式环境已安装(其中一些配置在后面提及)

1.4 集群规划

      机器1:namendoe(active),datanode,journalnode

      机器2:namenode(standby),datanode,journalnode

      机器3:datanode,journalnode

2.部署细节

路径:在bigdata-trianing01.com.zookeeper家目录(/opt/modules/zookeeper-3.4.5)下

2.1 在Zookeeper中的zoo.cfg添加,路径(/opt/modules/zookeeper-3.4.5/conf),参数如下:

 dataDir=/opt/modules/zookeeper-3.4.5/datas(新建该文件)

在文件末尾添加

server.1=bigdata-trianing01.com:2888:3888
       server.2=bigdata-trianing02.com:2888:3888
       server.3=bigdata-trianing03.com:2888:3888

2.2 新建/opt/modules/zookeeper-3.4.5/datas/myid

在机器1,2,3中 ,/opt/modules/zookeeper-3.4.5/datas/路径新建myid,

机器1中,myid内容:1

机器2中,myid内容:2

机器3中,myid内容:3

路径:在bigdata-trianing01.com.hadoop家目录(/opt/modules/hadoop-2.5.0_ha)下

2.3 清空datas、logs目录

rm -rf datas/*; rm -rf logs/*;

2.4 修改hdfs-site.xml,参数如下:

<!--      HA  OPTION                        -->

    <!--配置namenode对外统一的逻辑名称-->
    <property>
        <name>dfs.nameservices</name>
        <value>ns1</value>
    </property>
    
    <property>
        <name>dfs.ha.namenodes.ns1</name>
        <value>nn1,nn2</value>
    </property>

    <!--配置namenode rpc 内部通信端口-->
    <property>
        <name>dfs.namenode.rpc-address.ns1.nn1</name>
        <value>bigdata-trianing01.com:8020</value>
    </property>
        
    <property>
            <name>dfs.namenode.rpc-address.ns1.nn2</name>
            <value>bigdata-trianing02.com:8020</value>
    </property>

    <!--配置namenode http网页地址服务端口-->
    <property>
        <name>dfs.namenode.http-address.ns1.nn1</name>
        <value>bigdata-trianing01.com:50070</value>
    </property>

    <property>
        <name>dfs.namenode.http-address.ns1.nn2</name>
        <value>bigdata-trianing02.com:50070</value>
      </property>

    <!--配置元数据日志文件及存储方式为journalnode-->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://bigdata-trianing01.com:8485;bigdata-trianing02.com:8485;bigdata-trianing03.com:8485/ns1</value>
    </property>
    
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/modules/hadoop-2.5.0_ha/journal-node</value>
    </property>

    <!--配置standby 切换 到active-->
    <property>
        <name>dfs.client.failover.proxy.provider.ns1</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    
    <!--配置自动故障转移-->

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

    <!--配置隔离机制类型和对应的配置-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
        
    <property>

        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/Leizedeng/.ssh/id_rsa</value>
    </property>
    
    <!--通用配置 -->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>    

2.5 修改core-site.xml,参数如下:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns1</value>
    </property>
    

    <property>
        <name>ha.zookeeper.quorum</name>
        <value>bigdata-trianing01.com:2181,bigdata-trianing02.com:2181,bigdata-trianing03.com:2181</value>
    </property>

    
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/modules/hadoop-2.5.0_ha/datas</value>
    </property>
</configuration>

2.6 修改slaves文件,一行一个,配置如下:

bigdata-trianing01.com
       bigdata-trianing02.com
       bigdata-trianing03.com

2.7 集群分发(机器1,2,3文件安装路径要保持一致)

scp -r /opt/modules/hadoop-2.5.0_ha/ 192.168.40.113:/opt/modules/

scp -r /opt/modules/hadoop-2.5.0_ha/ 192.168.40.114:/opt/modules/

2.8 启动

2.8.0 启动机器1,2,3 的zookeeper,journalnode(如需再次格式化,建议清空日志文件logs和datas下的文件)

/opt/modules/zookeeper-3.4.5/bin/zkServer.sh start

/opt/modules/hadoop-2.5.0_ha/sbin/hadoop-daemon.sh start journalnode

2.8.1 格式化namenode(在机器1,2中,谁格式化,它的状态将预估为active)

因集群规划,在机器1上格式化

bin/hdfs namenode -format

2.8.2 在机器1上启动namenode

sbin/hadoop-daemon.sh start namenode

2.8.3 将机器1格式化后的数据同步到机器2中,在机器2上

bin/hdfs namenode -bootstrapsstandby

2.8.4 格式化zookeeper之间的连接zookeeperFailoverController(zkfc),在机器1上

bin/hdfs -zkfc -formatZK

2.8.5 启动机器1,2,3的namenode和datanode

sbin/hadoop-daemon.sh start datanode

此时http://192.168.40.112:50070http://192.168.40.113:50070该2个namenode状态都为standby

2.8.6 启动ZKFC(在机器1,2中,谁先启动,谁的状态即转换为active)

因集群规划,在机器1上,启动zkfc

sbin/hadoop-daemon.sh start zkfc

此时http://192.168.40.112:50070 的namenode状态 为active

2.9 测试

2.9.1 关闭机器1 namenode的进程

kill -9 PID

此时http://192.168.40.112:50070 无法访问

http://192.168.40.113:50070的namenode状态自动切换为active

到此部署完毕!

经验之谈:不论大家在部署过程中,是否参照以上配置操作,可能会遇到以下一些问题:

1. 当部署完毕后,开启进程后,发现2个namenode 状态都为standby。

解决:检查配置slaves、hdfs-site、core-site及zookeeper配置,如果有误, 修改完,

           清空datas和logs文件,重走 2.8步骤。

2. 当部署完毕后,测试发现,关闭状态为active的namenode1,另一个namenode2状态为standby并未切换为active。

解决:检查namenode的 zkfc及namenode 的日志文件,找到问题后,

           再次清空datas和logs文件,重走2.8步骤。

末尾简述:

客户端通过在hdfs-site配置namenode的逻辑服务名称知道新active的namenode的地址,

所有的datanode通过zookeeper来获取新的namenode地址;

而的新的namendoe所在机器通过journalnode来获取元数据!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值