配置文件
core-site.xml
<configuration>
<!-- 多个 namenode 地址组装成一个集群, 这里 mycluster 变量名是供 hdfs-site.xml 里文件援用的 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://gms-cluster</value>
</property>
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop-3.3.3/data</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!--name node 数据存储目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/name</value>
</property>
<!--data node 数据存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/data</value>
</property>
<!--journal node 数据存储目录 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>${hadoop.tmp.dir}/jn</value>
</property>
<!-- 集群名称 -->
<property>
<name>dfs.nameservices</name>
<value>gms-cluster</value>
</property>
<!-- 集群中的 namenode 都有哪些 -->
<property>
<name>dfs.ha.namenodes.gms-cluster</name>
<value>nn1,nn2,nn3</value>
</property>
<!--namenode 外部通信 rpc 地址 -->
<property>
<name>dfs.namenode.rpc-address.gms-cluster.nn1</name>
<value>hadoop-4:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.gms-cluster.nn2</name>
<value>hadoop-5:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.gms-cluster.nn3</name>
<value>hadoop-6:8020</value>
</property>
<!--namenode web 拜访 http 地址 -->
<property>
<name>dfs.namenode.http-address.gms-cluster.nn1</name>
<value>hadoop-4:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.gms-cluster.nn2</name>
<value>hadoop-5:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.gms-cluster.nn3</name>
<value>hadoop-6:9870</value>
</property>
<!-- 指定 namenode 元数据在 JournalNode 上的寄存地位 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop-4:8485;hadoop-5:8485;hadoop-6:8485/gms-cluster</value>
</property>
<!-- 拜访代理:client 用于确定哪个 namenode 是 active-->
<!-- HA 集群中, 用户并不知道到底哪一台机器是 active 的, 所以拜访的时候, 间接拜访集群名称 (gms-cluster), 而后申请就会交给上面这个代理类, 它会帮咱们找到以后的 active 并将拜访转发 -->
<property>
<name>dfs.client.failover.proxy.provider.gms-cluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 隔离机制 (避免脑裂), 即同一时刻只能有一个台服务器对外响应 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 应用隔离机制时, 须要 ssh 登录 (主动故障转移的时候会用到)-->
<property>
<name>dfs.hafencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 启用 nn 故障主动转移 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 指定 hdfs 正本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
- 启动 journal node(三台都启动)
hdfs --daemon start journalnode
- 任选一台, 格式化 name node
hdfs namenode -format
- 启动
hdfs --daemon start namenode
- 其余两台, 同步主节点的 name node 数据
hdfs namenode -bootstrapStandby
- 其余两台, 也启动 name node
hdfs --daemon start namenode
- 三台的 ip:9870 都能失常拜访到 hadoop 的控制台, 并且都是 standby 状态