HBase集群管理 #
一、集群规划 #
1.1 集群架构规划 #
text
┌─────────────────────────────────────────────────────────────────────┐
│ HBase 集群架构规划 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ ZooKeeper 集群 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ ZK 1 │ │ ZK 2 │ │ ZK 3 │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ HBase Master │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Master │ │ Backup │ │ │
│ │ │ (Active) │ │ Master │ │ │
│ │ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ RegionServer 集群 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ RS 1 │ │ RS 2 │ │ RS 3 │ │ RS 4 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ HDFS 集群 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ DN 1 │ │ DN 2 │ │ DN 3 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
1.2 节点规划 #
| 节点类型 | 数量 | 配置建议 |
|---|---|---|
| ZooKeeper | 3+ (奇数) | 4核8GB |
| Master | 2 | 8核16GB |
| RegionServer | 3+ | 16核64GB+ |
| HDFS NameNode | 2 | 8核16GB |
| HDFS DataNode | 3+ | 与RegionServer同节点 |
1.3 硬件配置建议 #
text
RegionServer配置建议
├── CPU
│ └── 16-32核
│
├── 内存
│ ├── 64-128GB
│ ├── MemStore: 40%
│ ├── BlockCache: 40%
│ └── 其他: 20%
│
├── 磁盘
│ ├── 12-24块磁盘
│ ├── 单盘1-4TB
│ └── JBOD模式
│
└── 网络
└── 万兆网卡
二、容量规划 #
2.1 数据量估算 #
text
数据量估算公式
├── 原始数据量
│ └── 原始数据大小
│
├── HBase存储
│ └── 原始数据 × 1.5(索引、元数据开销)
│
├── 压缩后
│ └── HBase存储 / 压缩比
│
├── HDFS副本
│ └── 压缩后 × 3(默认3副本)
│
└── 总存储需求
└── HDFS副本 × 1.2(预留20%)
2.2 RegionServer数量估算 #
text
RegionServer数量估算
├── 基于数据量
│ └── RS数量 = 总数据量 / 单RS存储量
│
├── 基于吞吐量
│ └── RS数量 = 总吞吐量 / 单RS吞吐量
│
└── 建议值
└── 单RS存储10-20TB
2.3 Region数量估算 #
text
Region数量估算
├── 单个Region大小
│ └── 建议10-20GB
│
├── Region数量
│ └── 总数据量 / 单Region大小
│
└── 单RS Region数
└── 建议100-200个
三、部署配置 #
3.1 核心配置 #
xml
<!-- hbase-site.xml -->
<!-- 基础配置 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://mycluster/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>zk1,zk2,zk3</value>
</property>
<!-- RegionServer配置 -->
<property>
<name>hbase.regionserver.handler.count</name>
<value>50</value>
</property>
<property>
<name>hbase.regionserver.global.memstore.size</name>
<value>0.4</value>
</property>
<property>
<name>hfile.block.cache.size</name>
<value>0.4</value>
</property>
<!-- Region配置 -->
<property>
<name>hbase.hregion.max.filesize</name>
<value>10737418240</value> <!-- 10GB -->
</property>
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value> <!-- 128MB -->
</property>
3.2 内存配置 #
bash
# hbase-env.sh
# RegionServer内存
export HBASE_REGIONSERVER_OPTS="-Xmx32g -Xms32g -XX:NewSize=8g -XX:MaxNewSize=8g"
# Master内存
export HBASE_MASTER_OPTS="-Xmx4g -Xms4g"
# GC配置
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=50"
3.3 文件句柄配置 #
bash
# /etc/security/limits.conf
hdfs - nofile 65536
hbase - nofile 65536
# 验证
ulimit -n
四、集群部署 #
4.1 部署步骤 #
bash
# 1. 安装依赖
# - JDK 8/11
# - Hadoop
# - ZooKeeper
# 2. 解压安装
tar -zxvf hbase-2.4.11-bin.tar.gz -C /opt/
# 3. 配置环境变量
export HBASE_HOME=/opt/hbase
export PATH=$PATH:$HBASE_HOME/bin
# 4. 修改配置
vi $HBASE_HOME/conf/hbase-site.xml
vi $HBASE_HOME/conf/hbase-env.sh
vi $HBASE_HOME/conf/regionservers
# 5. 同步配置
scp -r $HBASE_HOME/conf/* node2:$HBASE_HOME/conf/
scp -r $HBASE_HOME/conf/* node3:$HBASE_HOME/conf/
# 6. 启动集群
start-hbase.sh
# 7. 验证
jps
# 应看到 HMaster, HRegionServer
4.2 regionservers配置 #
text
# conf/regionservers
node2
node3
node4
node5
4.3 backup-masters配置 #
text
# conf/backup-masters
node2
五、集群运维 #
5.1 启动停止 #
bash
# 启动集群
start-hbase.sh
# 停止集群
stop-hbase.sh
# 滚动重启
graceful_stop.sh --restart --reload node3
5.2 服务管理 #
bash
# 启动Master
hbase-daemon.sh start master
# 停止Master
hbase-daemon.sh stop master
# 启动RegionServer
hbase-daemon.sh start regionserver
# 停止RegionServer
hbase-daemon.sh stop regionserver
5.3 RegionServer上下线 #
ruby
# 下线RegionServer(优雅停止)
# 1. 停止负载均衡
balance_switch false
# 2. 移动Region
move 'region_encoded', 'target_server'
# 3. 停止RegionServer
hbase-daemon.sh stop regionserver
# 上线RegionServer
hbase-daemon.sh start regionserver
# 恢复负载均衡
balance_switch true
5.4 Region管理 #
ruby
# 查看Region分布
status 'detailed'
# 移动Region
move 'region_encoded', 'server_name'
# 切分Region
split 'table_name', 'split_key'
# 合并Region
merge_region 'region1', 'region2'
# 触发负载均衡
balancer
六、集群扩容 #
6.1 添加RegionServer #
bash
# 1. 安装HBase(新节点)
# 2. 配置环境
# 3. 更新regionservers文件
echo "new_node" >> $HBASE_HOME/conf/regionservers
# 4. 同步配置
scp -r $HBASE_HOME/conf/* new_node:$HBASE_HOME/conf/
# 5. 启动RegionServer
hbase-daemon.sh start regionserver
# 6. 验证
hbase shell
status 'simple'
6.2 添加Master #
bash
# 1. 安装HBase
# 2. 配置backup-masters
echo "new_master" >> $HBASE_HOME/conf/backup-masters
# 3. 启动Master
hbase-daemon.sh start master
# 4. 验证
jps
七、集群缩容 #
7.1 移除RegionServer #
bash
# 1. 停止负载均衡
echo "balance_switch false" | hbase shell
# 2. 优雅停止RegionServer
graceful_stop.sh node_to_remove
# 3. 从regionservers移除
vi $HBASE_HOME/conf/regionservers
# 4. 同步配置
# 5. 恢复负载均衡
echo "balance_switch true" | hbase shell
八、集群监控 #
8.1 Web UI #
text
Web UI地址
├── Master UI
│ └── http://master:16010
│
└── RegionServer UI
└── http://regionserver:16030
8.2 关键指标 #
text
关键监控指标
├── Master
│ ├── Region分配状态
│ ├── 负载均衡状态
│ └── 请求队列长度
│
├── RegionServer
│ ├── 请求数/秒
│ ├── 内存使用率
│ ├── Compaction队列长度
│ ├── Flush队列长度
│ └── Region数量
│
└── HDFS
├── 磁盘使用率
└── 数据块健康状态
8.3 JMX监控 #
bash
# 启用JMX
export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10102"
九、故障处理 #
9.1 Master故障 #
bash
# Master故障恢复
# 1. Backup Master自动接管
# 2. 检查ZooKeeper状态
zkCli.sh
ls /hbase/master
# 3. 手动启动Master
hbase-daemon.sh start master
9.2 RegionServer故障 #
bash
# RegionServer故障恢复
# 1. Master检测到故障
# 2. Region重新分配
# 3. WAL重放恢复数据
# 检查日志
tail -f /opt/hbase/logs/hbase-hbase-regionserver-*.log
9.3 ZooKeeper故障 #
bash
# ZooKeeper故障
# 1. 检查ZooKeeper状态
zkServer.sh status
# 2. 重启ZooKeeper
zkServer.sh restart
十、总结 #
本节介绍了HBase集群管理:
| 内容 | 要点 |
|---|---|
| 集群规划 | 节点规划、硬件配置 |
| 容量规划 | 数据量、RegionServer数量 |
| 部署配置 | 核心配置、内存配置 |
| 集群运维 | 启动停止、Region管理 |
| 扩容缩容 | 添加/移除节点 |
| 监控 | Web UI、JMX |
下一步,让我们学习备份与恢复!
最后更新:2026-03-27