码迷,mamicode.com
首页 > 其他好文 > 详细

搭建自动切换的HA

时间:2015-07-30 22:52:11      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

2.搭建自动切换的ha(比手工切换ha集群,多了zookeeper集群)
搭建ZK集群环境,启动zk集群,格式化ZK
 
 
-----------------------------------------------------------------------------------------------
2. 环境
 
zookeeper:hadoop2,hadoop3,hadoop4
namenode:hadoop0和hadoop1
datanode:hadoop2,hadoop3,hadoop4
journalNode:hadoop0,hadoop1,hadoop2  奇数个,至少3个,可以分配在任意节点,与其他节点没有任何关系
YARN:
resourcemanager:hadoop0
nodemanager:hadoop2,hadoop3,hadoop4
 
 
2.0 搭建zookeeper集群,并启动
 2.0.1  在hadoop2上解压缩,重命名为zookeeper,把conf/zoo_sample.cfg重            命名为conf/zoo.cfg
  修改文件conf/zoo.cfg
  (1)dataDir=/usr/local/zookeeper/data
  (2)增加以下内容
     server.2=hadoop2:2888:3888
  server.3=hadoop3:2888:3888
  server.4=hadoop4:2888:3888
 
  创建目录mkdir zookeeper/data
  写入文件echo 2 zookeeper/data/myid
 
  复制zookeeper文件夹到hadoop3、hadoop4上
  scp -rq zookeeper  hadoop3:/usr/local
  scp -rq zookeeper  hadoop4:/usr/local
 
  在hadoop3上执行命令echo 3 zookeeper/data/myid
  在hadoop4上执行命令echo 4 zookeeper/data/myid
 
 
2.0.2启动
 
在hadoop2,hadoop3,hadoop4上分别执行,zookeeper/bin/zkServer.sh start
 
技术分享
 
 
 
2.0.3验证
 
执行命令zookeeper/bin/zkCli.sh
  进入后执行ls / 
 
技术分享
 
 
 
以上步骤Zookeeper搭建成功
--------------------------------------------------------------------------------------------------------
 
 
2.1  配置文件: hadoop-env.sh, core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml,slaves
 
3.1.1  hadoop-env.sh   
修改   JAVA_HOME的内容
技术分享
2.1.2 core-site.xml
 
<configuration>

<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>

【这里的值指的是默认的HDFS路径。当有多个HDFS集群同时工作时,用户如果不写集群名称,那么默认使用哪个哪?在这里指定!该值来自于hdfs-site.xml中的配置】


<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>

【这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。】

 

<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop2:2181,hadoop3:2181,hadoop4:2181</value>
</property>

【这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点】
</configuration>

 
 
 
 
2.1.3 hdfs-site.xml
 

<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>

【指定DataNode存储block的副本数量。默认值是3个,我们现在有4个DataNode,该值不大于4即可。】

<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>

【使用federation时,使用了1个HDFS集群。这里抽象出两个NameService实际上就是给这1个HDFS集群起了个别名。名字可以随便起,相互不重复即可】

 

 


<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>hadoop101,hadoop102</value>
</property>

【指定NameService是cluster1时的namenode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可】

<property>
<name>dfs.namenode.rpc-address.cluster1.hadoop101</name>
<value>hadoop0:9000</value>
</property>

【指定hadoop101的RPC地址】
<property>
<name>dfs.namenode.http-address.cluster1.hadoop101</name>
<value>hadoop0:50070</value>
</property>

【指定hadoop101的http地址】

 

 


<property>
<name>dfs.namenode.rpc-address.cluster1.hadoop102</name>
<value>hadoop1:9000</value>
</property>

【指定hadoop102的RPC地址】

<property>
<name>dfs.namenode.http-address.cluster1.hadoop102</name>
<value>hadoop1:50070</value>
</property>

【指定hadoop102的http地址】

 

 

 

<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop0:8485;hadoop1:8485;hadoop2:8485/cluster1</value>
</property>
【指定cluster1的两个NameNode共享edits文件目录时,使用的JournalNode集群信息】

 

 

<property>
<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>true</value>
</property>
【指定cluster1是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另一台NameNode】

 

 

<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

