Hadoop HDFS-HA架构和部署

目录

一、HDFS-HA配置和测试

1. 修改hdfs-site.xml

2. 修改core-site.xml

3. 服务启动

二、自动故障转移

1. 修改hdfs-site.xml文件

2. 修改core-site.xml文件

3. 服务启动


试想一个场景,每个hdfs集群只有一个namenode节点,如果这个namenode节点不可用,那么整个hdfs集群服务都不可用,这样集群的可抗性是非常差的。HDFS-HA(HDFS High Availability)就是解决集群单namenode节点的解决方案,可以在集群内设置多个namenode节点,多个namenode节点只有一个是活动(active)状态,其他namenode节点是后备(standby)状态,一旦活动的namenode节点不可用时,后备的namenode节点马上切换至活动状态,继续提供服务。

说明:三台机器的主机名是:bigdata.centos01、bigdata.centos02、bigdata.centos03,其中在01和02上面部署namenode节点服务,在三台机器上部署datanode和journalnode服务。

一、HDFS-HA配置和测试

说明:该配置是基于单namenode节点上做配置,如未配置好单namenode节点服务,请参阅:Hadoop集群搭建

1. 修改hdfs-site.xml

<!-- 新增如下配置项 -->

<!-- nameservice 的名称-->
<property>
	<name>dfs.nameservices</name>
	<value>ns</value>
</property>

<!-- 配置每个namenode在nameservice的唯一标识,每个nameservice最多能配置两个 -->
<property>
	<name>dfs.ha.namenodes.ns</name>
	<value>nn1,nn2</value>
</property>

<!-- 配置RPC(远程过程调用)监听地址和端口 -->
<property>
	<name>dfs.namenode.rpc-address.ns.nn1</name>
	<value>bigdata.centos01:8020</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.ns.nn2</name>
	<value>bigdata.centos02:8020</value>
</property>

<!-- 配置namenode http页面访问地址 -->
<property>
	<name>dfs.namenode.http-address.ns.nn1</name>
	<value>bigdata.centos01:50070</value>
</property>
<property>
	<name>dfs.namenode.http-address.ns.nn2</name>
	<value>bigdata.centos02:50070</value>
</property>

<!-- 设置一组 journalNode 的 URI 地址 -->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://bigdata.centos01:8485;bigdata.centos02:8485;bigdata.centos03:8485/ns</value>
</property>

<!-- journalNode日志存放目录 -->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/opt/modules/hadoop-2.5.0/data/jn</value>
</property>

<!--故障代理-->
<property>
        <name>dfs.client.failover.proxy.provider.ns</name
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!--隔离机制,读者请配置自己的user,替换<current_user>-->
<property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
</property>
<property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/<current_user>/.ssh/id_rsa</value>
</property>

2. 修改core-site.xml

<!-- 将属性值修改为hdfs-site.xml中配置的nameservice名称 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://ns</value>
</property>

3. 服务启动

  • 优先启动三台机器的journalnode,开始记录日志
# 三台机器执行
sbin/hadoop-daemon.sh start journalnode
  • 选取部署两台机器中的一台进行格式化操作,并启动namenode,此处选择是centos01
# 格式化,如果未启动journalnode,会报错
bin/hdfs namenode -format
# 启动namenode
sbin/hadoop-daemon.sh start namenode
  • centos01执行格式化操作,centos02复制centos01的格式化数据
bin/hdfs namenode -bootstrapStandby
  • 重新启动所有服务
# 停止先前启动的namenode和journalnode
sbin/stop-dfs.sh
# 启动namenode、datanode、journalnode
sbin/start-dfs.sh
  • 在浏览器访问namenode服务情况
http://bigdata.centos01:50070
http://bigdata.centos02:50070
  • 更改其中一台standby状态为active状态
# 配置文件中配置了nn1和nn2,是namenode的唯一标识
bin/hdfs haadmin -transitionToActive nn1

二、自动故障转移

如前面内容所示,namenode节点状态需要手动来更改为active状态,而且我们并不能实现其中一个namenode节点故障,另一个namenode节点服务状态由standby切换至active状态。下面将基于zookeeper做namenode的自动故障转移。

如未配置好zookeeper集群,请参阅:zookeeper的配置和分布式部署

注意:两台配置namenode节点服务器必须要支持互相无秘钥登录。无秘钥登录请参阅:Hadoop ssh无秘钥登录

1. 修改hdfs-site.xml文件

增加如下配置项:

<!-- 是否启动自动故障转移,ns是配置文件配置的nameservice名称 -->
<property>
   <name>dfs.ha.automatic-failover.enabled.ns</name>
   <value>true</value>
 </property>

2. 修改core-site.xml文件

增加如下配置项:

<!-- 配置zookeeper -->
<property>
  <name>ha.zookeeper.quorum</name>
  <value>bigdata.centos01:2181,bigdata.centos02:2181,bigdata.centos03:2181</value>
</property>

3. 服务启动

  • 启动zookeeper
# 3台机器执行
bin/zkServer.sh start
  • 初始化zookeeper
# 先停止hdfs的服务
sbin/stop-dfs.sh
# 只在一台部署namenode的节点上执行
bin/hdfs zkfc -formatZK
# 启动hdfs的服务
sbin/start-dfs.sh
  • 启动zkfc,监控namenode状态
# 执行以下命令,会有DFSZKFailoverController进程
# 部署namenode节点机器都需要执行
/sbin/hadoop-daemon.sh start zkfc
  • 结果

centos01通过zookeeper选举为active状态:

centos02是standby状态:

  • 测试

通过停止centos01的namenode服务,以达到模拟centos01的namenode服务故障的目的,停止centos01的namenode后发现centos02的namenode的状态由standby转化为active状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值