在 HBase 中 Hmaster 负责监控 RegionServer 的生命周期,均衡 RegionServer 的负载,如果 Hmaster 挂掉了,那么整个 HBase 集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以 HBase 支持对 Hmaster 的高可用配置。

如果 HMaster 挂掉的话:

  1. 不能建表修改表了, 但是可以在已经存在的表增删改查数据, 因为这些操作是 RegionServer 做的.

  2. Region 分配也是由 HMaster 来处理的. 如果 HMaster 挂掉的话, 那么 Region 分配也是无法完成的.

要想 HMaster 高可用的话, 你需要启动多个 HMaster 进程. 如果有一个 HMaster 挂掉的话, 其它的 HMaster 可以顶上.

重新选举

HBase 配置 HA,当 active master 宕机时,通过 ZK 重新选择一个新的 active master。

配置 HMaster 高可用:

HBase 在启动的时候会调用 bin 目录的 hbase 命令, 所有的脚本最终都是调用 hbase 命令 .

hbase 脚本然后读取同目录下的 hbase-config.cmd 脚本, 然后 hbase-config.cmd 脚本再读取 env.sh 脚本来配置环境.

hbase-config.sh 内容

大概在 78 行

  1. HBASE_CONF_DIR="${HBASE_CONF_DIR:-$HBASE_HOME/conf}"
  2. HBASE_REGIONSERVERS="${HBASE_REGIONSERVERS:-$HBASE_CONF_DIR/regionservers}"
  3. HBASE_BACKUP_MASTERS="${HBASE_BACKUP_MASTERS:-$HBASE_CONF_DIR/backup-masters}"

修改配置文件

在 “hbase-1.3.1/conf/backup-masters” 文件里面配置 HMaster 的所在的机器的 ip, 如果没有 backup-masters 文件就新建一个.

注意, 你在哪个机器启动集群, 你就在这个机器配置 backup-masters 文件就行了, 别的机器不用同步分发这个配置文件. 如果下回你要在别的机器上启动 HA HMaster 的 HBase 集群的话, 那么你在那个机器也需要配置一遍.

编辑 backup-masters:

注意, 内容后面不能有任何的空格, 不然会失效… 报: Name or service not knownstname zjj101 错误…

然后就是必须要用 vim 创建编辑 backup-masters, 如果用 windows 文本编辑器的话修改的话会有编码问题.

zjj101 是我服务器的 ip, 我已经配置了 hosts 映射了.

  1. zjj101
  2. zjj102
  3. zjj103

重启 HBase

此时有三个备用的 Master, 三个 Master 是 StandBy 状态, HBase 会自动从这三个备用 Master 里面挑选一个 Master, 给这个 Master 状态转成 active 状态.

开始重启 HBase:

在 hbase-1.3.1/bin / 目录下

  1. [root@zjj101 bin]
  2. stopping hbase.................
  3. [root@zjj101 bin]
  4. starting master, logging to /root/soft/hbase-1.3.1/logs/hbase-root-master-zjj101.out
  5. zjj103: starting regionserver, logging to /root/soft/hbase-1.3.1/bin/../logs/hbase-root-regionserver-zjj103.out
  6. zjj102: starting regionserver, logging to /root/soft/hbase-1.3.1/bin/../logs/hbase-root-regionserver-zjj102.out
  7. zjj101: starting regionserver, logging to /root/soft/hbase-1.3.1/bin/../logs/hbase-root-regionserver-zjj101.out
  8. zjj101: master running as process 76684. Stop it first.
  9. zjj102: starting master, logging to /root/soft/hbase-1.3.1/bin/../logs/hbase-root-master-zjj102.out
  10. zjj103: starting master, logging to /root/soft/hbase-1.3.1/bin/../logs/hbase-root-master-zjj103.out
  11. [root@zjj101 bin]

控制台查看一下

http://zjj101:16010/master-status

下面显示有两个备用的 HMaster , 名字分别是 zjj102 和 zjj103

HBase的高可用 - 图1

如果 zjj101 主 HMaster 挂掉了, 其它备用 HMaster 会有一个自动变成主 HMaster. 如果刚刚宕机的 zjj101 忽然又好了, 那么这个 zjj101HMaster 节点会变成备用的 HMaster.