在 Ubuntu 上实现 HBase 高可用的关键思路
- 使用外部 ZooKeeper 集群(≥3 台,奇数) 管理集群元数据与会话,避免单点。
- 部署 多个 HMaster(Active/Standby),通过 ZooKeeper 自动选主,避免 HMaster 单点。
- 将 HBase 表数据落在 HDFS 上,并保证 HDFS NameNode 高可用(如 QJM/HA),否则 HBase 仍会受 HDFS 单点影响。
- 规划开放端口并保障节点间网络互通,便于故障转移与运维监控。
架构与端口规划
- 建议组件与节点分布:
- ZooKeeper:3 台(如 zk1/zk2/zk3,端口 2181)
- HMaster:2 台(如 master1/master2,端口 16000 RPC、16010 Web UI)
- RegionServer:≥2 台(端口 16020)
- HDFS NameNode:2 台(HA),DataNode:≥2 台
- 网络与防火墙:开放 22/2181/16000/16010/16020 等必要端口,或临时关闭防火墙用于测试。
部署步骤
-
前置准备
- 安装 JDK 1.8+,配置 JAVA_HOME;所有节点配置 SSH 免密登录(主节点可免密登录各节点)。
- 部署并验证 HDFS HA(fs.defaultFS、JournalNode/ZKFC 等已正确配置并能正常启动)。
- 部署并验证 ZooKeeper 集群(奇数台,myid 与 server.x 一致,集群状态正常)。
-
安装与分发 HBase
- 下载解压 HBase(如 2.4.x/2.5.x)至 /usr/local/hbase,配置环境变量:
- export HBASE_HOME=/usr/local/hbase
- export PATH=$PATH:$HBASE_HOME/bin
- 将 HBase 目录与环境变量分发到所有节点。
-
关键配置($HBASE_HOME/conf)
- hbase-env.sh
- 设置 JAVA_HOME
- 设置 HBASE_MANAGES_ZK=false(使用外部 ZK)
- 可选:调整 HBASE_HEAPSIZE、GC 参数、日志/PID 目录
- hbase-site.xml(示例)
- 启用分布式:hbase.cluster.distributed=true
- 指定 HDFS:hbase.rootdir=hdfs://<nameservice_or_nn_host>:8020/hbase(与 Hadoop core-site.xml 的 fs.defaultFS 一致)
- 指定 ZK:hbase.zookeeper.quorum=zk1,zk2,zk3
- 指定 ZK 数据目录:hbase.zookeeper.property.dataDir=/var/lib/zookeeper
- 集群清单
- regionservers:列出所有 RegionServer 主机名
- backup-masters(新建):列出 备用 Master 主机名(如 master2)
-
启动与验证
- 启动顺序:HDFS → ZooKeeper → HBase
- start-dfs.sh(确保 NameNode/DataNode、ZKFC 正常)
- 每台 ZK 节点:zkServer.sh start
- 在 HBase Master 节点:start-hbase.sh
- 验证
- jps:Master 节点可见 HMaster(备用节点也会出现 HMaster),RegionServer 节点可见 HRegionServer
- Web UI:访问 http://:16010,查看 Master/RegionServer 列表与集群健康
- HBase Shell:status ‘simple’ 或 status 查看集群状态
验证高可用与常见故障排查
- 自动故障转移验证
- 在 Active Master 上 kill HMaster 进程,观察 Standby Master 是否在 数秒至数十秒 内自动切换为 Active(Web UI 与 Shell 状态同步变化)。
- 常见问题
- 节点间无法互通或端口未放行:检查 /etc/hosts、DNS、UFW/iptables,确保 2181/16000/16010/16020 可达。
- HBase 无法连接 HDFS:确认 hbase.rootdir 与 Hadoop fs.defaultFS 一致,HDFS 处于 安全模式 之外,NameNode HA 已生效。
- ZK 不一致:核对 zoo.cfg 的 server.x 与每台 myid,确保 Quorum 多数派存活(Leader/Follower 正常)。
- 权限问题:HBase 目录与数据目录(如 /usr/local/hbase、HDFS /hbase、ZK 数据目录)属主/权限正确,建议使用 统一专用用户 部署。