我们都知道hbase 集群中通常有一个master 节点,多个region server节点,为了防止HBase 集群中master的单点故障,可以向集群中添加一个slave master,这些新添加的master 会分布在不同的物理机器上,因此以最坏的情形来看,当前运行master的那台物理机down了,整个系统可以由backup的 master 来接管!
在介绍如何添加master 节点之前,我们先了解一下在hbase集群中master是如何产生的.master 进程使用Zookeeper 来判断哪一个是当前活动的master:所有的master 竞争创建Zookeeper 中有一个专用的znode,第一个成功创建znode的成为集群中的当前活动的master !
以上场景会发生在整个集群启动时,如果存在多个master 进程同时启动,则成功创建znode的成为集群中的master。所有其他未成功的节点则simply loop around the znode并且等待master创建的znode消失,并触发重新竞争。下面的是来自《HBase: The Definitive Guide》的文章(有些疑问)
“ The /hbase/master znode is ephemeral, (短暂 的?zookeeper 机制)and is the same kind the region servers use to
report their presence. When the master process that created the znode fails, ZooKeeper will notice the end of the session with that server and remove the znode accordingly, triggering the election process. (既然创建失败,又怎么删除?)”
在完全分布式hbase集群上启动master 需要满足它的配置要和集群中其他节点的配置一样。集群中的master节点通常和集群中的其他节点都共用一套配置信息。一旦你确定系统的配置信息已经配置正确,就可以执行如下语句:
$ ./bin/hbase-daemon.sh start master
日志如下:
2012-02-01 15:39:42,552 INFO org.apache.hadoop.hbase.metrics: new MBeanInfo
2012-02-01 15:39:42,553 INFO org.apache.hadoop.hbase.metrics: new MBeanInfo
2012-02-01 15:39:42,553 INFO org.apache.hadoop.hbase.master.metrics.MasterMetrics: Initialized
2012-02-01 15:39:42,575 INFO org.apache.hadoop.hbase.master.ActiveMasterManager: Another master is the active master, rac3:60000; waiting to become the next active master
假设集群中已经有了一个master正在运行,执行上述命令将会带来如下情况:新起来的master会等待当前的znode被删除。如果你想要在一个 以自动运行的方式(in an automated fashion )启动多个master并且指定一个特定的机器作为当前master的宿主机。可以使用如下命令:
$ ./bin/hbase-daemon.sh start master --backup
使用 --backup 参数的启动方式,日志信息里多了红色部分:
2012-02-01 15:57:05,413 INFO org.apache.hadoop.hbase.metrics: new MBeanInfo
2012-02-01 15:57:05,413 INFO org.apache.hadoop.hbase.master.metrics.MasterMetrics: Initialized
2012-02-01 15:57:05,414 DEBUG org.apache.hadoop.hbase.master.HMaster: HMaster started in backup mode.Stalling(停转)until master znode is written.##可能意思翻译不准,就是以空闲模式等待当前的master down 机!
2012-02-01 15:57:05,425 INFO org.apache.hadoop.hbase.master.ActiveMasterManager: Another master is the active master, rac1:60000; waiting to become the next active master
使用带--backup 参数启动的master 将会等待特定的master 进程比如: 使用start-hbase.sh 脚本启动的或者不带--backup参数的hbase-daemon.sh start master 命令启动的master 在Zookeeper中创建 /hbase/master znode。一旦特定的master 进程创建znode成功,由于现在集群中已经有了master了,所以那些以--backkup 模式启动的master则会进入一个空闲模式!
总结:
其实两种启动方式的差别是在于对zookeeper上的master 创建的znode 的处理方式和之后进入的状态。start master是等待znode被删除,而start master --backup 是以休眠的方式等待znode 被删除。
------------------------------------------------
目前只研究或者理解到这里,如有错误,请各位朋友指正。。