前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ZooKeeper的安装

ZooKeeper的安装

作者头像
字母哥博客
发布2020-09-23 11:19:05
5650
发布2020-09-23 11:19:05
举报
文章被收录于专栏:写字母的代码哥

方案架构说明

  • 先看看没有HA的HDFS的系统架构
  • 然后有HA方案的系统架构:

方案解析

  1. 两个NameNode,一个active,一个standby状态。
  2. activeNameNode写EditLogs到JournalNode集群,standByNameNode从JournalNode读EditLogs
  3. 利用zookeeper监控两个NameNode的状态,发现active死掉,然后用ZKFC进行切换。

此文章的假设是hadoop集群已经搭建好。zookeeper已经搭建完成!参考《安装zookeeper笔记》

  • 无HA的集群角色分配

主机名

ip

角色

hadoop01

192.168.56.10

NameNode ResourceManager ZK

hadoop02

192.168.56.11

DataNode NodeManager ZK

hadoop03

192.168.56.12

DataNode NodeManager ZK

hadoop04

192.168.56.13

DataNode NodeManager

  • 重新规划后,HA架构角色分配

主机名

ip

角色

hadoop01

192.168.56.10

NameNode ResourceManager ZK

hadoop02

192.168.56.11

NameNode,DataNode NodeManager ZK journalnode

hadoop03

192.168.56.12

DataNode NodeManager ZK journalnode

hadoop04

192.168.56.13

DataNode NodeManager journalnode

手动切换的HA配置

  • 修改core-site.xml将hdfs://hadoop01:9000换成(mycluster是HA的服务Id)
代码语言:javascript
复制
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
  • hdfs-site.xml上添加配置
代码语言:javascript
复制
<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>hadoop01:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>hadoop02:8020</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>hadoop01:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>hadoop02:50070</value>
</property>


<!--指定JournalNode -->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://hadoop02:8485;hadoop03:8485;hadoop04:8485/mycluster</value>
</property>
<!--指定cluster1出故障时,哪个实现类负责执行故障切换-->
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--SSH to the Active NameNode and kill the process-->
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/cluster/.ssh/id_rsa</value>
</property>
<!--the path where the JournalNode daemon will store its local state-->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/home/cluster/journalnode/localdata</value>
</property>

操作

  • 步骤1:在各个JournalNode节点上,输入以下命令启动journalnode服务: sbin/hadoop-daemon.sh start journalnode 如果你从一个no-HA更新到HA,you can do this … hdfs namenode -initializeSharedEdits
  • 步骤2:在[nn1]上,对其进行格式化,并启动: bin/hdfs namenode -format -clusterid mycluster sbin/hadoop-daemon.sh start namenode
  • 步骤3:在[nn2]上,同步nn1的元数据信息: bin/hdfs namenode -bootstrapStandby
  • 步骤4:在[nn2],启动NameNode: sbin/hadoop-daemon.sh start namenode
  • 步骤5:在[nn1]上,将NameNode切换为Active bin/hdfs haadmin -ns mycluster -transitionToActive nn1

状态查看

代码语言:javascript
复制
sbin/start-dfs.sh之后,两个namenode都进入standby状态
命令行:
查看状态:
hdfs haadmin  -getServiceState  nn1
hdfs haadmin  -checkHealth nn1(没有输出)
切换NameNode状态
hdfs haadmin -ns mycluster -transitionToActive nn1
hdfs haadmin -ns mycluster -transitionToStandby nn1

自动切换配置(在手动切换的基础上新增):

  • core-site.xml新增
代码语言:javascript
复制
<property>
   <name>ha.zookeeper.quorum</name>  
   <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>

2181是zookeeper配置的ClientPort * 然后要在hdfs-site.xml上添加配置:

代码语言:javascript
复制
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>
  • 启动zookeeper(hadoop01-03) zkServer.sh start 然后就是在NameNode的机器上初始化NameNode在ZK的状态了: bin/hdfs zkfc -formatZK
  • 重启HDFS(ZKFC会随之启动) sbin/stop-dfs.sh # 重启hdfs sbin/start-dfs.sh 或手动启动DFSZKFailoverController(ZKFC): sbin/hadoop-daemon.sh start zkfc # 启动ZKFC 在该HA方案中,每一个NameNode都有一个对应的ZKFC。ZKFC会随NameNode启动。 启动之后会有一个nameNode自动被选举为active
  • 测试yarn的可用性
代码语言:javascript
复制
[cluster@hadoop01 bin]$ pwd
/home/cluster/hadoop/bin
[cluster@hadoop01 bin]$ ./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar pi 10 100
  • 遇到的问题: java.io.IOException: Incompatible clusterIDs in /home/cluster/hadoop/tmp/dfs/data: namenode clusterID = mycluster; datanode clusterID = CID-5d8f5f94-1e6f-4f21-895a-b6892a881436 解决 修改/home/cluster/hadoop/tmp/dfs/data/current/VERSION 里面的clusterID =mycluster
  • 遇到的问题: 如果配置了 dfs.ha.fencing.methods sshfence ssh必须双向联通,否则active无法正确切换。
参考:

http://segmentfault.com/a/1190000000624579

喜欢 (1)or分享 (0)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-03-16),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方案架构说明
    • 方案解析
    • 手动切换的HA配置
      • 操作
        • 状态查看
          • 参考:
      • 自动切换配置(在手动切换的基础上新增):
      相关产品与服务
      大数据
      全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档