高可用完全分布式搭建

高可用的完全分布式搭建

HA HDFS结构图

在这里插入图片描述

这种设计模式的特点:

①采用了两个namenode,一个对外提供服务,一个同步备份namenode元数据以待切换,防止发生异常,导致namenode挂掉。
②所有的datenode同时向两个NameNode汇报数据块信息。
③JN集群用于备份传递ANN的信息和文件
④两个NN,启动时一个会处于activity,一个会处于standby状态
⑤处于standby状态的节点,用于备份和完成edits.log文件的合并,并产生新的image,推送回处于actiity状态的NN

两种切换模式

①手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场合
②自动切换:基于Zookeeper实现

Zookeeper自动切换方案

①ZooKeeper Failover Controller:监控NameNode健康状态
②并向Zookeeper注册NameNode
③NameNode挂掉后,ZKFC为NameNode竞争锁,获得ZKFC 锁的NameNode变为active

JN权值分配

选举规则:大于半数以上,则获得选举权

HA HDFS配置节点表

在这里插入图片描述

集群搭建步骤

配置免密登录

node01->node01  
node01->node02  
node01->node03 
node01->node04
node02->node01

配置所有节点的JDK

修改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>node01:8020</value>
</property>
<property>
 			 <name>dfs.namenode.rpc-address.mycluster.nn2</name>
 			 <value>node02:8020</value>
</property>
<property>
 			 <name>dfs.namenode.http-address.mycluster.nn1</name>
 			 <value>node01:50070</value>
</property>
<property>
			  <name>dfs.namenode.http-address.mycluster.nn2</name>
 			  <value>node02:50070</value>
</property>
<property>
 		 	  <name>dfs.namenode.shared.edits.dir</name>
 		      <value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<property>
  			  <name>dfs.journalnode.edits.dir</name>
 			  <value>/var/sxt/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>/root/.ssh/id_rsa</value>
</property>
<property>
  		  <name>dfs.ha.automatic-failover.enabled</name>
   		  <value>true</value>
 </property>

修改core-site.xml配置文件

<property>
	 <name>fs.defaultFS</name>
 	 <value>hdfs://mycluster</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/var/abc/hadoop/cluster</value>
</property>
<property>
	<name>ha.zookeeper.quorum</name>
    <value>node02:2181,node03: 2181,node04:2181</value>
</property>

修改slaves配置文件

node02 
node03 
node04

将配置好的HDFS安装包拷贝到node02 node03 node04

格式化NameNode(创建目录以及文件)

① 在node01、node02、node03分别执行如下命令

hadoop-daemon.sh start journalnode

② 随机选择一台NameNode执行:

hdfs namenode -format
hadoop-daemon.sh start namenode

③ 另外一台NameNode节点执行:

hdfs namenode  -bootstrapStandby

格式化ZKFC

hdfs zkfc -formatZK

关闭所有节点上的进程

stop-dfs.sh

启动HDFS

start-dfs.sh

搭建zookeeper集群

1,解压

2,修改conf目录下的zoo_sample.cfg的名称,改为zoo.cfg

mv zoo_sample.cfg zoo.cfg

3,修改zoo.cfg

dataDir=/var/zfg/zookeeper
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888

4,在dataDir目录下创建一个myid文件,在这个文件中写上当前节点ID号
5,将配置好的zookeeper安装包拷贝到node03 node04
6,拷贝完毕后,在各自节点上创建myid号,ID号要依次递增

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章