CentOS6.5下搭建高可用完全分布式

一、什么是高可用性

	“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
	
     高可用集群是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度。

为此我们在完全分布式系统的基础上加入了ZooKeeper、JournalNode集群,为了提高数据的安全性以及缓解NameNode的工作压力;其次,为了防止NameNode出现意外情况,我们还加入了能替代NameNode工作的另一进程:standbyNameNode;高可用的完全分布式系统有效的解决了NameNode的单点故障问题。
在这里插入图片描述

二、配置步骤

1.集群规划;
在这里插入图片描述
2.配置免密登录
node01->node01 node01->node02 node01->node03 node01->node04
node02->node01
将生成的公钥发送到要通信的节点:
1)ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa -->每个节点都执行
2)在node01节点执行,将node01的公钥加入到其他节点的白名单中

ssh-copy-id -i ~/.ssh/id_rsa.pub root@node01
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node02
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node03
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node04

3.所有节点配置JDK(jdk、防火墙、host文件的更改与配置可见我完全分布式搭建的过程)
4.修改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>

5.修改core-site.xml配置文件

	<property>
  		 <name>fs.defaultFS</name>
  		 <value>hdfs://mycluster</value>
	</property>
    <property>
  		 <name>ha.zookeeper.quorum</name>
   		 <value>node02:2181,node03:2181,node04:2181</value>
    </property>
    <property>
    	   <name>hadoop.tmp.dir</name>
    	   <value>/var/abc/hadoop/cluster</value>
	</property>
  1. 修改slaves配置文件
    修改为node02 node03 node04,此为DataNode节点的确定
    修改好后不先把Hadoop包发送到各个节点,要首先配置好zooKeeper

7.搭建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号要依次递增

8.依次在node02、node03、node04节点上启动zookeeper,启动zookeeper必须优先启动,以便选举出activeNamenode;zookeeper中有一个势力范围的概念,可以有效的解决集群中脑裂的问题。

bin/zkServer.sh  start

9.将配置好的HDFS安装包拷贝到node02 node03 node04
scp -r hadoop-2.6.5 root@node02:/opt/software/hadoop/
10.

(1)	格式化NameNode(创建目录以及文件)    
①	在node01、node02、node03分别执行如下命令
1)	hadoop-daemon.sh start journalnode
journalNode也要先启动,目的是为了将存放元数据的edits文件和fsimage文件初始化准备好。
②	随机选择一台NameNode执行:
1)	 hdfs namenode -format
2)	hadoop-daemon.sh start namenode
③	另外一台NameNode节点执行:
1)	hdfs namenode  -bootstrapStandby
(2)	启动zkfc,此进程用于连接zookeeper与NameNode之间,用于监控与改变Namenode的工作状态
hdfs zkfc -formatZK
(3)	关闭所有节点上的进程  stop-dfs.sh
(4)	启动HDFS   start-dfs.sh

为使客户端的数据更加安全,防止数据倾斜,我们最好使用集群外操作使用客户端
11.客户端的配置
在这里插入图片描述
为什么?
在这里插入图片描述

/******************************************************************************************/
              分界线 2018-10-17 更新 在高可用的基础上搭建YARN集群
      集群规划:
在这里插入图片描述
     1)首先修改Hadoop下的mapred-site.xml

<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>

     2)修改Hadoop下的yarn-site.xml

<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
<property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
 </property>
 <property>
   <name>yarn.resourcemanager.cluster-id</name>
   <value>cluster1</value>
 </property>
 <property>
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>node01</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>node02</value>
 </property>
 <property>
   <name>yarn.resourcemanager.zk-address</name>
   <value>node02:2181,node03:2181,node04:2181</value>
 </property>

     3)将更新后的Hadoop包分别发往各个节点,包括客户端节点

scp -r hadoop-2.6.5 root@node02:/opt/software/hadoop/

     4)发送完成后使用正常启动高可用的HDFS集群,然后使用 start-yarn.sh 启动yarn集群;然后在另外一个节点手动启动备用的ResourceManager,命令为:
        yarn-daemon.sh start resourcemanager
完成搭建后,可通过“节点名:8088”查看Web监控页面来查看搭建的状态。

猜你喜欢

转载自blog.csdn.net/hjy1821/article/details/83034129