HA(一)
1.HA的概述
(1)所谓 HA(High Availablity),即高可用(7*24 小时不中断服务)。
(2)实现高可用最关键的策略是消除单点故障。HA 严格来说应该分成各个组件的 HA 机制:HDFS 的 HA 和 YARN 的 HA。
(3)NameNode 主要在以下两个方面影响 HDFS 集群
? NameNode 机器发生意外,如宕机,集群将无法使用,直到管理员重启
? NameNode 机器需要升级,包括软件、硬件升级,此时集群也将无法使用
? HDFS HA 功能通过配置多个 NameNodes(Active/Standby)实现在集群中对 NameNode 的 热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方 式将 NameNode 很快的切换到另外一台机器。
2.HDFS-HA的集群搭建
1.规划
HA 的主要目的是消除 namenode 的单点故障,需要将 hdfs 集群规划成以下模样
hadoop100 | hadoop101 | hadoop102 |
---|
NameNode | NameNode | NameNode | JournalNode | JournalNode | JournalNode | DataNode | DataNode | DataNode |
2.配置
在opt下面创建ha目录
mkdir ha
将/opt/module/下的 hadoop-3.1.3 拷贝到/opt/ha 目录下(记得删除 data 和 log 目录)
cp -r /opt/module/hadoop-3.1.3 /opt/ha/
配置我们的core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/ha/hadoop-3.1.3/data</value>
</property>
</configuration>
配置 hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/data</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>${hadoop.tmp.dir}/jn</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2,nn3</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>hadoop100:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>hadoop101:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn3</name>
<value>hadoop102:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>hadoop100:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>hadoop101:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn3</name>
<value>hadoop102:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop100:8485;hadoop101:8485;hadoop102:8485/myclus
ter</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyP
rovider</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/atguigu/.ssh/id_rsa</value>
</property>
</configuration>
在分发这两个配置到其他服务器
启动HDFS-HA
记得将环境变量改变到当前ha目录
然后source环境变量
再去每个节点上启动journalnode
hdfs --daemon start journalnode
对nn1进行初始化并且启动
hdfs namenode -format
hdfs --daemon start namenode
在nn2和nn3同步并启动
hdfs namenode -bootstrapStandby
hdfs --daemon start namenode
我们去到web看一下
发现三个NameNode均处于standby
所以我们选择nn1转为active并且查看nn1状态是否为active
hdfs haadmin -transitionToActive nn1
hdfs haadmin -getServiceState nn
3 HDFS-HA 自动模式
1.HDFS-HA 自动故障转移工作机制
? 自动故障转移为 HDFS 部署增加了两个新组件:ZooKeeper 和 ZKFailoverController (ZKFC)进程,如图所示。ZooKeeper 是维护少量协调数据,通知客户端这些数据的改变 和监视客户端故障的高可用服务
2. HDFS-HA 自动故障转移的集群规划
hadoop100 | hadoop101 | hadoop102 |
---|
NameNode | NameNode | NameNode | JournalNode | JournalNode | JournalNode | DataNode | DataNode | DataNode | Zookeeper | Zookeeper | Zookeeper | ZKFC | ZKFC | ZKFC |
3 配置 HDFS-HA 自动故障转移
在 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>hadoop100:2181,hadoop101:2181,hadoop102:2181</value>
</property>
分发配置文件
停止HDFS服务
stop start-dfs.sh
启动 Zookeeper 集群
zkServer.sh start
启动 Zookeeper 以后,然后再初始化 HA 在 Zookeeper 中状态
hdfs zkfc -formatZK
在启动HDFS服务
start-dfs.sh
我们可以去 zkCli.sh 客户端查看 Namenode 选举锁节点内容
get -s /hadoop-ha/mycluster/ActiveStandbyElectorLock
我们可以验证一下kill掉一个NameNode其他节点的状态
kill -9 namenode 的进程 id
如果发现kill掉了之后其他NameNode仍然是standby,那么在hdfs-site可以做一下设置
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence
shell(/bin/true)
</value>
</property>
|