2.5 自动备灾(Auto Failover)

2.5.1 介绍

自动备灾也叫自动故障转移.

前面学习了如何配置手动的备灾. 在这种模式下, 即使 Active NameNode 挂了, 系统也不会自动触发从 Active NameNode 到 Standby NameNode 的备灾.

下面我们开始学习如何配置和部署自动备灾.


2.5.2 自动备灾需要用到的组件(Component)

自动备灾需要给 HDFS 再增加 2 个新的组件:

  • 一个 Zookeeper quorum (Zookeeper 仲裁)
  • ZKFailoverController process (ZKFC, Zookeeper 备灾控制经常)

    Zookeeper 是一个高可用服务, 用来维持少量的协调数据, 数据变化的时候通知客户端, 和监听客户端的失效.

Zookeeper 仲裁

自动 HDFS failover 依赖于 Zookeeper, 主要有以下 2 个原因:

  • 失效检测(Failure detection)

    集群中的每一个 NameNode 节点都会与 Zookeeper 服务器保持一个持久的会话. 如果设备崩溃, Zookeeper 会话将会失效, 然后通知其他的 NameNode: 触发备灾.

  • 活动 NameNode 选举(Active NameNode election)

    Zookeeper 提供了一个简单的机制去选举一个活动节点. 如果当前当前的活动 NameNode 挂了, 另外一个节点会得到一个 Zookeeper 中的排他性的锁, 从而表明这个节点应该变成下一个活动的节点.


ZKFailoverController (ZKFC)

ZKFC 是一个新的组件, 它是一个 Zookeeper 客户端, 也是用来监视和管理 NameNode 的状态.

每个运行 NameNode 的设备也会运行一个 ZKFC.

ZKFC 负责下面的事情:

  • 健康监测(Health monitoring)

    ZKFC 会周期性的连接本地的 NameNode, 并运行一个健康监测命令.

    只要 NameNode 及时的响应一个健康的状态, ZKFC 就认为节点是健康的.

    如果节点挂了, 被冻结了, 或者其他原因进入了一个不健康状态, 健康监视器会把这节点标记为不健康(unhealthy)

  • Zookeeper 会话管理

    如果本地的 NameNode 是健康的, ZKFC 就会保持与 Zookeeper 服务的一个开着的会话. 如果本地 NameNode 是活动的, 它也会持有一个特殊的 lock znode.

    这个锁使用 Zookeeper 的目的是临时节点(ephemeral node). 如果会话过期, lock node 将会自动被删除.

  • 基于 Zookeeper 的选举

    如果本地节点是健康的并且 ZKFC 没有发现没有其他节点持有 lock znode, 它将会试着让自己去获得锁. 如果成功, 那么它就赢得了选举, 然后负责去运行一个备灾使本地的 NameNode 称为活动的.

    备灾进程和手动备灾基本类似. 如果必要, 先运行 fence, 然后本地 NameNode 变成活动状态.


2.5.3 部署 Zookeeper

分别在 hadoop201, hadoop202, hadoop203 部署 Zookeeper.

具体操作参考前面的 Zookeeper 的学习.


2.5.4 配置自动备灾

首先关闭已经运行的集群. 当集群正在运行的时候, 是不可能从手动备灾转变成自动备灾的.

hdfs-site.xml 增加一个配置

指定集群被设置为自动备灾.

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

core-site.xml 增加一个配置

指定运行 Zookeeper 服务的主机和端口

<property>
 <name>ha.zookeeper.quorum</name>
 <value>hadoop201:2181,hadoop202:2181,hadoop203:2181</value>
</property>

2.5.5 启动具有自动备灾功能的集群

步骤1: 启动 Zookeeper 服务器

分别在 3 台 Zookeeper 服务器启动 Zookeeper 服务

zkServer.sh start

步骤2: 初始化在 Zookeeper 中 HA 的状态

在任何一台 NameNode 主机上运行下面的命令, 就可以初始化在 Zookeeper 中需要的状态.

将来创建一个 znode, 自动备灾系统会在这个节点内储存数据.

bin/hdfs zkfc -formatZK

步骤3: 使用 start-dfs.sh 启动集群

因为自动备灾已经配置完成, start-dfs.sh 脚本现在将会自动自动在运行 NameNode 的设备上启动 ZKFC .

当 ZKFC 启动之后, 这些 ZKFC 会自动的选择一个 NameNode 变成 Active.

sbin/start-dfs.sh

现在具有自动备灾的集群已经启动成功.

步骤4: 验证 NameNode 的自动备灾功能

首先确认两个 NameNode 的状态.

杀死活动的 NameNode 的进程


2.5.6 总结

Copyright © 尚硅谷大数据 & 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-10-19 12:21:32

results matching ""

    No results matching ""