apache HDFS HA实例配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dazuiba008/article/details/80797904

接之前的介绍,这次介绍一下通过zookeeper配置hdfs的HA,下面见实例

192-168-100-142 namenode节点(active) ,journal必须为奇数个,分别部署在142,217,225三个节点,ZKFailoverController运行在142,217上面负责控制namenode.

192-168-100-217 namenode节点(standby),datanode,journal节点,ZKFailoverController

192-168-100-225 datanoede,journal,zk

192-168-100-34 datanoede,zk



1.停止HDFS
stop-dfs.sh
保证所有节点配置了无密钥登陆

在hdfs-site.xml添加以下配置
        <property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
              <description>HDFS名字节点服务的逻辑名称,可以是任意值</description>
        </property>
        <property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>nn1,nn2</value>
                <description>每一个NameNode在集群中的唯一标识</description>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>192-168-100-142:8020</value>
              <description>nn1这个名字节点在RPC的时候使用的端口</description>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>192-168-100-217:8020</value>
                <description>nn2这个名字节点在RPC的时候使用的端口</description>
        </property>
                <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>192-168-100-142:50070</value>
               <description>nn1这个NameNode对外提供的http服务的端口</description>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>192-168-100-217:50070</value>
                <description>nn2这个NameNode对外提供的http服务的端口</description>
        </property>
                <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://192-168-100-217:8485;192-168-100-142:8485;192-168-100-225:8485/mycluster</value>
               <description>标识Journal组</description>
        </property>
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/opt/hadoop/dfs/journal/data</value>
                <description>存储Journal数据的地方</description>
        </property>
        <property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
               <description>用于Java客户端来连接Active的nameNode</description>
        </property>
                
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>sshfence</value>
                <description>用于在nameNode失败的时候不会对外提供服务</description>
        </property>

        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/root/.ssh/id_rsa</value>
               <description>用于在nameNode失败的时候不会对外提供服务</description>
        </property>

在core-site.xml添加以下配置
        <property>
                 <name>fs.defaultFS</name>
                 <value>hdfs://mycluster</value>
        </property>

2.同步所有配置文件到所有节点
 scp core-site.xml hdfs-site.xml root@192-168-100-217:/usr/local/hadoop-2.7.6/etc/hadoop
 scp core-site.xml hdfs-site.xml root@192-168-100-225:/usr/local/hadoop-2.7.6/etc/hadoop
 scp core-site.xml hdfs-site.xml root@192-168-100-34:/usr/local/hadoop-2.7.6/etc/hadoop

3.在三个节点分别启动journalenode,这里分别是192-168-100-142,192-168-100-217,192-168-100-225
hadoop-daemon.sh start journalnode
4.从nameNode同步数据到新加入的namenode节点,这里是从142同步数据到217
scp -r /opt/hadoop/dfs/name root@192-168-100-217:/opt/hadoop/dfs/
5.如果从一个不是HA的HDFS集群转向HA集群,那么执行:
在217中执行hdfs namenode -bootstrapStandby => 同步两个namenode的数据
在142中执行hdfs namenode -initializeSharedEdits => 初始化journal node的数据
6.如果是全新的搭建一个HA的HDFS集群,那么执行:在142中执行hdfs namenode -format即可
7.启动HDFS集群
start-dfs.sh

8.启动后可以查看两个节点nn1,nn2的状态,可以手动切换
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
如果两个节点都是standby,那么通过以下命令设置一个节点为active
hdfs haadmin -transitionToActive nn1

9.配置自动切换
停hdfs
stop-dfs.sh
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-100-142:2181,192-168-100-217:2181,192-168-100-225:2181</value>
        </property>
同步两个文件到所有节点

10.在主节点执行hdfs zkfc -formatZK

11.起hdfs,start-dfs.sh

12.测试failover
查看主备节点
[root@192-168-100-142 hadoop]# hdfs haadmin -getServiceState nn1
active
[root@192-168-100-142 hadoop]# hdfs haadmin -getServiceState nn2
standby
[root@192-168-100-142 hadoop]# jps
26148 QuorumPeerMain
7508 DFSZKFailoverController
7925 Jps
7275 JournalNode
6988 NameNode
杀掉active节点的namenode进程,模拟故障
[root@192-168-100-142 hadoop]# kill -9 6988
查看nn2已经failover为active
[root@192-168-100-142 hadoop]# hdfs haadmin -getServiceState nn2
active
再次启动nn1,nn1启动后为standby
[root@192-168-100-142 hadoop]# hadoop-daemon.sh  start  namenode
starting namenode, logging to /usr/local/hadoop-2.7.6/logs/hadoop-root-namenode-192-168-100-142.sky-mobi.com.out
[root@192-168-100-142 hadoop]# hdfs haadmin -getServiceState nn1
standby
[root@192-168-100-142 hadoop]# hdfs haadmin -getServiceState nn2
active


















猜你喜欢

转载自blog.csdn.net/dazuiba008/article/details/80797904
今日推荐