HDFS的HA

目录

一、相关进程

二、HA的配置

2.1修改hdfs-site.xml⾥

2.2在core-site.xml⽂件⾥修改部分属性

2.3 将配置信息分发到其他节点上

三、HA的启动

3.1 第⼀种情况:集群使⽤⼀段时间后,转为HA.

3.2第⼆种情况:搭建集群时,直接搭建HA


一、相关进程

1.QuorumPeerMain zookeeper 服务组件对应的进程
2.JournalNode qjm 对应的守护进程
3.DFSZKFailoverController zookeeper 对应的⾃动容灾客户端进程,运⾏在 、Namenode节点上
4.NameNode:
5.ZookeeperMain: ⼿动连接 zookeeper 服务所产⽣的客户端进

二、HA的配置

环境准备:

1). 三台虚拟机:hadoop01,hadoop02,hadoop03
2). 保证三台机器的防⽕墙都是关闭状态
3). 保证三台机器的免密登陆认证
4). 保证三台机器的时间同步
5). 保证三台机器的 /etc/hosts ⽂件的域名映射关系配置
6). 保证三台机器安装了 jdk hadoop ,并且配置了环境变量且命令好使

2.1修改hdfs-site.xml

 

<!--配置名称服务的逻辑名称-->
<property>
     <name>dfs.nameservices</name>
     <value>supercluster</value>
</property>

<!--配置两个namenode的唯⼀标识符-->
<property>
     <name>dfs.ha.namenodes.supercluster</name>
     <value>nn1,nn2</value>
</property>

<!--针对于每⼀个唯⼀标识符的namenode,设置完整的rpc地址和端⼝-->
<property>
     <name>dfs.namenode.rpc-address.supercluster.nn1</name>
     <value>hadoop01:8020</value>
</property>
<property>
     <name>dfs.namenode.rpc-address.supercluster.nn2</name>
     <value>hadoop02:8020</value>
</property>

<!--针对于每⼀个唯⼀标识符的namenode,配置http协议的地址和端⼝-->
<property>
     <name>dfs.namenode.http-address.supercluster.nn1</name>
     <value>hadoop01:50070</value>
</property> 
<property>
     <name>dfs.namenode.http-address.supercluster.nn2</name>
     <value>hadoop02:50070</value>
</property>

<!--配置journalnode的服务器地址和存储⽬录(数⽬为奇数个)-->
<!-- 服务器地址使⽤分号“;”作为分隔符-->
<property>
     <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/journalData</value>
</property>

<!--指定客户端连接Active的namenode节点的java类型-->
<property>
    <name>dfs.client.failover.proxy.provider.supercluster</name>                    
 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>


<!--配置防护机制、免密登陆、免密超时时间-->
<!--为了保证系统的正确性,在任何时间只有⼀个NameNode处于Active状态,需要配置⼀个防护机制 -->
<property>
     <name>dfs.ha.fencing.methods</name>
     <value>sshfence</value>
</property>
<!--为了使该防护选项起作⽤,它必须能够在不提供密码的情况下SSH到⽬标节点。因此,还必须配置以下属性-->
<property>
     <name>dfs.ha.fencing.ssh.private-key-files</name>
     <value>/root/.ssh/id_rsa</value>
</property>
<!-- 免密登陆超时时间,超过此时间未连接上,则登陆失败,此配置可选-->
<property>
     <name>dfs.ha.fencing.ssh.connect-timeout</name>
     <value>30000</value>
</property>

<!--修改⽀持⾃动容灾属性-->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>


<!--将原来全分布式下⾯的配置去掉-->
<!-- secondarynamenode守护进程的http地址:主机名和端⼝号。参考守护进程布局-->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>slave1:50090</value>
</property>
<!-- namenode守护进程的http地址:主机名和端⼝号。参考守护进程布局-->
<property>
    <name>dfs.namenode.http-address</name>
    <value>master:50070</value>
</property>





2.2在core-site.xml⽂件⾥修改部分属性

1)修改fs.defaultFS的属性值为名称服务的逻辑名称

<!--注意:是修改,修改,修改原属性的值不是追加,亲-->
<property>
     <name>fs.defaultFS</name>
     <value>hdfs://supercluster</value>
