ZooKeeper và Etcd: Cài đặt, Cấu hình và Sử dụng Cơ bản

ZooKeeper sử dụng cấu trúc cây để lưu trữ dữ liệu dưới dạng key-value, phù hợp với các ứng dụng yêu cầu tính nhất quán cao (CP – Consistent & Partition-tolerant), chấp nhận đánh đổi tính khả dụng trong một số tình huống như quá trình bầu chọn leader, khi dịch vụ có thể tạm thời unavailable.

Việc cài đặt ZooKeeper không yêu cầu phụ thuộc bên ngoài do được viết bằng Java. Người dùng có thể sao chép file cấu hình mẫu zoo-sample.cfg thành zoo.cfg, sau đó chỉ định lại tham số dataDir – mặc định là /tmp/zookeeper, nơi dễ bị xóa khi khởi động lại máy.startDate] Để khởi động hoặc tắt server, lần lượt thực thi:

./zkServer.sh start
./zkServer.sh stop

ZooKeeper hỗ trợ hai chế độ chạy: standalone (đơn nút – thích hợp cho phát triển và học tập) và cluster (nhóm nút). Trong chế độ cluster, cần cấu hình danh sách các nút trong file zoo.cfg, dạng:

server.1=bigdata-pro01.kfk.com:2888:3888
server.2=bigdata-pro02.kfk.com:2888:3888
server.3=bigdata-pro03.kfk.com:2888:3888

Trong đó, số sau server. chính là ID của nút, được ghi vào file myid nằm trong thư mục dataDir. Ví dụ, với server.2, file myid trong thư mục dataDir phải chứa nội dung là duy nhất 2.

Một đặc điểm nổi bật là cơ chế Watcher – theo dõi sự kiện thay đổi trên ZNode. Khi dữ liệu thay đổi, các client đã đăng ký sẽ được nhắc nhở tự động. Để đơn giản hóa việc tương tác, thư viện ZooKeeper Kit (Curator) được Netflix phát triển và trở thành tiêu chuẩn. Package org.apache.curator.framework.recipes.cache cung cấp ba kiểu cache lắng nghe:

  • NodeCache: theo dõi thay đổi tại một node cụ thể
  • PathChildrenCache: theo dõi trực tiếp con của một node
  • TreeCache: theo dõi toàn bộ cây con dưới node gốc

Các tính năng như replica, đồng bộ dữ liệu, kiểm tra sống (heartbeat), và cơ chế bầu chọn leader được trình bày chi tiết trong nhiều bài viết chuyên sâu.

Khi tích hợp ZooKeeper vào Spring Boot, cần đặc biệt lưu ý vấn đề tương thích version – đây là nguyên nhân phổ biến gây lỗi biên dịch ở giai đoạn phát triển.

Về Etcd, quá trình cài đặt trên Linux có thể thực hiện mà không có file cấu hình mặc định. Khi chạy etcd, hệ thống sẽ tự động tạo thư mục default.etcd tại vị trí hiện tại chứa trạng thái persist, điều này gây khó khăn trong quản lý nếu chạy ở nhiều thư mục khác nhau. Để cấu hình rõ ràng, người dùng nên định nghĩa file cấu hình dạng JSON (hoặc YAML trong phiên bản mới) và chỉ định tham số --config-file khi khởi động, ví dụ:

etcd --config-file=/etc/etcd/etcd.conf.yml

Việc quản lý dịch vụ bằng systemd yêu cầu file unit etcd.service được đặt tại /etc/systemd/system/etcd.service. Lệnh systemctl start etcd chỉ hoạt động khi file unit đã tồn tại và hợp lệ.

Một lỗi thường gặp khi khởi động là failed at step CHDIR, xuất hiện khi thư mục chỉ định bởi data-dir chưa được tạo sẵn. Khác với ZooKeeper tự tạo thư mục, Etcd yêu cầu người dùng chủ động chỉ định và tạo thư mục lưu trữ trước khi khởi chạy.

Note: Việc chọn ZooKeeper hay Etcd phụ thuộc vào ngữ cảnh sử dụng (ví dụ: hệ sinh thái Dubbo thường gắn với ZooKeeper, trong khi Kubernetes ưa chuộng Etcd), nhưng cả hai đều phục vụ mục tiêu cốt lõi là lưu trữ metadata phân tán với độ tin cậy cao.

Thẻ: zookeeper Etcd Distributed-System service-discovery Configuration-Managment

Đăng vào ngày 28 tháng 5 lúc 18:43