概念
在HBase中Hmaster负责监控RegionServer的生命周期,均衡RegionServer的负载,如果Hmaster挂掉了,那么整个HBase集群将陷入不健康的状态,并且此时的工作状态并不会维持太久。所以HBase支持对Hmaster的高可用配置。
如果HMaster挂掉的话:
1.不能建表修改表了,但是可以在已经存在的表增删改查数据,因为这些操作是RegionServer做的.
- 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行
# Allow alternate hbase conf dir location.
HBASE_CONF_DIR="${HBASE_CONF_DIR:-$HBASE_HOME/conf}"
# List of hbase regions servers. 列出当前有哪些RegionServers,获取方式是读取regionservers配置文件
HBASE_REGIONSERVERS="${HBASE_REGIONSERVERS:-$HBASE_CONF_DIR/regionservers}"
# List of hbase secondary masters. 列出HBase备用的Master,读取下面目录的backup-masters配置文件,如果你想让HBase知道备用的HMaster节点,就需要给备用的Master配置到backup-masters文件里面
HBASE_BACKUP_MASTERS="${HBASE_BACKUP_MASTERS:-$HBASE_CONF_DIR/backup-masters}"
Master容错操作
修改配置文件
在"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映射了.
zjj101
zjj102
zjj103
重启HBase
此时有三个备用的Master,三个Master是StandBy状态,HBase会自动从这三个备用Master里面挑选一个Master,给这个Master状态转成active状态.
开始重启HBase:
在hbase-1.3.1/bin/目录下
[root@zjj101 bin]# sh stop-hbase.sh
stopping hbase.................
[root@zjj101 bin]# sh start-hbase.sh
starting master, logging to /root/soft/hbase-1.3.1/logs/hbase-root-master-zjj101.out
# 启动了regionserver
zjj103: starting regionserver, logging to /root/soft/hbase-1.3.1/bin/../logs/hbase-root-regionserver-zjj103.out
zjj102: starting regionserver, logging to /root/soft/hbase-1.3.1/bin/../logs/hbase-root-regionserver-zjj102.out
zjj101: starting regionserver, logging to /root/soft/hbase-1.3.1/bin/../logs/hbase-root-regionserver-zjj101.out
# 启动了三个master
zjj101: master running as process 76684. Stop it first.
zjj102: starting master, logging to /root/soft/hbase-1.3.1/bin/../logs/hbase-root-master-zjj102.out
zjj103: starting master, logging to /root/soft/hbase-1.3.1/bin/../logs/hbase-root-master-zjj103.out
[root@zjj101 bin]#
控制台查看一下
http://zjj101:16010/master-status
下面显示有两个备用的HMaster ,名字分别是zjj102和zjj103
如果zjj101主HMaster挂掉了,其它备用HMaster会有一个自动变成主HMaster. 如果刚刚宕机的zjj101忽然又好了,那么这个zjj101HMaster节点会变成备用的HMaster.