hadoop 完全分布式HA高可用集群(自动切换)搭建

实验环境

namenode1: 192.168.103.4
namenode2: 192.168.103.8
datanode1:192.168.103.15
datanode2: 192.168.103.5 
datanode3: 192.168.103.3
操作系统: ubuntu-16.04-x64
hadoop版本: apache-hadoop-2.6.5
jdk版本:1.8

安装步骤

1.安装jdk

jdk的安装过程此处不赘述,不熟悉的话可以参考网上的资料。

搭建zookeeper集群

zookeeper集群的搭建过程可以参考这里,本例中zookeeper集群搭建在datanode1, datanode2,datanode3节点上。

2.修改主机映射并配置ssh免密码登录

为了方便配置信息的维护,我们在hadoop配置文件中使用主机名来标识一台主机,那么我们需要在集群中配置主机与ip的映射关系。
修改集群中每台主机/etc/hosts文件,添加如下内容。

192.168.103.4   namenode1
192.168.103.8   namenode2
192.168.103.15  datanode1
192.168.103.5   datanode2
192.168.103.3   datanode3

集群在启动的过程中需要ssh远程登录到别的主机上,为了避免每次输入对方主机的密码,我们需要对namenode1和namenode2配置免密码登录
在namenode1上生成公钥

ssh-keygen

一路enter确认即可生成对应的公钥。
将namenode1的公钥拷贝到namenode2, datanode1, datanode2, datanode3节点上。

ssh-copy-id  -i  ~/.ssh/id_rsa.pub  root@namenode2
ssh-copy-id  -i  ~/.ssh/id_rsa.pub  root@datanode1
ssh-copy-id  -i  ~/.ssh/id_rsa.pub  root@datanode2

在namenode2上生成公钥后,并将namenode2的公钥拷贝到namenode1, datanode1, datanode2, datanode3节点上。具体的命令可以参考namenode1上的操作命令。

3.namenode1配置hadoop,并复制到其余节点

下载hadoop 安装包,点击这里获取hadoop-2.6.5。

  • 解压安装包

    tar xf hadoop-2.6.5.tar.gz
    
  • 修改etc/hadoop/hadoop-env.sh

     export JAVA_HOME=/opt/jdk1.8.0_91
    
  • 修改etc/hadoop/core-site.xml

    
         fs.defaultFS
         hdfs://mycluster
     
     
         hadoop.tmp.dir
         file:/opt/hadoop-2.6.5/tmp
     
     
        ha.zookeeper.quorum
        datanode1:2181,datanode2:2181,datanode3:2181
     
    

    ha.zookeeper.quorum为zookeeper集群的地址

  • 修改etc/hadoop/hdfs-site.xml

    
         dfs.namenode.name.dir
         file:/opt/hadoop-2.6.5/tmp/dfs/name
     
     
         dfs.datanode.data.dir
         file:/opt/hadoop-2.6.5/tmp/dfs/data
     
     
         dfs.replication
         3
     
    
     
     
         dfs.nameservices
         mycluster
     
     
         dfs.ha.namenodes.mycluster
         nn1,nn2
     
     
     
         dfs.namenode.rpc-address.mycluster.nn1
         namenode1:9000
     
     
     
         dfs.namenode.http-address.mycluster.nn1
         namenode1:50070
     
     
     
         dfs.namenode.rpc-address.mycluster.nn2
         namenode2:9000
     
      
     
         dfs.namenode.http-address.mycluster.nn2
         namenode2:50070
     
      
     
         dfs.ha.automic-failover.enabled.cluster
         true
     
     
     
         dfs.namenode.shared.edits.dir
         qjournal://datanode1:8485;datanode2:8485;datanode3:8485/mycluster
     
     
         dfs.client.failover.proxy.provider.mycluster
         org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
     
     
     
         dfs.ha.fencing.methods
         shell(/bin/true)
      
       
      
          dfs.ha.fencing.ssh.private-key-files
          /root/.ssh/id_rsa
      
     
      
          dfs.ha.fencing.ssh.connect-timeout
          30000
      
      
      
          dfs.journalnode.edits.dir
          /opt/hadoop-2.6.5/tmp/journal
      
    
  • 修改etc/hadoop/slaves

    datanode1
    datanode2
    datanode3
    
  • 将配置好的hadoop安装包拷贝到namenode2和其余的datanode上

     scp -r hadoop-2.6.5  root@namenode2:/opt
     scp -r hadoop-2.6.5  root@datanode1:/opt
     scp -r hadoop-2.6.5  root@datanode2:/opt
     scp -r hadoop-2.6.5  root@datanode3:/opt
    

4.启动集群

  • 启动zookeeper集群
    在datanode1,datanode2, datanode3节点执行如下命令:

    ./bin/zkServer.sh start
    
  • 格式化zk集群
    namenode1上执行:

     /bin/hdfs zkfc -formatZK
    
  • 启动journalnode集群
    datanode1, datanode2, datanode2上执行:

     ./sbin/hadoop-daemon.sh  start journalnode
    
  • 格式化namenode
    namenode1上执行:

     ./bin/hdfs namenode -format
    
  • 启动datanode
    datanode1, datanode2, datanode3上执行:

     ./sbin/hadoop-daemon.sh start datanode
    
  • 启动namenode
    namenode1:

     ./sbin/hadoop-daemon.sh start namenode
    

    namenode2:

    ./bin/hdfs namenode -bootstrapStandby
    ./sbin/hadoop-daemon.sh start namenode
    

    此时namenode1和namenode2同时处于standby状态。
    hadoop 完全分布式HA高可用集群(自动切换)搭建_第1张图片
    hadoop 完全分布式HA高可用集群(自动切换)搭建_第2张图片

  • 启动zkfc服务
    在namenode1和namenode2上同时执行如下命令:

    ./sbin/hadoop-daemon.sh  start zkfc
    

    启动zkfc服务后,namenode1和namenode2会自动选举出active节点
    hadoop 完全分布式HA高可用集群(自动切换)搭建_第3张图片
    hadoop 完全分布式HA高可用集群(自动切换)搭建_第4张图片

5.验证功能

root# ./bin/hdfs dfs -mkdir /test
root# ./bin/hdfs dfs -ls /
Found 1 items
drwxr-xr-x   - root supergroup          0 2018-06-01 13:49 /test
root# ./bin/hdfs dfs -put /root/a.txt  /test
root# ./bin/hdfs dfs -cat   /test/a.txt 
hello world

HA故障自动切换

此时namenode1处于active状态,namenode2处于standby状态。模拟namenode1节点namenode服务挂掉。
namenode1:

root# jps
21235 DFSZKFailoverController
21116 Jps
20014 NameNode
root# kill -9 20014

我们再查看namenode2的节点状态
hadoop 完全分布式HA高可用集群(自动切换)搭建_第5张图片

namenode2由standby状态切换到active状态,HA故障自动切换成功。

你可能感兴趣的:(hadoop)