发表于 2018-10-30 10:15:19

搭建 hadoop2 自动切换HA 集群

  hadoop2 比 hadoop1的一些新的功能:
  其中HA解决了hadoop1的单点故障问题
  1) 各节点:
  namenode:master   slave3
  datanode:slave1slave2slave3
  journalnode:masterslave1slave3
  zookeeper: masterslave1slave3
  2)hadoop2 搭建在手工切换ha的集群基础上:
  a) 关闭所有启动角色
  b) 删除所有机器/usr/local/hadoop/tmp 和 /usr/local/hadoop/logs的内容
  3) zookeeper集群安装:

[*]  a) master上安装zookeeper
[*]  a.1)把conf/zoo_sample.cfg重命名为conf/zoo.cfgmv zoo_sample.cfg zoo.cfg
[*]  a.2)修改文件conf/zoo.cfg
[*]  1)dataDir=/usr/local/zookeeper/data
[*]  2)增加以下内容
[*]  server.1=master:2888:3888
[*]  ---> 标识1 是master对应在zookeeper集群的编号 2888:3888是数据通信端口
[*]  server.2=slave1:2888:3888
[*]  ---> 标识2 是slave1对应在zookeeper集群的编号 2888:3888是数据通信端口
[*]  server.3=slave3:2888:3888
[*]  ---> 标识3 是slave3对应在zookeeper集群的编号 2888:3888是数据通信端口
[*]  a.3) mkdir zookeeper/data
[*]  # mkdir data
[*]  a.4) 写入文件echo 1到 zookeeper/data/myid 这样在本机master内写上标识1 两者关联起来
[*]  # echo 1 > data/myid
[*]
[*]
[*]  b) 复制zookeeper文件夹到slave1、slave3上
[*]
[*]  scp -rq zookeeperslave1:/usr/local
[*]  scp -rq zookeeperslave3:/usr/local
[*]
[*]
[*]  c) 其余节点写标识
[*]  在slave1上执行命令echo 2 zookeeper/data/myid
[*]  在slave3上执行命令echo 3 zookeeper/data/myid
[*]
[*]
[*]  d) 启动和验证
[*]  在masterslave1slave3上,分别执行命令zookeeper/bin/zkServer.sh start
[*]  执行命令zookeeper/bin/zkServer.sh status 可以看到三个节点的状态 哪个是leader 哪个是follower
[*]  直接开启
  4) hdfs配置文件:(hadoop-env.sh、core-site.xml、hdfs-site.xml、slaves)

[*]  2.1 配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、slaves)
[*]  2.1.1 hadoop-env.sh
[*]  export JAVA_HOME=/usr/local/jdk
[*]  2.1.2 core-site.xml
[*]
[*]  
[*]  fs.default.name
[*]  hdfs://cluster1
[*]  
[*]
[*]  
[*]  hadoop.tmp.dir
[*]  /usr/local/hadoop/tmp
[*]  
[*]
[*]  
[*]  ha.zookeeper.quorum    ------ 配置zk集群
[*]  master:2181,slave1:2181,slave3:2181
[*]  
[*]
[*]
[*]  2.1.3 hdfs-site.xml
[*]  
[*]  dfs.replication
[*]  3
[*]  
[*]
[*]  
[*]  dfs.nameservices ----每个nameservice对应一个hdfs集群
[*]  cluster1
[*]  
[*]
[*]  
[*]  dfs.ha.namenodes.cluster1
[*]  master,slave3
[*]  
[*]
[*]  
[*]  dfs.namenode.rpc-address.cluster1.master
[*]  master:9000
[*]  
[*]
[*]  
[*]  dfs.namenode.http-address.cluster1.master
[*]  master:50070
[*]  
[*]
[*]  
[*]  dfs.namenode.rpc-address.cluster1.slave3
[*]  slave3:9000
[*]  
[*]
[*]  
[*]  dfs.namenode.http-address.cluster1.slave3
[*]  slave3:50070
[*]  
[*]
[*]  
[*]  dfs.ha.automatic-failover.enabled.cluster1
[*]  true
[*]  
[*]
[*]  
[*]  dfs.namenode.shared.edits.dir
[*]  qjournal://master:8485;slave1:8485;slave3:8485/cluster1
[*]  
[*]
[*]  
[*]  dfs.journalnode.edits.dir
[*]  /usr/local/hadoop/tmp/journal
[*]  
[*]
[*]  
[*]  dfs.ha.fencing.methods
[*]  
[*]  sshfence
[*]  shell(/bin/true)
[*]  
[*]  
[*]
[*]  
[*]  dfs.ha.fencing.ssh.private-key-files
[*]  /root/.ssh/id_rsa
[*]  
[*]
[*]  
[*]  dfs.client.failover.proxy.provider.cluster1
[*]  org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
[*]  
[*]
[*]  2.1.6 slaves -----> 指定NodeManager 和 datanode
[*]  slave1
[*]  slave2
[*]  slave3
  5) 删除其他节点的hadoop文件夹,修改好后拷贝到其余节点
  scp -r /usr/local/hadoop   其他:/usr/local/
  6) 启动hadoop2 hdfs集群

