HA 集群搭建
集群分配方案
NN-1 | NN-2 | DN | ZK | ZKFC | JNN | |
---|---|---|---|---|---|---|
node1 | ✔️ | ✔️ | ✔️ | |||
node2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
node3 | ✔️ | ✔️ | ✔️ |
HA 状态下:
- 当处于 active 状态的节点挂掉之后,standby 状态的节点自动接替任务,转为 active 状态,对外提供服务。
- 当挂掉的节点重新恢复之后,他不会再恢复成 active 状态,保持为 standby 状态。
注意:
配置免密的时候,要配置 node2 -> node1 的秘钥,node2 转为 active 状态之后,无法正常与 node1 进行连接。
Hadoop配置
hadoop-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_271
hdfs-site.xml
<configuration>
<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>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hdfs/var/hadoop/ha/jn</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>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hdfs/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hdfs/var/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node2:2181,node3:2181</value>
</property>
</configuration>
slaves
node2
node3
环境变量
# hadoop-ha
export HADOOP_HOME=/home/hdfs/env/hadoop-2.10.1-ha
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
Zookeeper配置(node2)
zoo.cfg 文件
dataDir=/home/hdfs/var/zookeeper
server.1=node2:2888:3888
server.2=node3:2888:3888
分发到 node3
配置环境变量
# zookeeper
export ZOOKEEPER_HOME=/home/hdfs/env/zookeeper-3.6.2
export PATH=${ZOOKEEPER_HOME}/bin:$PATH
启动集群
zkServer.sh start
HA 启动步骤
-
node1,node2,node3 先启动 journalnode ,把 active 状态的信息拿过来
hadoop-daemon.sh start journalnode
-
正常启动第一台 NN (不要启动集群)
hdfs namenode -format hadoop-daemon.sh start namenode
-
在第二台 NN 上启动处于 standby 状态的节点
hdfs namenode -bootstrapStandBy
-
在node2、node3上 启动 zookeeper
zkServer.sh start
-
对 zookeeper 进行格式化,在第一台 NN 节点上执行
hdfs zkfc -formatZK
-
start-dfs.sh 启动集群
zookeeper 处于启动状态,它就回去选择哪一个节点作为 active 的 NN