</property>
2) 定义journalnode进程的数据存储的⽗路径(⽬录在上⾯已经定义好了 的:journalData)
<property>
     <name>dfs.journalnode.edits.dir</name>
     <value>/usr/local/hadoop/tmp</value>
</property>
3) 添加zookeeper服务器
<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>

2.3 将配置信息分发到其他节点上

[root@hadoop01~] # scp /opt/apps/hadoop/etc/hadoop/* hadoop02:/opt/apps/hadoop/etc/hadoop/
[root@hadoop01~] # scp /opt/apps/hadoop/etc/hadoop/* hadoop03:/opt/apps/hadoop/etc/hadoop/

三、HA的启动

HA 的第⼀次启动,有以下两种情况:
        1、当普通集群已经使⽤⼀段时间后,再转为 HA ,此时,已经存在 fsimage ⽂件了。
        2、在搭建完全分布式时,直接搭建 hdfs HA ,此时,还没有⽣成 fsimage ⽂件

3.1 第⼀种情况:集群使⽤⼀段时间后,转为HA.

1 . 启动三个节点上的 journalnode 服务,(请注意,如果集群启动了,先把集群 stop掉)
[root@hadoop01~] # hadoop-daemon.sh start journalnode
[root@hadoop02~] # hadoop-daemon.sh start journalnode
[root@hadoop03~] # hadoop-daemon.sh start journalnode
2 . 启动以前节点上的 namenode 进程
[root@hadoop01~] # hadoop-daemon.sh start namenode
3 . 在新的 namenode 节点上拉取镜像⽂件
[root@hadoop01~] # hdfs namenode -bootstrapStandby
4 . 同步⽇志到 journalnode 集群上 , 再启动集群
         -- 先关 namenode
[root@hadoop01~] # hadoop-daemon.sh stop namenode
        -- 再同步⽇志
[root@hadoop01~] # hdfs namenode -initializeSharedEdits
5 . 格式化 zkfc
        - 1 、前提 QuorumPeerMain 服务必须处于开启状态,客户端 zkfc 才能格式化成功
[root@hadoop01~] # zkServer.sh start
[root@hadoop02~] # zkServer.sh start
[root@hadoop03~] # zkServer.sh start
        - 2 、选择其中⼀个 namenode 节点进⾏格式化 zkfc
[root@hadoop01~] # hdfs zkfc -formatZK
6 . 你就可以快乐的开启 HA 集群进⾏测试了

 [root@hadoop01~]# start-all.sh

3.2第⼆种情况:搭建集群时,直接搭建HA

1 . 启动三个节点上的 journalnode 服务
[root@hadoop01~] # hadoop-daemon.sh start journalnode
[root@hadoop02~] # hadoop-daemon.sh start journalnode
[root@hadoop03~] # hadoop-daemon.sh start journalnode
2 . 格式化 namenode
- 先删除所有节点的 ${hadoop.tmp.dir} /tmp/ 的数据 ( 可选,这⼀步表示弃⽤ fsimage.)
- 选择其中⼀个 namenode 进⾏格式化
[root@hadoop01~] # hdfs namenode -format
- 并启动 namenode 进程
[root@hadoop01~] # hadoop-daemon.sh start namenode
3 . 在另⼀台 namenode 上拉取已格式化的那台机器的镜像⽂件(数据的⼀致性)
[root@hadoop02~] # hdfs namenode -bootstrapStandby
4 . 然后关闭已经启动的 namenode
[root@hadoop01~] # hadoop-daemon.sh stop namenode
5 . 格式化 zkfc
- 1 、前提 QuorumPeerMain 服务必须处于开启状态,客户端 zkfc 才能格式化成 功
[root@hadoop01~] # zkServer.sh start
[root@hadoop02~] # zkServer.sh start
[root@hadoop03~] # zkServer.sh start
- 2 、选择其中⼀个 namenode 节点进⾏格式化 zkfc
[root@hadoop01~] # hdfs zkfc -formatZK
6 . 你就可以快乐的开启 HA 集群进⾏测试了
[root@hadoop01~] # start-all.sh
注意:以后开 HA 集群时,要先开 zookeeper 服务,再开 HDFS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值