1. Kiểm tra và chuẩn bị cấu hình phần cứng tối thiểu
Bước đầu tiên là xác nhận tài nguyên vật lý của server đáp ứng ngưỡng tối thiểu để chạy Apache Druid. Druid là hệ thống xử lý dữ liệu lớn (Big Data), yêu cầu RAM và I/O disk cao hơn các database quan hệ truyền thống. Thiếu RAM sẽ gây ra OOM (Out Of Memory), thiếu I/O sẽ làm chậm quá trình ingestion (nạp dữ liệu).
Chúng ta cần kiểm tra số lượng nhân CPU, tổng dung lượng RAM và loại ổ cứng (SSD/NVMe là bắt buộc cho node Historical và Indexer). Ubuntu 24.04 có thể chưa có kernel module tối ưu cho một số ổ cứng cũ, do đó cần xác định rõ loại disk trước.
Thực hiện lệnh kiểm tra CPU và RAM:
lscpu | grep "Model name" && free -h
Kết quả mong đợi: Hiển thị tên dòng CPU (ví dụ: Intel Xeon hoặc AMD EPYC) và tổng RAM (Total) phải đạt ít nhất 16GB cho môi trường dev/test, 32GB+ cho production. Swap partition không được dùng để chạy Druid vì sẽ làm hệ thống treo (swap thrashing).
Thực hiện lệnh kiểm tra loại ổ cứng và dung lượng:
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT && sudo fdisk -l | grep -E "Disk |Sector size"
Kết quả mong đợi: Bạn phải thấy ổ cứng loại "disk" với kích thước lớn (ví dụ: 100G+). Quan trọng nhất là dòng "TYPE" hoặc thông tin từ fdisk phải xác nhận đây là SSD hoặc NVMe. Nếu thấy HDD cơ học, cần nâng cấp ngay vì Druid sẽ không thể đáp ứng yêu cầu truy vấn thực thời gian (Real-time).
Yêu cầu tối thiểu cho từng thành phần:
- Coordinator/Broker: 4 vCPU, 16GB RAM, 50GB SSD (chủ yếu chạy logic điều phối, ít dùng disk).
- Historical: 8 vCPU, 32GB RAM, 500GB+ NVMe/SSD (chứa toàn bộ dữ liệu cold, cần IOPS cao).
- Indexer: 8 vCPU, 32GB RAM, 200GB SSD (cần RAM lớn để nén dữ liệu trong bộ nhớ khi ingest).
Với môi trường Single Node (tất cả trên 1 máy) để test, cấu hình tối thiểu là 16 vCPU, 64GB RAM, 500GB NVMe.
2. Nâng cấp và cập nhật Ubuntu 24.04 lên phiên bản ổn định nhất
Ubuntu 24.04 (Noble Numbat) mới được phát hành, cần đảm bảo tất cả các gói phần mềm hệ thống đã được cập nhật lên patch mới nhất để tránh các lỗi bảo mật và tương thích với Java 17 hoặc các thư viện C++ mà Druid phụ thuộc.
Thực hiện lệnh cập nhật nguồn và nâng cấp toàn bộ hệ thống:
sudo apt update && sudo apt upgrade -y
Kết quả mong đợi: Quá trình chạy qua danh sách các gói cần nâng cấp (Packages to upgrade). Bạn sẽ thấy thông báo "Processing triggers..." và "0 upgraded, 0 newly installed" nếu hệ thống đã mới nhất, hoặc một số gói cụ thể được nâng cấp. Không được phép xuất hiện lỗi "unmet dependencies".
Thực hiện lệnh cài đặt các gói tiện ích cần thiết cho việc quản trị server và gỡ bỏ các gói không cần thiết để giảm diện tích bề mặt tấn công:
sudo apt install -y vim net-tools htop sysstat build-essential curl wget git jq
Kết quả mong đợi: Các gói tiện ích như `vim` (chỉnh sửa file), `net-tools` (lệnh ifconfig/netstat), `htop` (giám sát tài nguyên), `jq` (xử lý JSON cấu hình Druid) được cài đặt thành công. Không có thông báo lỗi.
Để đảm bảo kernel mới nhất (nếu có security patch sau khi cài OS), thực hiện nâng cấp kernel riêng biệt:
sudo apt install --install-recommends linux-generic-hwe-24.04 -y
Kết quả mong đợi: Hệ thống cài đặt kernel HWE (Hardware Enablement) mới nhất. Sau lệnh này, bạn nên khởi động lại máy để áp dụng kernel mới, nhưng trước đó cần cấu hình firewall để tránh mất quyền truy cập.
3. Cấu hình Firewall và quản lý quyền Root/Sudo
Apache Druid hoạt động dựa trên một cụm các tiến trình giao tiếp qua TCP. Nếu firewall chặn các cổng, các node sẽ không thể phát hiện nhau (Discovery) hoặc Client không thể truy vấn được. Ubuntu 24.04 mặc định sử dụng `ufw` (Uncomplicated Firewall).
Trước khi bật firewall, cần cấu hình các rule cho phép traffic. Druid sử dụng các cổng mặc định sau (cần mở cho cả TCP):
- 8081: Coordinator (API và Web Console).
- 8082: Broker (API và Web Console).
- 8083: Historical (Truy vấn dữ liệu).
- 8088: Indexer (Ingestion tasks).
- 2181: ZooKeeper (Điều phối cluster - nếu chạy cùng).
- 2881, 3881: ZooKeeper (Leader election).
Thực hiện lệnh bật UFW và cấu hình các rule cho phép truy cập từ mạng nội bộ (hoặc từ IP của bạn nếu cần truy cập remote):
sudo ufw default deny incoming && sudo ufw default allow outgoing && sudo ufw allow 22/tcp && sudo ufw allow 8081/tcp && sudo ufw allow 8082/tcp && sudo ufw allow 8083/tcp && sudo ufw allow 8088/tcp && sudo ufw allow 2181/tcp && sudo ufw allow 2881/tcp && sudo ufw allow 3881/tcp && sudo ufw enable
Kết quả mong đợi: Thông báo "Firewall is active and enabled on system startup". Các rule được thêm vào danh sách cho phép. Lưu ý: Khi bật `enable`, nếu bạn đang SSH từ remote, hệ thống sẽ yêu cầu xác nhận. Hãy nhập `y` để tiếp tục. Nếu không nhập, kết nối SSH sẽ bị cắt.
Để kiểm tra lại các rule đã được áp dụng chính xác:
sudo ufw status verbose
Kết quả mong đợi: Dòng "Status: active", "Default: deny (incoming), allow (outgoing)". Các dòng "ALLOW" hiển thị đúng các cổng đã cấu hình ở trên.
Quản lý quyền Sudo: Druid cần quyền truy cập vào thư mục dữ liệu và khởi động service. Chúng ta sẽ tạo một user dedicated hoặc dùng user hiện tại với quyền sudo không cần mật khẩu cho các lệnh tự động (trong script deployment), nhưng ở bước này chỉ cần đảm bảo user hiện tại có quyền sudo đầy đủ.
Thực hiện lệnh kiểm tra quyền sudo của user hiện tại:
sudo -v && groups $USER
Kết quả mong đợi: Lệnh `sudo -v` không yêu cầu nhập mật khẩu (nếu đã nhập gần đây) hoặc yêu cầu nhập 1 lần duy nhất để "warm up" cache. Dòng `groups` phải hiển thị user đang nằm trong group `sudo` (ví dụ: `username : adm sudo cdrom...`). Nếu không có `sudo` trong danh sách, cần thêm user vào group:
sudo usermod -aG sudo $USER
Kết quả mong đợi: User được thêm vào group sudo. Cần đăng xuất và đăng nhập lại (hoặc chạy `newgrp sudo`) để quyền mới có hiệu lực.
4. Xác minh môi trường đã sẵn sàng (Verification)
Trước khi chuyển sang Phần 2 (Cài đặt Java), cần chạy một script kiểm tra tổng hợp để đảm bảo tất cả các bước trên đã hoàn thành và không có xung đột.
Thực hiện lệnh kiểm tra tổng thể:
echo "=== System Check ===" && uname -r && echo "=== Disk Type ===" && lsblk -d -o TYPE,NAME | grep -E "NAME" && echo "=== Firewall Status ===" && sudo ufw status | head -n 5 && echo "=== Sudo Access ===" && sudo -n true && echo "OK"
Kết quả mong đợi:
- Hiển thị phiên bản kernel mới nhất (ví dụ: 6.8.0-generic).
- Đường dẫn disk phải xác nhận là SSD/NVMe (thường là type "disk" nhưng cần đối chiếu với bước 1).
- Firewall status phải là "active" với các cổng 8081-8088, 2181 được liệt kê.
- Lệnh cuối cùng in ra "OK" mà không có lỗi "user is not in the sudoers file".
Nếu tất cả các dòng trên xuất hiện chính xác và không có lỗi, môi trường Ubuntu 24.04 đã sẵn sàng cho việc cài đặt Java 17 và Apache Maven trong phần tiếp theo.
Đ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 2: Cài đặt Java 17 và Apache Maven trên Ubuntu 24.04 »