HDFS-高可用(HA)配置和使用

HA(High Available),高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。
通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。

一、前置条件

  1. 安装好 Hadoop 集群;
  2. 安装好 ZooKeeper 集群

二、HA 的安装

  1. 修改 master 的 core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
​
    http://www.apache.org/licenses/LICENSE-2.0
​
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
​
<!-- Put site-specific property overrides in this file. -->
​
<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://master:9000</value>
	</property>
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/module/hadoop/hdfs</value>
	</property>

    <!-- 设置 Zookeeper 集群位置信息 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
</configuration>
  1. 修改 master 的 hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at
​
    http://www.apache.org/licenses/LICENSE-2.0
​
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
​
<!-- Put site-specific property overrides in this file. -->
​
<configuration>
    <!--定义 NameServices 逻辑名称,此处为 ns1 -->
    <property>
        <name>dfs.nameservices</name>
        <value>ns1</value>
    </property>
​
    <!--映射 NameServices 逻辑名称到 NamNode 逻辑名称 -->
    <property>
        <name>dfs.ha.namenodes.ns1</name>
        <value>nn1,nn2</value>
    </property>
    
    <!-- 配置 nn1 为 master -->
    <property>
        <name>dfs.namenode.rpc-address.ns1.nn1</name>
        <value>master:9000</value>
    </property>
​
    <property>
        <name>dfs.namenode.http-address.ns1.nn1</name>
        <value>master:50070</value>
    </property>
    
    <!-- 配置 nn2 为 slave1 -->
    <property>
        <name>dfs.namenode.rpc-address.ns1.nn2</name>
        <value>slave1:9000</value>
    </property>
​
    <property>
        <name>dfs.namenode.http-address.ns1.nn2</name>
        <value>slave1:50070</value>
    </property>
    
    <!--配置 JournalNode 集群位置信息及目录 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master:8485;slave1:8485;slave2:8485/ns1</value>
    </property>
    
    <!--配置 JournalNode edits 文件位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/module/hadoop/hdfs/journal</value>
    </property>
    
    <!-- 配置故障迁移实现类 -->
    <property>
        <name>dfs.client.failover.proxy.provider.ns1</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    
    <!-- 指定切换方式为SSH免密钥方式 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    
    <!-- 设置故障自动切换 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
	<!-- namenode和datanode的缺省路径  -->
	<property>
		<name>dfs.name.dir</name>
		<value>/opt/module/hadoop/hdfs/dfs/name/</value>
	</property>
	<property>
		<name>dfs.data.dir</name>
		<value>/opt/module/hadoop/hdfs/dfs/data/</value>
	</property>
</configuration>
  1. 同步 core-site.xml 和 hdfs-site.xml
    把 master 上的 core-site.xml 和 hdfs-site.xml 发送给 slave1 和 slave2。
scp /opt/module/hadoop/etc/hadoop/core-site.xml root@slave1:/opt/module/hadoop/etc/hadoop

scp /opt/module/hadoop/etc/hadoop/core-site.xml root@slave2:/opt/module/hadoop/etc/hadoop

scp /opt/module/hadoop/etc/hadoop/hdfs-site.xml root@slave1:/opt/module/hadoop/etc/hadoop

scp /opt/module/hadoop/etc/hadoop/hdfs-site.xml root@slave2:/opt/module/hadoop/etc/hadoop
  1. 初始化 HA
    1、如果 HDFS 正在运行,请关闭;
    2、启动 3 个节点的 ZooKeeper,在 3 个节点执行:zkServer.sh start;
    3、删除 3 个节点的 hdfs 文件夹,在 3 个节点执行:rm -rf /opt/module/hadoop/hdfs;
    4、启动 3 个节点的 journal,在 3 个节点执行:hadoop-daemon.sh start journalnode;
    5、格式化 HDFS,在 master 执行:在 master 执行:hdfs namenode -format;
    6、启动 master 的 NameNode,在 master 执行:hadoop-daemon.sh start namenode;
    7、同步 master 的 NameNode 状态到 slave1,在 slave1 执行:hdfs namenode -bootstrapStandby;
    8、关闭 master 的 NameNode,在 master 执行:hadoop-daemon.sh stop namenode;
    9、格式化 zkfc,在 master 执行:hdfs zkfc -formatZK;
    10、关闭 3 个节点的 ZooKeeper,在 3 个节点执行:zkServer.sh stop;
  2. 安装主备切换软件
    在 master 和 slave1 安装用于实现主备切换的软件:yum -y install psmisc

三、HA 的使用

  1. 启动
    启动 3 个节点的 ZooKeeper,在 3 个节点执行:zkServer.sh start;
    启动 HDFS,在 master 执行:start-dfs.sh;
  2. 验证
    在浏览器分别使用:master-ip:50070 和 slave1-ip:50070 查看两个 NameNode 状态,是否一个处于 Active,一个处于 Standby;
    使用 jps 命令查看 Active NameNode 的进程 ID;
    使用 kill -9 ID 杀死 Active NameNode,验证能否切换 Standby 为 Active;
  3. 关闭.
    关闭 HDFS,在 master 执行:stop-dfs.sh;
    关闭 3 个节点的 ZooKeeper,在 3 个节点执行:zkServer.sh stop;

如果启动后发现自己的高可用配置失败了。可以按照下面的步骤重新配置:

  1. 在master执行:stop-dfs.sh 关闭hdfs(zookeeper不要关闭,只关闭hdfs进程就好)
  2. 在 3 个节点执行:rm -rf /opt/module/hadoop/hdfs;
  3. 在 3 个节点执行:hadoop-daemon.sh start journalnode;
  4. 在 master 执行:hadoop-daemon.sh start namenode;
  5. 在 slave1 执行:hdfs namenode -bootstrapStandby;
  6. 格式化 zkfc,在 master 执行:hdfs zkfc -formatZK;
  7. 在 master 和 slave1 执行:yum -y install psmisc
  8. 在 master 执行:hadoop-daemon.sh stop namenode;

然后再去master上启动hdfs,去杀死状态为Active的NameNode,查看原来是Standby状态的NameNode是否切换为Active。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

散装程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值