HA高可用
Posted lyr999736
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HA高可用相关的知识,希望对你有一定的参考价值。
HA:高可用
-----------------------------------------------------------
1.Quorum Journal Manager:群体日志管理
个数2n+1个,保证节点宕机次数为(n-1)/2;一般情况下,JNS在slave节点开启;
2.HA的namenode个数:一定是两个:nn1和nn2;
3.搭建HA步骤:
0.创建软连接:指向hadoop_cluster_HA
1.修改【hdfs-site.xml】
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
//指定两个namenode的唯一标识:注意一定是两个
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
//修改namenode RPC访问端口
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>master:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>slave1:9000</value>
</property>
//修改http-WEBUI访问端口
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>slave1:50070</value>
</property>
//标识NameNodes写入/读取编辑的一组JNs的URI
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</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/exampleuser/.ssh/id_rsa</value>
</property>
2.修改【core-site.xml】
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hyxy/tmp/journal</value>
</property>
3.将所有的配置项分发至其他节点
$>scp -r hadoop_cluater_ha [email protected]:~/soft/hadoop/etc/
$>scp -r hadoop_cluater_ha [email protected]:~/soft/hadoop/etc/
4.在【master:8485;slave1:8485;slave2:8485】三个节点上分别开启journalnode
$>hadoop-daemon.sh start journalnode
$>jps
5.一旦启动了JournalNodes,就必须首先同步两个HA NameNodes的磁盘元数据。
a.如果要设置新的HDFS集群,则应首先在其中一个NameNode上运行format命令
$>hdfs namenode -format
慎用!!!
b.如果您已经格式化了NameNode,或者正在将启用了HA的群集转换为启用HA,
在未格式化的NameNode上,则现在应该通过运行命令“ hdfs namenode -bootstrapStandby”将NameNode元数据目录的内容复制到另一个未格式化的NameNode上。
运行此命令还将确保JournalNodes(由dfs.namenode.shared.edits.dir配置)包含足够的编辑事务,以便能够启动两个NameNode。
确保JournalNodes开启,在nn2上执行以下命令;
$>hadoop-daemon.sh start namenode(首先在nn1开启namenode进程)
$>hdfs namenode -bootstrapStandby
说明:将nn1节点的fsimage复制到nn2中【{HADOOP_TMP_DIR}/dfs/name】
c.如果要将非HA NameNode转换为HA,则应运行命令“ hdfs namenode -initializeSharedEdits ”,该命令将使用来自本地NameNode编辑目录的编辑数据初始化JournalNodes。
在nn1上,执行以下命令;
$>hadoop-daemon.sh stop namenode(关闭namenode)
$>hdfs namenode -initializeSharedEdits
6.start-dfs.sh
7.验证:分别打开WebUI,查看nn1和nn2的相关信息,均为standby(备用状态)
8.HA 集群管理:
用法:hdfs haadmin
[ -transitionToActive <serviceId>] // 将给定NameNode的状态转换为Active
[-transitionToStandby <serviceId>] // 将给定NameNode的状态转换为Standby
[-failover [--forcefence] [--forceactive] <serviceId> <serviceId>]
[-getServiceState <serviceId>]
[-checkHealth <serviceId> ]
[-help <command>]
手动切换Active/Standby状态:
$>hdfs haadmin -transitionToActive nn1
$>hadoop fs -put tt.txt
$>hdfs haadmin -transitionToStandby nn1
$>hdfs haadmin -transitionToActive nn2
$>hadoop fs -put tt1.txt
自动容灾
-----------------------------------------------
1.完成自动容灾,需在HDFS部署环境中增加两个组件:
a.Zookeeper 集群
b.ZKFC:zookeeper FailoverController process
2.Zookeeper作用:
Apache ZooKeeper是一种高可用性服务,用于维护少量协调数据,通知客户端该数据的更改以及监视客户端的故障。自动HDFS故障转移的实现依赖于ZooKeeper来实现以下功能:
a.故障检测:集群中的每个NameNode计算机都在ZooKeeper中维护一个持久会话。如果计算机崩溃,ZooKeeper会话将过期,通知另一个NameNode应该触发故障转移。
b.active活跃节点的选举:ZooKeeper提供了一种简单的机制,可以将节点专门选为活动节点。如果当前活动的NameNode崩溃,则另一个节点可能在ZooKeeper中采用特殊的独占锁,指示它应该成为下一个活动的。
3.ZKFailoverController(ZKFC)作用:
a.它是一个ZooKeeper客户端,它还监视和管理NameNode的状态。
b.运行NameNode的每台机器也运行ZKFC,ZKFC负责:
运行状况监视:ZKFC定期使用运行状况检查命令对其本地NameNode进行ping操作。只要NameNode及时响应健康状态,ZKFC就会认为该节点是健康的。如果节点已崩溃,冻结或以其他方式进入不健康状态,则运行状况监视器会将其标记为运行状况不佳。
ZooKeeper会话管理:当本地NameNode运行正常时,ZKFC在ZooKeeper中保持会话打开。如果本地NameNode处于活动状态,它还拥有一个特殊的“锁定”znode。此锁使用 ZooKeeper对“临时”节点的支持; 如果会话到期,锁定节点将自动删除。
选举制度:如果本地NameNode是健康的,并且ZKFC发现没有其他节点当前持有锁znode,它将自己尝试获取锁。如果成功,那么它“赢得了选举”,并负责运行故障转移以使其本地NameNode处于活动状态。故障转移过程类似于上述手动故障转移:首先,必要时对先前的活动进行隔离,然后本地NameNode转换为活动状态。
4.安装zookeeper
a.下载zookeeper3.4.6.tar.gz
b.解压至【/home/hyxy/soft】
c.创建软连接:$>ln -s zookeeper3.4.6/ zookeeper
d.配置环境变量:在~/.bash_profile中追加
export ZOOKEEPER_HOME=/home/hyxy/soft/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
e.修改【{ZOOKEEPER_HOME}/conf/zoo.cfg】zoo.cfg需cp
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/hyxy/tmp/zookeeper
clientPort=2181
f.开启zookeeper Server
$>zkServer.sh start
$>jps
5914 QuorumPeerMain //QuorumPeerMain:zookeeper Server的守护进程
5931 Jps
g.客户端连接:
$>zkCli.sh
5988 ZooKeeperMain //ZooKeeperMain:zookeeper client的守护进程
h.关机Zookeeper Server
$>zkServer.sh stop
以上是关于HA高可用的主要内容,如果未能解决你的问题,请参考以下文章