Cấu hình Prometheus và Grafana để giám sát HBase Metrics
Để giám sát hiệu năng cụm HBase, ta cần triển khai Prometheus để thu thập metrics từ JMX Exporter và Grafana để hiển thị dashboard trực quan.
Bước đầu tiên là cài đặt Prometheus trên một node riêng biệt (thường là Master Node) để giảm tải cho các RegionServer.
Chạy lệnh sau để cài đặt Prometheus phiên bản mới nhất:
sudo apt update && sudo apt install wget -y
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar -xvf prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64
sudo mv . /opt/prometheus
sudo chown -R root:root /opt/prometheus
Kết quả: Prometheus được cài đặt vào thư mục /opt/prometheus.
Cấu hình file prometheus.yml
Chỉnh sửa file cấu hình để Prometheus biết cách scrape metrics từ HBase RegionServer thông qua JMX Exporter.
Đường dẫn file: /opt/prometheus/prometheus.yml
Nội dung file:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'hbase_regionserver'
static_configs:
- targets: ['node1:16000', 'node2:16000', 'node3:16000']
metrics_path: '/metrics'
scheme: http
relabel_configs:
- source_labels: [__address__]
target_label: instance
- source_labels: [__metrics_path__]
target_label: __metrics_path__
replacement: /metrics
Kết quả: Prometheus sẽ quét port 16000 của từng node HBase để lấy metrics.
Cấu hình JMX Exporter trong HBase
HBase cần cấu hình để expose metrics ra port 16000 dưới dạng text cho Prometheus.
Chỉnh sửa file hbase-site.xml trên tất cả các node (Master và RegionServer).
Đường dẫn file: /etc/hbase/conf/hbase-site.xml (hoặc $HBASE_HOME/conf/hbase-site.xml)
Thêm các property sau vào phần :
hbase.metrics.enabled
true
hbase.metrics.type
prometheus
hbase.metrics.port
16000
hbase.metrics.prefix
hbase
Kết quả: Sau khi restart HBase, RegionServer sẽ lắng nghe port 16000.
Triển khai Grafana
Cài đặt Grafana để visualize dữ liệu từ Prometheus.
sudo apt install software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt update
sudo apt install grafana
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
Kết quả: Grafana chạy trên port 3000. Truy cập http://IP_NODE:3000, đăng nhập (admin/admin), thêm datasource Prometheus (URL: http://localhost:9090).
Verify kết quả giám sát
Truy cập http://IP_NODE:9090/targets để thấy trạng thái "UP" của các job HBase.
Trên Grafana, import dashboard HBase bằng ID (ví dụ: ID 1122 hoặc 1133 từ Grafana Labs) để xem biểu đồ RegionServer load, MemStore flush rate, và Compaction delay.
Phân tích log HBase để tìm lỗi phổ biến
Log HBase chứa thông tin chi tiết về hoạt động của RegionServer và Master. Việc phân tích log là kỹ năng sống còn để troubleshooting.
Định vị log file
Log của HBase được lưu trong thư mục logs của thư mục cài đặt HBase hoặc thư mục log của systemd tùy cách deploy.
Đường dẫn mặc định: /var/log/hbase/ hoặc $HBASE_HOME/logs/
Sử dụng lệnh sau để xem log theo thời gian thực của RegionServer trên một node cụ thể:
tail -f /var/log/hbase/hbase-regionserver-*.log | grep -E "(ERROR|WARN|Exception|OutOfMemory)"
Kết quả: Xuất ra các dòng log có chứa lỗi hoặc cảnh báo ngay khi chúng xảy ra.
Phân tích lỗi RegionServer Crash (Zombie Region)
Khi RegionServer bị crash (thường do OOM hoặc GC pause quá lâu), Master sẽ đánh dấu nó là "dead" và gán lại các Region của nó cho các node khác.
Kiểm tra log để tìm nguyên nhân crash:
grep -A 20 "RegionServer.*crashed" /var/log/hbase/hbase-master-*.log
Hoặc tìm dấu hiệu OutOfMemoryError:
grep "java.lang.OutOfMemoryError" /var/log/hbase/hbase-regionserver-*.log
Kết quả: Xác định được nguyên nhân crash (ví dụ: "Java heap space" hoặc "GC overhead limit exceeded").
Xử lý lỗi Split Delay
Split delay xảy ra khi một Region quá lớn, việc phân chia (split) bị chậm, gây tắc nghẽn write.
Log sẽ xuất hiện thông báo "Split region ... took ... ms".
grep "Split region" /var/log/hbase/hbase-regionserver-*.log | grep -E "took [0-9]+ms"
Kết quả: Nếu thấy thời gian split > 5000ms, cần xem xét giảm kích thước Region hoặc tăng cấu hình phân chia.
Verify kết quả phân tích
Sử dụng lệnh HBase Shell để kiểm tra trạng thái các Region đã bị ảnh hưởng:
hbase shell
list
status
Kiểm tra xem có Region nào bị "UNASSIGNED" kéo dài không.
Xử lý các vấn đề về Balancer khi thêm node mới
Khi thêm node mới vào cụm, Balancer của HBase sẽ tự động di chuyển các Region từ các node cũ sang node mới để cân bằng tải. Quá trình này nếu không được kiểm soát có thể gây tắc nghẽn mạng hoặc làm giảm hiệu năng.
Kiểm tra trạng thái Balancer
Vào HBase Shell để kiểm tra xem balancer có đang bật không.
hbase shell
isbalancing
Kết quả: Trả về "true" hoặc "false".
Tắt Balancer tạm thời khi thêm node
Để tránh di chuyển dữ liệu ồ ạt ngay khi node mới vừa join, hãy tắt balancer trước.
hbase shell
disableBalancer
Kết quả: Balancer bị tắt, không có Region nào được di chuyển tự động.
Thêm node mới và kích hoạt lại Balancer
Sau khi đã cấu hình node mới (cài đặt HBase, đồng bộ conf) và restart dịch vụ HBase trên node đó.
Kiểm tra số lượng Region trên mỗi node:
hbase shell
hbase org.apache.hadoop.hbase.master.RegionServerStatus
Khi hệ thống ổn định, bật lại balancer để phân phối đều:
hbase shell
enableBalancer
Kết quả: Master bắt đầu di chuyển Region từ các node quá tải sang node mới.
Xử lý Balancer bị treo (Stuck)
Nếu Balancer chạy nhưng không di chuyển được Region (do Region đang bị lock hoặc lỗi mạng), hãy kiểm tra log Master.
grep "Balancer" /var/log/hbase/hbase-master-*.log | grep -i "stuck\|failed"
Giải pháp: Restart RegionServer gặp vấn đề hoặc dùng lệnh force để kích hoạt lại:
hbase shell
balance
Kết quả: Balancer chạy một lần thủ công để phân phối lại.
Verify kết quả cân bằng
Sử dụng lệnh sau để xem số lượng Region trên từng node, đảm bảo sự chênh lệch không quá lớn:
hbase shell
regionserver_status
Kiểm tra trên web UI của HBase Master (http://IP_MASTER:60010) tại tab "RegionServers" để xem biểu đồ phân bổ Region.
Tối ưu hóa tham số RegionServer (Heap Size, Block Cache)
Tối ưu hóa cấu hình là bước quan trọng nhất để đạt hiệu năng cao. Các tham số chính cần điều chỉnh là Heap Size (JVM) và Block Cache.
Tối ưu Heap Size cho RegionServer
Heap size nên chiếm khoảng 60-70% RAM vật lý, trừ đi bộ nhớ cho Block Cache và OS.
Đường dẫn file: /etc/hbase/conf/hbase-env.sh
Chỉnh sửa biến HBASE_HEAPSIZE:
HBASE_HEAPSIZE="24g"
export HBASE_HEAPSIZE
Đồng thời, cấu hình các tham số Garbage Collector (G1GC) để giảm latency:
HBASE_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8 -XX:G1ReservePercent=10"
export HBASE_OPTS
Kết quả: RegionServer sử dụng 24GB RAM cho Heap và tối ưu hóa việc thu hồi bộ nhớ.
Cấu hình Block Cache
Block Cache giúp tăng tốc đọc bằng cách lưu các block dữ liệu thường xuyên truy cập vào RAM.
Đường dẫn file: /etc/hbase/conf/hbase-site.xml
Thêm hoặc sửa các property sau:
hfile.block.cache.size
0.3
hbase.regionserver.global.memstore.size
0.4
hbase.regionserver.global.memstore.size.lower.limit
0.3
Giải thích:
- hfile.block.cache.size: 30% RAM dành cho Block Cache.
- hbase.regionserver.global.memstore.size: 40% RAM dành cho MemStore (Write buffer).
- lower.limit: Ngưỡng thấp để kích hoạt compaction.
Kết quả: Cân bằng giữa bộ nhớ cho đọc (Block Cache) và ghi (MemStore).
Tối ưu số lượng Region trên mỗi RegionServer
Mỗi RegionServer có giới hạn về số lượng Region mở (file handles) và CPU để xử lý request.
Đường dẫn file: /etc/hbase/conf/hbase-site.xml
hbase.regionserver.handler.count
30
hbase.regionserver.max.regions
1000
Kết quả: Giới hạn số lượng Region trên mỗi node để tránh quá tải, khuyến nghị 500-1000 regions/node tùy CPU.
Verify kết quả tối ưu
Khởi động lại HBase và kiểm tra thông số JVM và Cache:
hbase shell
get_metrics 'regionserver', 'blockCache'
Trên web UI (http://IP_MASTER:60010), kiểm tra tab "Metrics" để xem tỷ lệ Hit/Miss của Block Cache (nên > 80%) và thời gian GC (nên < 200ms).
Chiến lược bảo trì và sao lưu dữ liệu HBase định kỳ
Bảo trì định kỳ bao gồm việc chạy compaction thủ công, xóa dữ liệu không dùng (TTL) và sao lưu dữ liệu ra HDFS/S3.
Cấu hình Compaction chính sách
Compaction hợp nhất các file StoreFile nhỏ thành file lớn hơn để tối ưu đọc.
Đường dẫn file: /etc/hbase/conf/hbase-site.xml
Đảm bảo các tham số sau được cấu hình hợp lý:
hbase.regionserver.compaction.threshold
3
hbase.regionserver.compaction.max.total.size
1073741824
hbase.regionserver.compaction.max.total.size.per.family
536870912
Kết quả: Compaction tự động chạy khi số lượng file đạt 3 hoặc tổng kích thước vượt 1GB.
Thực hiện Major Compaction thủ công
Để dọn dẹp dữ liệu đã xóa (tombstone) và tái sử dụng dung lượng, cần chạy Major Compaction định kỳ (ví dụ: 1 lần/tuần vào giờ thấp điểm).
hbase shell
major_compact 'your_table_name'
Kết quả: Tất cả các file StoreFile của bảng được hợp nhất thành 1 file duy nhất trên mỗi Region.
Sao lưu dữ liệu bằng HBase Snapshot
Snapshot là cách nhanh nhất để sao lưu toàn bộ trạng thái của bảng tại một thời điểm mà không ảnh hưởng hiệu năng ghi.
Tạo snapshot cho một bảng:
hbase shell
snapshot 'backup_table_20241027', 'your_table_name'
Xuất snapshot ra HDFS (dùng công cụ ExportSnapshotTool hoặc HBase Snapshot Export):
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-snapshot 'backup_table_20241027' \
-copy-to 'hdfs://namenode:8020/hbase-backups/backup_table_20241027' \
-mkdirs
Kết quả: Dữ liệu bảng được sao chép vào thư mục HDFS chỉ định.
Khôi phục dữ liệu từ Snapshot
Để khôi phục lại dữ liệu từ backup đã xuất ra HDFS.
hbase org.apache.hadoop.hbase.snapshot.ImportSnapshot \
-snapshot 'backup_table_20241027' \
-node 'hdfs://namenode:8020/hbase-backups/backup_table_20241027' \
-table 'your_table_name_restored' \
-delete-target-on-failure
Kết quả: Bảng mới 'your_table_name_restored' được tạo với dữ liệu từ thời điểm backup.
Xóa dữ liệu cũ (TTL)
Cấu hình Time-To-Live (TTL) cho từng Column Family để tự động xóa dữ liệu cũ.
Trong HBase Shell:
hbase shell
alter 'your_table_name', {NAME => 'cf1', TTL => 604800}
Giải thích: TTL = 604800 giây (7 ngày). Sau 7 ngày, dữ liệu trong cf1 sẽ tự động bị xóa trong quá trình compaction.
Kết quả: Dữ liệu cũ được tự động dọn dẹp, tiết kiệm dung lượng HDFS.
Verify kết quả bảo trì
Kiểm tra danh sách các snapshot hiện có:
hbase shell
list_snapshots
Kiểm tra dung lượng sử dụng của bảng sau khi compaction:
hbase shell
hfile_info 'your_table_name'
Đảm bảo số lượng file giảm đi đáng kể sau khi chạy major_compact.
Điều hướng series:
Mục lục: Series: Triển khai Database phân tán với Apache HBase trên Ubuntu 24.04
« Phần 7: Bảo mật HBase: Kerberos, ACL và mã hóa dữ liệu