Cấu hình và quản lý cụm Zookeeper

1. Nguyên lý hoạt động của Zookeeper

Zookeeper là một dự án mã nguồn mở của Apache, cung cấp dịch vụ điều phối cho các hệ thống phân tán.

1.1 Cơ chế hoạt động

Zookeeper hoạt động theo mô hình quan sát viên (observer pattern), quản lý dữ liệu chung và thông báo thay đổi đến các client đã đăng ký. Cấu trúc cơ bản gồm: Hệ thống tệp + cơ chế thông báo.

1.2 Đặc điểm chính

  • Cấu trúc cụm gồm 1 Leader và nhiều Follower
  • Chỉ cần hơn nửa số nút hoạt động để cụm hoạt động
  • Dữ liệu đồng bộ toàn cục trên tất cả nút
  • Thực thi yêu cầu cập nhật theo thứ tự FIFO
  • Cập nhật nguyên tử: thành công hoặc thất bại hoàn toàn
  • Độ tươi dữ liệu đảm bảo trong khoảng thời gian nhất định

1.3 Cấu trúc dữ liệu

Hệ thống sử dụng mô hình cây phân cấp, mỗi nút (znode) có thể chứa tối đa 1MB dữ liệu và được xác định duy nhất qua đường dẫn.

1.4 Ứng dụng thực tế

  • Dịch vụ đặt tên thống nhất: Thay thế IP bằng tên miền dễ nhớ
  • Quản lý cấu hình tập trung: Đồng bộ hóa cấu hình giữa các nút
  • Giám sát cụm: Theo dõi trạng thái thực tế của các nút
  • Tự động phát hiện nút: Cập nhật trạng thái server lên/down
  • Cân bằng tải mềm: Phân phối yêu cầu dựa trên số lượng kết nối

1.5 Cơ chế bầu chọn Leader

1.5.1 Khởi tạo cụm lần đầu

  1. Nút 1 khởi động, tự đề cử mình
  2. Nút 2 khởi động, so sánh myid và thay đổi phiếu bầu
  3. Nút 3 khởi động, đạt số phiếu vượt quá bán số
  4. Các nút tiếp theo nhận kết quả bầu chọn

1.5.2 Quy tắc bầu chọn

  1. Epoch lớn hơn thắng
  2. Cùng Epoch: ZXID lớn hơn thắng
  3. Cùng ZXID: Server ID lớn hơn thắng

2. Triển khai cụm Zookeeper

2.1 Môi trường thực nghiệm

Tên máy chủĐịa chỉ IP
zookeeper01192.168.10.17
zookeeper02192.168.10.21
zookeeper03192.168.10.22

2.2 Chuẩn bị hệ thống


# Tắt tường lửa
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

# Cài đặt JDK
yum install -y java-1.8.0-openjdk-devel
java -version

2.3 Cài đặt Zookeeper


# Tải về và giải nén
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7

# Cấu hình
cd /usr/local/zookeeper-3.5.7/conf/
cp zoo_sample.cfg zoo.cfg

vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.5.7/data
dataLogDir=/usr/local/zookeeper-3.5.7/logs
clientPort=2181

# Cấu hình cụm
server.1=192.168.10.17:3188:3288
server.2=192.168.10.21:3188:3288
server.3=192.168.10.22:3188:3288

Tạo thư mục lưu trữ và tệp myid:


mkdir /usr/local/zookeeper-3.5.7/data
mkdir /usr/local/zookeeper-3.5.7/logs
echo 1 > /usr/local/zookeeper-3.5.7/data/myid
echo 2 > /usr/local/zookeeper-3.5.7/data/myid
echo 3 > /usr/local/zookeeper-3.5.7/data/myid

2.4 Tạo script khởi động


vim /etc/init.d/zookeeper
#!/bin/bash
ZK_HOME='/usr/local/zookeeper-3.5.7'
case $1 in
start)
$ZK_HOME/bin/zkServer.sh start
;;
stop)
$ZK_HOME/bin/zkServer.sh stop
;;
restart)
$ZK_HOME/bin/zkServer.sh restart
;;
status)
$ZK_HOME/bin/zkServer.sh status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
esac

Kích hoạt khởi động cùng hệ thống:


chmod +x /etc/init.d/zookeeper
chkconfig --add zookeeper
service zookeeper start

Thẻ: zookeeper DistributedSystems ClusterManagement ElectionAlgorithm

Đăng vào ngày 29 tháng 6 lúc 17:57