将NN分别部署在hadoop203和hadoop204两台主机上,且保证两台主机配置完全一致包括ssh
- 先在hadoop/etc/路径下将hadoop文件夹进行复制分别命名为all和ha
- 创建一个软连接指向ha并将软连接命名为hadoop
- ln -s ha hadoop
- 进入ha文件夹下修改配置文件
- hdfs-site.xml
- <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>hadoop203:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop204:8020</value>
</property> - <property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop203:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop204:50070</value>
</property> - 配置名称节点共享编辑日志目录
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop201:8485;hadoop202:8485;hadoop203:8485/mycluster</value>
</property> - java类,client使用它判断哪个节点是激活Active的
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property> -
脚本或java类,用于容灾的时候保护激活的namenode
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property><property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property> -
配置JN存放编辑日志的本地路径
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/module/hadoop-2.7.6/data/tmp/journal/</value>
</property>
- <property>
-
core-site.xml
-
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
-
- hdfs-site.xml
-
在配置文件中配置JN的三个节点(201,202,203)上启动JN进程
-
hadoop-daemon.sh start journalnode
-
-
启动JN之后,在两个NN之间进行元数据同步
-
如果是新集群(在NN节点上执行)
-
hdfs namenode -format
-
-
正在使用的集群,复制原NN的元数据到另一个NN
-
cd /opt/module/hadoop-2.7.6/data/tmp/dfs
-
scp -r name hadoop@hadoop204:/opt/module/hadoop-2.7.6/data/tmp/dfs/
-
-
在新的(未格式化)上运行以下命令,实现待命(Standby)状态
-
hdfs namenode -bootstrapStandby(当询问是否格式化时选择N)
-
-
在一个NN上执行以下命令,完成编辑日志到JN节点的传输(此时需要运行QN进程并关闭NN进程)
-
hdfs namenode -initializeSharedEdits
-
-
-
在201,202,203节点上配置zookeeper进行自动容灾
-
配置hdfs-site.xml,启用自动容灾.
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property> -
配置core-site.xml,指定zk的连接地址.
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop201:2181,hadoop202:2181,hadoop203:2181</value>
</property> -
登录其中的一台NN,在ZK中初始化HA状态
-
hdfs zkfc -formatZK
-
-
启动hdfs进程进行测试
-
start-dfs.sh
-
ps:
$> hdfs haadmin -transitionToActive nn1 //切换成激活状态
$> hdfs haadmin -transitionToStandby nn1 //切换成待命状态
$> hdfs haadmin -getServiceState nn1 //查看状态
$> hdfs haadmin -failover nn1 nn2 //模拟容灾演示,从nn1切换到nn2