HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行。
所以这里要配置HBase高可用的话,只需要启动两个HMaster,让Zookeeper自己去选择一个Master Acitve。
HBase配置:
在$HBASE_HOME/conf目录下
1.hbase-site.xml
export HBASE_OPTS="$HBASE_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode"export JAVA_HOME=/usr/java/jdk1.7.0_60 export HBASE_MANAGES_ZK=falseexport HADOOP_HOME=/data/hadoop-2.6.0export HBASE_LOG_DIR=/data/hadoop/hbase/logs
一个分布式运行的Hbase依赖一个zookeeper集群。所有的节点和客户端都必须能够访问zookeeper。默认的情况下Hbase会管理一个zookeep集群。这个集群会随着Hbase的启动而启动。当然,你也可以自己管理一个zookeeper集群,但需要配置Hbase。你需要修改HBASE_MANAGES_ZK 来切换。这个值默认是true的,作用是让Hbase启动的时候同时也启动zookeeper.
让Hbase使用一个现有的不被Hbase托管的Zookeep集群,需要设置 HBASE_MANAGES_ZK 属性为 false
2.hbase-site.xml
hbase.rootdir hdfs://appcluster/hbase The directory shared by RegionServers. hbase.master 60000 hbase.zookeeper.quorum hadoop001,hadoop002,hadoop003 hbase.zookeeper.property.clientPort 2181 hbase.zookeeper.property.dataDir /data/hadoop/zookeeper hbase.cluster.distributed true hbase.tmp.dir /data/hadoop/hbase/tmp
3.regionservers
添加regionserver的hostname
HBase启动:
在hadoop001上输入启动命令
start-hbase.sh
jps可见:
master (因为之前启动了Hadoop HA,所以会看到很多进程)
23703 NameNode23968 ResourceManager24132 DFSZKFailoverController23813 DataNode24857 HRegionServer24723 HMaster23428 QuorumPeerMain23522 JournalNode25448 Jps24070 NodeManager
regionserver
9832 HRegionServer8923 QuorumPeerMain9379 NodeManager10495 Jps9197 DataNode9622 ResourceManager9006 JournalNode10436 NameNode9552 DFSZKFailoverController
在某regionserver上启动Hmaster
hbase-daemon.sh start master
jps:
9832 HRegionServer8923 QuorumPeerMain9379 NodeManager10495 Jps9197 DataNode9622 ResourceManager9006 JournalNode10005 HMaster10436 NameNode9552 DFSZKFailoverController
这个时候就可以看到HMaster启动了。
如何区分哪个是Active哪个是standby呢,看log
hbase的log中可以看到
2015-08-07 14:00:14,765 INFO [hadoop002:60000.activeMasterManager] master.ActiveMasterManager: Another master is the active master, hadoop001,60000,1438927191790; waiting to become the next active master
这样就可以判断哪台是Active了