Khởi tạo Cluster Databend bằng Docker Compose
Chúng ta sẽ sử dụng Docker Compose để triển khai toàn bộ stack Databend bao gồm Frontend, Storage, và Metastore trên một node Ubuntu 24.04. Cách này giúp đồng bộ các container và quản lý mạng nội bộ tự động.
Trước tiên, cần tạo thư mục làm việc để chứa file cấu hình và dữ liệu lưu trữ.
mkdir -p ~/databend-cluster && cd ~/databend-cluster
Kết quả mong đợi: Bạn đang ở trong thư mục ~/databend-cluster, nơi sẽ chứa toàn bộ tài liệu cấu hình.
Tiếp theo, tạo file docker-compose.yml với nội dung cấu hình đầy đủ cho 3 dịch vụ chính: metastore (Tiệm lưu trữ metadata), storage (Tiệm lưu trữ dữ liệu), và frontend (Tiệm xử lý query). File này sử dụng phiên bản Docker Compose 3.8 để tương thích tốt với các dịch vụ.
cat > docker-compose.yml
Kết quả mong đợi: File docker-compose.yml được tạo thành công với cấu hình kết nối mạng nội bộ và mount volume dữ liệu.
Tạo các thư mục lưu trữ dữ liệu (volumes) trước khi khởi động container để tránh lỗi quyền truy cập (permission denied).
mkdir -p data/metastore data/storage && chmod -R 777 data
Kết quả mong đợi: Các thư mục dữ liệu được tạo và cấp quyền ghi đầy đủ cho Docker.
Khởi động toàn bộ cluster ở chế độ nền (detached mode) và theo dõi log khởi tạo.
docker-compose up -d
Kết quả mong đợi: Docker trả về thông báo "Created databend-metastore", "Created databend-storage", "Created databend-frontend" và các container chuyển sang trạng thái "Running".
Để verify kết quả, kiểm tra xem tất cả 3 container đã chạy ổn định chưa.
docker-compose ps
Kết quả mong đợi: Bảng hiển thị 3 dịch vụ đều có trạng thái là "Up".
Cấu hình biến môi trường và Backend Lưu trữ
Mặc định trong file docker-compose.yml trên, chúng ta đã cấu hình Databend sử dụng Metastore và Storage nội bộ qua mạng Docker bridge. Tuy nhiên, để chuẩn hóa và mở rộng, cần kiểm tra và tinh chỉnh các biến môi trường trong file cấu hình.
Trong môi trường production hoặc khi muốn sử dụng S3/MinIO thay vì local storage, bạn cần chỉnh sửa phần `environment` của service `frontend` trong file `docker-compose.yml`. Dưới đây là nội dung file đã được cập nhật để đảm bảo tính linh hoạt (ví dụ: chỉ định rõ các biến cấu hình).
Thay thế toàn bộ nội dung file `docker-compose.yml` bằng nội dung dưới đây để đảm bảo cấu hình chuẩn xác cho bài hướng dẫn này (bao gồm cả các tham số debug nếu cần).
cat > docker-compose.yml
Kết quả mong đợi: File cấu hình được cập nhật, thêm cổng 9000 (gRPC/MySQL protocol) và healthcheck cho frontend.
Tải lại cấu hình để áp dụng các thay đổi mới vào cluster đang chạy.
docker-compose down && docker-compose up -d
Kết quả mong đợi: Cluster được dừng và khởi động lại với cấu hình mới, bao gồm thêm cổng 9000.
Verify biến môi trường đã được áp dụng đúng bằng cách kiểm tra biến bên trong container frontend.
docker exec databend-frontend env | grep DATABEND
Kết quả mong đợi: Xuất ra các dòng biến môi trường như `DATABEND_METASTORE_URI=http://metastore:5000` và `DATABEND_STORAGE_URI=http://storage:8080`.
Kiểm tra trạng thái các dịch vụ (Coordinator, Frontend, Storage)
Sau khi cluster đã chạy, cần xác nhận từng thành phần trong kiến trúc Cloud Native của Databend đã hoạt động bình thường. Chúng ta sẽ kiểm tra log khởi động và trạng thái sẵn sàng (ready state) của từng service.
Kiểm tra log của Metastore để đảm bảo dịch vụ này đã sẵn sàng nhận kết nối. Metastore là nơi lưu trữ catalog (table, schema) nên phải chạy trước.
docker logs databend-metastore --tail 20
Kết quả mong đợi: Xuất hiện dòng log "Metastore started" hoặc "Listening on 0.0.0.0:5000", không có lỗi Fatal.
Kiểm tra log của Storage để đảm bảo backend lưu trữ dữ liệu đã khởi động.
docker logs databend-storage --tail 20
Kết quả mong đợi: Xuất hiện dòng log "Storage server started" hoặc "Listening on 0.0.0.0:8080".
Kiểm tra log của Frontend (Coordinator) để xác nhận nó đã kết nối thành công với Metastore và Storage. Đây là bước quan trọng nhất vì Frontend đóng vai trò điều phối.
docker logs databend-frontend --tail 30
Kết quả mong đợi: Xuất hiện các dòng log "Frontend started", "Connected to metastore", "Connected to storage", và "Listening on 0.0.0.0:8000".
Sử dụng công cụ Databend CLI (databend-sql) để thực hiện truy vấn kiểm tra sức khỏe hệ thống. Nếu CLI chưa cài đặt, ta có thể dùng curl để gọi API healthcheck hoặc dùng MySQL client.
Cách 1: Sử dụng curl để gọi API kiểm tra trạng thái của Frontend.
curl -s http://localhost:8000/api/v1/status | jq .
Kết quả mong đợi: Trả về JSON chứa `"status": "healthy"` hoặc `"state": "Ready"`.
Cách 2: Sử dụng MySQL Client (nếu đã cài đặt mysql-client trên Ubuntu) để kết nối và chạy lệnh `SELECT version();`.
mysql -h localhost -P 9000 -u root -p -e "SELECT version();"
Kết quả mong đợi: Xuất hiện phiên bản Databend (ví dụ: "Databend Server version 1.x.x"). Nếu yêu cầu password, hãy nhập (mặc định là trống nếu chưa cấu hình bảo mật).
Để verify toàn diện, kiểm tra xem Frontend có thể tạo và đọc database mới không.
docker exec databend-frontend databend-sql -u root -e "CREATE DATABASE IF NOT EXISTS test_db; SHOW DATABASES; DROP DATABASE test_db;"
Kết quả mong đợi: Lệnh chạy thành công, hiển thị database `test_db` trong danh sách, sau đó xóa sạch.
Cấu hình Firewall và mở cổng kết nối
Trên Ubuntu 24.04, UFW (Uncomplicated Firewall) thường được mặc định bật hoặc có sẵn. Cần cấu hình UFW để cho phép truy cập từ bên ngoài vào các cổng dịch vụ của Databend mà không làm gián đoạn các container đang chạy.
Kiểm tra trạng thái hiện tại của UFW.
sudo ufw status verbose
Kết quả mong đợi: Hiển thị trạng thái "active" hoặc "inactive". Nếu là "inactive", hãy bật nó lên.
Bật UFW nếu nó đang tắt và thiết lập chính sách mặc định (cho phép nội bộ, từ chối bên ngoài).
sudo ufw enable
Kết quả mong đợi: UFW được kích hoạt, có thể yêu cầu xác nhận (nhấn 'y').
Mở cổng HTTP (8000) dùng cho REST API và giao diện Web UI (nếu có).
sudo ufw allow 8000/tcp
Kết quả mong đợi: Thông báo "Rule added" cho cổng 8000.
Mở cổng MySQL/Protocol (9000) dùng cho các client SQL như DBeaver, MySQL CLI, hoặc ứng dụng RAG.
sudo ufw allow 9000/tcp
Kết quả mong đợi: Thông báo "Rule added" cho cổng 9000.
Mở cổng Metastore (5000) và Storage (8080) chỉ khi cần truy cập trực tiếp từ bên ngoài (thường chỉ cần mở cho internal network, nhưng ở đây ta mở để test).
sudo ufw allow 5000/tcp && sudo ufw allow 8080/tcp
Kết quả mong đợi: Thông báo "Rule added" cho cả hai cổng.
Cập nhật và kiểm tra lại danh sách các rule đã thêm.
sudo ufw status numbered
Kết quả mong đợi: Hiển thị danh sách các rule với trạng thái "ALLOW" cho các cổng 5000, 8000, 8080, 9000.
Verify khả năng kết nối từ bên ngoài (hoặc từ cùng máy) qua các cổng đã mở bằng lệnh telnet hoặc nc.
nc -zv localhost 9000
Kết quả mong đợi: Xuất hiện dòng "succeeded! command='nc'" hoặc "Connection to localhost 9000 port [tcp/mysql] succeeded!".
Thực hiện kết nối cuối cùng để đảm bảo firewall không chặn request SQL.
mysql -h localhost -P 9000 -u root -p -e "SELECT 1 as connection_test;"
Kết quả mong đợi: Trả về bảng kết quả với giá trị 1, xác nhận đường truyền qua firewall đã thông suốt.
Điều hướng series:
Mục lục: Series: Triển khai Database AI-native với Databend 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: Cấu hình bảo mật và quản lý người dùng »