Cài đặt và cấu hình Apache ZooKeeper cho Druid Cluster
Apache Druid sử dụng ZooKeeper để quản lý sự đồng bộ hóa trạng thái (state) giữa các thành phần trong cluster. Bạn cần cài đặt ZooKeeper trên tất cả các node, nhưng ở bước này chúng ta sẽ cấu hình trên node đầu tiên (leader) để làm mẫu.
Tải và cài đặt ZooKeeper từ source
Tải bản phân phối Apache ZooKeeper phiên bản 3.8.x (tương thích tốt nhất với Druid hiện tại) và giải nén vào thư mục /opt.
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz
tar -xzf apache-zookeeper-3.8.0-bin.tar.gz
mv apache-zookeeper-3.8.0-bin zookeeper
Kết quả mong đợi: Thư mục /opt/zookeeper được tạo thành công.
Cấu hình file zoo.cfg cho Cluster 3 Node
File cấu hình chính của ZooKeeper nằm trong thư mục config. Bạn cần chỉnh sửa để định nghĩa 3 node tham gia vào cluster, bao gồm node hiện tại và 2 node còn lại (giả sử tên host là druid-zk1, druid-zk2, druid-zk3).
Đường dẫn file: /opt/zookeeper/conf/zoo.cfg
Nội dung hoàn chỉnh của file:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper/data
clientPort=2181
adminServerPort=8080
4lw.commands.whitelist=*
server.1=druid-zk1:2888:3888
server.2=druid-zk2:2888:3888
server.3=druid-zk3:2888:3888
Kết quả mong đợi: File zoo.cfg đã được ghi đè với cấu hình 3 node, các cổng 2888 dùng để giao tiếp giữa các server, 3888 dùng để bầu chọn leader.
Tạo thư mục dữ liệu và file myid
ZooKeeper cần một thư mục để lưu trữ dữ liệu (dataDir) và một file đặc biệt chứa ID của node hiện tại (myid). ID này phải khớp với số thứ tự trong dòng server.N trong file zoo.cfg.
Trên node druid-zk1 (ID = 1), thực hiện các lệnh sau:
mkdir -p /var/lib/zookeeper/data
echo "1" > /var/lib/zookeeper/data/myid
chown -R zookeeper:zookeeper /var/lib/zookeeper/data
chmod 750 /var/lib/zookeeper/data
Kết quả mong đợi: Thư mục dữ liệu được tạo và file myid chứa giá trị "1". Quyền sở hữu thuộc về user zookeeper (bạn cần tạo user này nếu chưa có: `useradd -r -s /bin/false zookeeper`).
Khởi động ZooKeeper
Sử dụng script start.sh có sẵn trong package để khởi động service. Chạy lệnh này trên node druid-zk1.
cd /opt/zookeeper/bin
./zkServer.sh start
Kết quả mong đợi: Xuất hiện thông báo "ZooKeeper JMX enabled by default" và "Starting zookeeper... STARTED".
Verify ZooKeeper Cluster
Kiểm tra trạng thái của ZooKeeper để đảm bảo nó đã sẵn sàng và đang chạy đúng mode.
./zkServer.sh status
Kết quả mong đợi: Xuất hiện dòng "Mode: standalone" (nếu chạy 1 node) hoặc "Mode: leader/follower" khi cả 3 node đã chạy. Trên node 1 đầu tiên, bạn sẽ thấy "Mode: leader".
Cấu hình HDFS làm Storage Backend cho Druid
Druid cần một hệ thống lưu trữ để chứa các file dữ liệu thô (raw data) và các segment đã được nén. Trong môi trường production, HDFS là lựa chọn phổ biến. Ở đây chúng ta sẽ giả lập một cụm HDFS đơn giản trên cùng node hoặc cluster đã chuẩn bị.
Cài đặt Hadoop HDFS
Tải và cài đặt Hadoop để có các component HDFS. Chúng ta sẽ dùng phiên bản Hadoop 3.3.x để đảm bảo tương thích.
cd /opt
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
tar -xzf hadoop-3.3.4.tar.gz
mv hadoop-3.3.4 hadoop
Kết quả mong đợi: Thư mục /opt/hadoop được tạo.
Cấu hình core-site.xml và hdfs-site.xml
Bạn cần cấu hình hai file chính trong thư mục conf của Hadoop để định nghĩa nơi lưu trữ và cổng giao tiếp.
1. Cấu hình core-site.xml để chỉ định hệ thống file mặc định là HDFS.
Đường dẫn: /opt/hadoop/etc/hadoop/core-site.xml
Nội dung:
fs.defaultFS
hdfs://druid-namenode:9000
hadoop.tmp.dir
/var/lib/hadoop/tmp
2. Cấu hình hdfs-site.xml để định nghĩa replica và cổng của NameNode/DataNode.
Đường dẫn: /opt/hadoop/etc/hadoop/hdfs-site.xml
Nội dung:
dfs.replication
1
dfs.namenode.name.dir
/var/lib/hadoop/hdfs/name
dfs.datanode.data.dir
/var/lib/hadoop/hdfs/data
Kết quả mong đợi: Các file cấu hình được ghi đè thành công.
Format và Khởi động HDFS
Trước khi khởi động, bạn phải format NameNode. Lưu ý: Chỉ format một lần khi mới cài đặt. Sau đó khởi động NameNode và DataNode.
cd /opt/hadoop/sbin
hdfs namenode -format -force
hdfs --daemon start namenode
hdfs --daemon start datanode
Kết quả mong đợi: Lệnh format hiển thị "Formatting complete". Các tiến trình NameNode và DataNode bắt đầu chạy.
Verify HDFS và Tạo thư mục cho Druid
Kiểm tra xem HDFS đã hoạt động bằng cách liệt kê thư mục gốc và tạo thư mục chứa dữ liệu cho Druid.
hdfs dfs -ls /
hdfs dfs -mkdir /druid
hdfs dfs -mkdir /druid/ingestion
hdfs dfs -chmod -R 777 /druid
Kết quả mong đợi: Danh sách thư mục xuất hiện và thư mục /druid được tạo thành công.
Tổng kết cấu hình cho Druid
Bây giờ bạn đã có ZooKeeper đang chạy trên cụm 3 node và HDFS đang hoạt động để lưu trữ dữ liệu. Các thành phần của Druid (Coordinator, Historical, Broker, Indexer) sẽ cần kết nối đến ZooKeeper (port 2181) và HDFS (port 9000) để hoạt động.
Để đảm bảo kết nối từ Druid sang HDFS, hãy kiểm tra xem user chạy Druid có quyền truy cập vào thư mục /druid trên HDFS hay không bằng lệnh:
hdfs dfs -ls -R /druid
Kết quả mong đợi: Bạn thấy được các thư mục con của /druid mà không bị lỗi "Permission denied".
Điều hướng series:
Mục lục: Series: Triển khai Database OLAP với Apache Druid trên Ubuntu 24.04
« Phần 3: Xây dựng và cài đặt Apache Druid từ nguồn code
Phần 5: Cấu hình các thành phần chính: Coordinator, Broker và Historical »