[*]  6.1) 格式化zk集群
[*]  在master上执行hadoop2.5/bin/hdfs zkfc -formatZK   此操作仅仅表示和zk集群发生关联
[*]  15/01/11 18:14:20 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/cluster1 in ZK.
[*]
[*]  3在zookeeper中初始化
[*]  $HADOOP_HOME/bin/hdfs zkfc -formatZK
[*]  运行这个命令后,会在zookeeper上创建一个/hadoop-ha/mycluster/的znode,用来存放automaticfailover的数据
[*]  4 启动zkfc(zookeeper failover controller)
[*]  需要在namenode1和namenode2上都启动zkfc daemon进程。
[*]  $HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc
[*]
[*]  6.2) 启动journalnode集群
[*]  在master、slave1、slave3上分别执行hadoop/sbin/hadoop-daemon.sh start journalnode
[*]  6.3) 格式化namenode、启动namenode
[*]  在上,对其进行格式化,并启动:
[*]  在h2master上执行bin/hdfs namenode -format
[*]  在h2master上执行sbin/hadoop-daemon.sh start namenode
[*]  在上,同步nn1的元数据信息:
[*]  在h2master2上执行bin/hdfs namenode -bootstrapStandby
[*]  在h2master2上执行sbin/hadoop-daemon.sh start namenode
[*]  6.4)启动datanode
[*]  在h2master上执行hadoop/sbin/hadoop-daemons.sh start datanode   启动所有datanode节点
[*]  此时访问如下链接
[*]  http://master:50070/ http://slave3:50070/
[*]  两个namenode都是standby状态
[*]  6.5)启动ZKFC (FailoverController) 必须是在namenode节点上启动 让zk来决定用哪个namenode作为active
[*]  在master、slave3上 启动zkfc,执行命令sbin/hadoop-daemon.sh start zkfc
[*]  此时访问   http://master:50070/ http://slave3:50070/ 结果如下:
[*]  Overview 'master:9000' (active)
[*]  Overview 'slave3:9000' (standby)
  7) 验证自动切换:
  关闭master的namenode进程:
  再次刷新
  http://h2master:50070/ http://slave3:50070/ 结果如下:
  Overview 'slave3:9000' (active)----> zk自动切换节点slave3为active状态
  master无法连接
  8) 总结:自动切换比手工切换多出来的步骤
  (1)配置上core-site.xml增加了配置项ha.zookeeper.quorum(zk集群的配置);
  hdfs-site.xml中把dfs.ha.automatic-failover.enabled.cluster1改为true
  (3)操作上格式化zk,执行命令bin/hdfs zkfc -formatZK;
  启动zkfc,执行命令sbin/hadoop-daemon.sh start zkfc

页: [1]
查看完整版本: 搭建 hadoop2 自动切换HA 集群