【指定cluster1出故障时,哪个实现类负责执行故障切换】

 

 

<property>

<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/tmp/journal</value>
</property>

【指定JournalNode集群在对NameNode的目录进行共享时,自己存储数据的磁盘路径】

 

 

<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>

【一旦需要NameNode切换,使用ssh方式进行操作】

 


<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>

【如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置】

</configuration>


 
 
2.1.4 yarn-site.xml
 

<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop0</value>
</property>

【自定ResourceManager的地址,还是单点,这是隐患】

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

 
 
2.1.5mapred-site.xml
 

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

【指定运行mapreduce的环境是yarn,与hadoop1截然不同的地方】
</configuration>

 
 
2.1.6 slaves
 
hadoop2
hadoop3
hadoop4
 
 
---------------------------------------------------------
 
把hadoop0上的hadoop文件夹复制到hadoop1,hadoop2,hadoop3,hadoop4节点
 
以上步骤配置完成复制到各个节点
 
scp  -rq hadoop   hadoop1:/user/local
 
脚本
#!/bin/sh
for((i=1;i<5;i++));
do
  scp  -rq  /usr/local/$1    hadoop$i:/user/local/$2
    echo "copy done at from hadoop$i"
done
 
chmod 777
 
bch.sh  hadoop   .
 
 
 
 
 
 
2.3格式化zookeeper集群
 
在hadoop0上面执行 hadoop/bin/hdfs zkfc  -formatZK
 
格式化就表示注册的意思
在hadoop4上显示
 
技术分享
 
 
Hadoop0脚本
 
技术分享
 
 
 
2.2 启动journalnode集群
 
hadoop0,hadoop1,hadoop2 三个节点分别启动hournalnode
 
hadoop/sbin/hadoop-daemon.sh  start journalnode
 
技术分享
 
 
2.3格式化namenode,启动namenode
 
只格式化一个节点 hadoop0 
在hadoop0上执行,hadoop/bin/hdfs namenode -format
 
技术分享
 
 
启动namenode
 
在hadoop0上执行,hadoop/sbin/hadoop-daemon.sh  start namenode
 
 
技术分享
 
 
 
 
journalNode同步:
在Hadoop1上执行 hadoop/bin/hdfs  namenode  -bootstrapStandby
 
技术分享
 
 
在Hadoop1上启动namenode
 
hadoop/sbin/hadoop-daemo.sh start namenode
 
 
----------------------------------------------------------------------
 
以上步骤将hadoop0,hadoop1的namenode都处于了standby状态
技术分享
 
 
此时需要把一个namenode切换为active状态
 
 
-failover 保证不会发生脑裂
 
active,standby状态的切换
 
后面两个参数谁在后面表示谁为active状态
hadoop/bin/hdfs haadmin -failover --forceactive had102 hadoop101
在hadoop0上执行
 hadoop/bin/hdfs haadmin  -failover  --forceactive hadoop101 hadoop102
 
hadoop101,hadoop102是上面core-site.xml的逻辑名
 
技术分享
 
 
技术分享
 
 
 
 
2.4 启动datanode
 
在hadoop0 上启动datanode执行 hadoop/sbin/hadoop-daemons.sh start datanode
 
技术分享
 
 
2.5 启动ZKFC
用来实现自动切换
在hadoop0和hadoop1上面启动(那台上面有namenode就在那台启动)zkfc,执行命令
 
hadoop/sbin/hadoop-daemon.sh start zkfc
 
技术分享
 
 
切记改完配置文件一定要同步
 
2.6 启动resourcemanager和nodemanager
 
 
在hadoop0上面执行 hadoop/sbin/start-yarn.sh start resourcemanager
 
 
总结:
 
自动切换比手工切换多出来的配置和操作
(1)配置上core-site.xml增加了配置项ha.zookeeper.quorum;hdfs-site.xml中把dfs.ha.automatic-failover.enabled.cluster1改为true
(2) 操作上格式化zookeeper,执行命令bin/hdfs zkfc -formatZK  ; 启动zkfc,执行命令
sbin/hadoop-daemon.sh start zkfc
 
 
 

搭建自动切换的HA

标签:

原文地址:http://www.cnblogs.com/thinkpad/p/4690749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!