HDFS篇12HA高可用-HDFSHA集群配置

36次阅读

共计 5191 个字符,预计需要花费 13 分钟才能阅读完成。

放弃本人的节奏后退就对了

HDFDS-HA 集群配置

(一)环境筹备

  • 批改 IP
  • 批改主机名及主机名和 IP 地址的映射
  • 敞开防火墙
  • ssh 免密登录
  • 装置 JDK,配置环境变量等

(二)布局集群

看出咱们将 NameNode 散布到两台机器上,保障集群的高可用性

hadoop102 hadoop103 hadoop104
NameNode NameNode
JournalNode JournalNode JournalNode
DataNode DataNode DataNode
ZK ZK ZK
ResourceManager
NodeManager NodeManager NodeManager

(三)配置 Zookeeper 集群

1. 集群布局

在 hadoop102、hadoop103 和 hadoop104 三个节点上部署 Zookeeper。

2. 解压装置

(1)解压 Zookeeper 安装包到 /opt/module/ 目录下

tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/

(2)在 /opt/module/zookeeper-3.4.10/ 这个目录下创立 zkData

mkdir -p zkData

(3)重命名 /opt/module/zookeeper-3.4.10/conf 这个目录下的 zoo_sample.cfg 为 zoo.cfg

mv zoo_sample.cfg zoo.cfg

3. 配置 zoo.cfg 文件

(1)具体配置

dataDir=/opt/module/zookeeper-3.4.10/zkData

减少如下配置

\#######################cluster##########################

server.2=hadoop102:2888:3888

server.3=hadoop103:2888:3888

server.4=hadoop104:2888:3888

(2)配置参数解读

Server.A=B:C:D。A 是一个数字,示意这个是第几号服务器;B 是这个服务器的 IP 地址;C 是这个服务器与集群中的 Leader 服务器替换信息的端口;D 是万一集群中的 Leader 服务器挂了,须要一个端口来从新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器互相通信的端口。集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件外面有一个数据就是 A 的值,Zookeeper 启动时读取此文件,拿到外面的数据与 zoo.cfg 外面的配置信息比拟从而判断到底是哪个 server。

4. 集群操作

(1)在 /opt/module/zookeeper-3.4.10/zkData 目录下创立一个 myid 的文件

touch myid
增加 myid 文件,留神肯定要在 linux 外面创立,在 notepad++ 外面很可能乱码

(2)编辑 myid 文件

vi myid
在文件中增加与 server 对应的编号:如 2 

(3)拷贝配置好的 zookeeper 到其余机器上

scp -r zookeeper-3.4.10/ [root@hadoop103.atguigu.com:/opt/app/](mailto:root@hadoop103.atguigu.com:/opt/app/)

scp -r zookeeper-3.4.10/ [root@hadoop104.atguigu.com:/opt/app/](mailto:root@hadoop104.atguigu.com:/opt/app/)

并别离批改 myid 文件中内容为 3、4

(4)别离启动 zookeeper

[root@hadoop102 zookeeper-3.4.10]# bin/zkServer.sh start

[root@hadoop103 zookeeper-3.4.10]# bin/zkServer.sh start

[root@hadoop104 zookeeper-3.4.10]# bin/zkServer.sh start

(5)查看状态

[root@hadoop102 zookeeper-3.4.10]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower

[root@hadoop103 zookeeper-3.4.10]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader

[root@hadoop104 zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower

(四)配置 HDFS-HA 集群

1. 官网地址

http://hadoop.apache.org/

2. 在 opt 目录下创立一个 ha 文件夹

mkdir ha

3. 将 /opt/app/ 下的 hadoop-2.7.2 拷贝到 /opt/ha 目录下

cp -r hadoop-2.7.2/ /opt/ha/

4. 配置 hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

5. 配置 core-site.xml

<configuration>
<!-- 把两个 NameNode)的地址组装成一个集群 mycluster -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://mycluster</value>
        </property>

        <!-- 指定 hadoop 运行时产生文件的存储目录 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/opt/ha/hadoop-2.7.2/data/tmp</value>
        </property>
</configuration>

6. 配置 hdfs-site.xml

<configuration>
    <!-- 齐全分布式集群名称 -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>

    <!-- 集群中 NameNode 节点都有哪些 -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>

    <!-- nn1 的 RPC 通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>hadoop102:9000</value>
    </property>

    <!-- nn2 的 RPC 通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>hadoop103:9000</value>
    </property>

    <!-- nn1 的 http 通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>hadoop102:50070</value>
    </property>

    <!-- nn2 的 http 通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>hadoop103:50070</value>
    </property>

    <!-- 指定 NameNode 元数据在 JournalNode 上的寄存地位 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
    </property>

    <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>

    <!-- 应用隔离机制时须要 ssh 无秘钥登录 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/zhutiansama/.ssh/id_rsa</value>
    </property>

    <!-- 申明 journalnode 服务器存储目录 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/ha/hadoop-2.7.2/data/jn</value>
    </property>

    <!-- 敞开权限查看 -->
    <property>
        <name>dfs.permissions.enable</name>
        <value>false</value>
    </property>

    <!-- 拜访代理类:client,mycluster,active 配置失败主动切换实现形式 -->
    <property>
          <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
</configuration>

7. 拷贝配置好的 hadoop 环境到其余节点

(五)启动 HDFS-HA 集群

1. 在各个 JournalNode 节点上,输出以下命令启动 journalnode 服务

sbin/hadoop-daemon.sh start journalnode

2. 在 [nn1] 上,对其进行格式化,并启动

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

3. 在 [nn2] 上,同步 nn1 的元数据信息

bin/hdfs namenode -bootstrapStandby

4. 启动[nn2]

sbin/hadoop-daemon.sh start namenode

5.Web 页面查看

6. 在 [nn1] 上,启动所有 datanode

sbin/hadoop-daemons.sh start datanode

7. 将 [nn1] 切换为 Active

bin/hdfs haadmin -transitionToActive nn1    

8. 查看是否 Active

bin/hdfs haadmin -getServiceState nn1

(六)配置 HDFS-HA 主动故障转移

1. 具体配置

​(1)在 hdfs-site.xml 中减少

<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>

​(2)在 core-site.xml 文件中减少

<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>

2. 启动

(1)敞开所有 HDFS 服务:

sbin/stop-dfs.sh

(2)启动 Zookeeper 集群:

bin/zkServer.sh start

(3)初始化 HA 在 Zookeeper 中状态:

bin/hdfs zkfc -formatZK

(4)启动 HDFS 服务:

sbin/start-dfs.sh

(5)在各个 NameNode 节点上启动 DFSZK Failover Controller,先在哪台机器启动,哪个机器的 NameNode 就是 Active NameNode

sbin/hadoop-daemin.sh start zkfc

3. 验证

​(1)将 Active NameNode 过程 kill

kill -9 namenode 的过程 id

​(2)将 Active NameNode 机器断开网络

service network stop

相干材料

正文完
 0