1. Tải và giải nén Apache ZooKeeper
Tải bản phát hành ổn định nhất của Apache ZooKeeper về thư mục /opt để chuẩn bị cho môi trường production.
Việc tải về /opt giúp tách biệt phần mềm hệ thống với phần mềm ứng dụng, dễ dàng quản lý và nâng cấp sau này.
Sau khi tải xong, bạn giải nén gói archive và đổi tên thư mục để thuận tiện cho việc link mềm (symbolic link).
sudo apt-get update && sudo apt-get install -y wget unzip
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin.tar.gz
tar -xzf apache-zookeeper-3.9.2-bin.tar.gz
rm apache-zookeeper-3.9.2-bin.tar.gz
ln -s apache-zookeeper-3.9.2-bin zookeeper
Kết quả mong đợi: Thư mục /opt/zookeeper được tạo thành công, bên trong chứa các thư mục bin, conf, lib.
2. Cấu hình file zoo.cfg
Sao chép file mẫu cấu hình từ thư mục conf về thư mục chính của ZooKeeper để chỉnh sửa.
File zoo.cfg là nơi định nghĩa hành vi của node ZooKeeper, bao gồm đường dẫn dữ liệu, cổng client và danh sách server trong cụm.
Chỉnh sửa các tham số quan trọng: dataDir (lưu trữ snapshot và transaction log), clientPort (cổng mặc định 2181), tickTime (đơn vị thời gian cơ bản), và initLimit/syncLimit.
cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg
Kết quả mong đợi: File /opt/zookeeper/conf/zoo.cfg được tạo ra từ bản sao.
Sử dụng trình soạn thảo nano để mở file và thay thế nội dung hoàn toàn bằng cấu hình dưới đây (giả sử 1 node đơn hoặc node đầu tiên trong cụm).
Đảm bảo server.1 trỏ về địa chỉ IP hoặc hostname của máy hiện tại và cổng election (3888) cũng như follower (2888) đúng.
dataDir=/var/lib/zookeeper
clientPort=2181
tickTime=2000
initLimit=10
syncLimit=5
server.1=127.0.0.1:2888:3888;participant
Kết quả mong đợi: File /opt/zookeeper/conf/zoo.cfg chứa đúng các tham số đã cấu hình.
3. Tạo thư mục data và đặt quyền sở hữu
Tạo thư mục /var/lib/zookeeper để lưu trữ dữ liệu bền vững (snapshot và transaction log) như đã khai báo trong zoo.cfg.
Thư mục này cần được tạo trước khi khởi động để tránh lỗi "No such file or directory" khi ZooKeeper cố gắng ghi dữ liệu.
Đổi chủ sở hữu thư mục về user hiện tại (hoặc user 'zookeeper' nếu đã tạo user riêng) để đảm bảo tiến trình ZooKeeper có quyền đọc/ghi.
sudo mkdir -p /var/lib/zookeeper
sudo chown -R $USER:$USER /var/lib/zookeeper
Kết quả mong đợi: Thư mục /var/lib/zookeeper tồn tại và thuộc về user hiện tại, hiển thị khi chạy ls -ld.
4. Khởi động và kiểm tra trạng thái ZooKeeper
Khởi động tiến trình ZooKeeper bằng script start.sh nằm trong thư mục bin của gói cài đặt.
ZooKeeper cần thời gian ngắn để khởi tạo các cấu trúc dữ liệu và bắt đầu lắng nghe trên cổng 2181.
Sử dụng lệnh echo để gửi request kiểm tra trạng thái (four letter words) đến ZooKeeper, xác nhận server đang chạy và là Leader hoặc Follower.
cd /opt/zookeeper/bin
./zkServer.sh start
Kết quả mong đợi: Thông báo "ZooKeeper Server started" xuất hiện trên màn hình.
Chạy lệnh kiểm tra trạng thái để xác nhận server đã sẵn sàng và xem các thông số như mode (leader/follower), phiên bản, và số lượng client kết nối.
./zkServer.sh status
Kết quả mong đợi: Xuất hiện dòng "ZooKeeper server: running" cùng với thông tin Mode: leader (hoặc follower) và Client port: 2181.
5. Cấu hình tự động khởi động khi Boot
Tạo file systemd service để tích hợp ZooKeeper vào hệ thống quản lý tiến trình của Ubuntu 24.04.
File này xác định cách systemd khởi động ZooKeeper, đường dẫn đến script, và chính sách tự động restart nếu gặp lỗi.
Sử dụng user root để tạo file này vì systemd cần quyền cao cấp để quản lý tiến trình hệ thống.
sudo nano /etc/systemd/system/zookeeper.service
Thay thế toàn bộ nội dung file bằng cấu hình dưới đây:
[Unit]
Description=Apache ZooKeeper Server
After=network.target
Wants=network-online.target
[Service]
Type=forking
User=root
Group=root
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
ExecReload=/opt/zookeeper/bin/zkServer.sh reload
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Kết quả mong đợi: File /etc/systemd/system/zookeeper.service được lưu thành công.
Tải lại cấu hình systemd, kích hoạt service để tự động chạy khi khởi động máy, và khởi động ngay lập tức để kiểm tra.
sudo systemctl daemon-reload
sudo systemctl enable zookeeper.service
sudo systemctl start zookeeper.service
Kết quả mong đợi: Không có lỗi xuất hiện, lệnh enable tạo symlink trong thư mục multi-user.target.wants.
Kiểm tra trạng thái của service để đảm bảo nó đang chạy (active) và đã được enable.
sudo systemctl status zookeeper.service
Kết quả mong đợi: Dòng đầu tiên hiển thị "● zookeeper.service - Apache ZooKeeper Server" và dòng trạng thái là "active (running)".
Điều hướng series:
Mục lục: Series: Triển khai Database Streaming với Apache Flink và Ubuntu 24.04
« Phần 1: Chuẩn bị môi trường Ubuntu 24.04 và yêu cầu hệ thống
Phần 3: Triển khai Apache Flink Standalone Cluster trên Ubuntu »