1. Tải và cấu hình file docker-compose.yml
Tải file mẫu từ kho chứa chính thức
Chúng ta cần tải file cấu hình docker-compose.yml phiên bản mới nhất từ kho chứa (repository) của RisingWave trên GitHub. File này định nghĩa toàn bộ các service cần thiết như Frontend, Meta, Compute và Storage.
Thay vì tải về và chỉnh sửa thủ công, chúng ta sẽ sử dụng lệnh curl để lấy file mẫu chính thức, đảm bảo tính tương thích với phiên bản Docker hiện tại.
curl -O https://raw.githubusercontent.com/risingwavelabs/risingwave/main/docker/docker-compose.yml
Kết quả mong đợi: File docker-compose.yml được tạo ra trong thư mục hiện tại, không báo lỗi kết nối.
Chỉnh sửa file cấu hình cho môi trường thực tế
File mẫu mặc định thường sử dụng các biến môi trường phức tạp hoặc cấu hình cho môi trường phát triển. Chúng ta cần đơn giản hóa để dễ triển khai trên Ubuntu 24.04, bao gồm việc bật tính năng compaction và định nghĩa rõ ràng các volumes.
Thay thế toàn bộ nội dung file docker-compose.yml bằng cấu hình tối ưu dưới đây. Cấu hình này sử dụng phiên bản Docker image chính thức, định nghĩa mạng riêng risingwave-net và gắn volume lưu trữ vào thư mục /var/lib/risingwave.
version: "3.8"
services:
risingwave-frontend:
image: risingwavelabs/risingwave:latest
command:
- "frontend"
- "--meta-addr"
- "risingwave-meta:5690"
- "--advertise-addr"
- "0.0.0.0:4566"
ports:
- "4566:4566"
depends_on:
risingwave-meta:
condition: service_healthy
networks:
- risingwave-net
risingwave-meta:
image: risingwavelabs/risingwave:latest
command:
- "meta-node"
- "--advertise-addr"
- "risingwave-meta:5690"
- "--etlas-addr"
- "risingwave-meta:5691"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5690/health"]
interval: 10s
timeout: 5s
retries: 5
networks:
- risingwave-net
risingwave-compute:
image: risingwavelabs/risingwave:latest
command:
- "compute-node"
- "--meta-addr"
- "risingwave-meta:5690"
- "--listen-addr"
- "0.0.0.0:5688"
- "--advertise-addr"
- "risingwave-compute:5688"
depends_on:
risingwave-meta:
condition: service_healthy
networks:
- risingwave-net
risingwave-storage:
image: risingwavelabs/risingwave:latest
command:
- "storage-node"
- "--meta-addr"
- "risingwave-meta:5690"
- "--listen-addr"
- "0.0.0.0:5689"
- "--advertise-addr"
- "risingwave-storage:5689"
depends_on:
risingwave-meta:
condition: service_healthy
networks:
- risingwave-net
risingwave-compactor:
image: risingwavelabs/risingwave:latest
command:
- "compactor"
- "--meta-addr"
- "risingwave-meta:5690"
- "--listen-addr"
- "0.0.0.0:6660"
- "--advertise-addr"
- "risingwave-compactor:6660"
depends_on:
risingwave-meta:
condition: service_healthy
networks:
- risingwave-net
risingwave-hummock:
image: risingwavelabs/risingwave:latest
command:
- "hummock"
- "--meta-addr"
- "risingwave-meta:5690"
- "--listen-addr"
- "0.0.0.0:6661"
- "--advertise-addr"
- "risingwave-hummock:6661"
depends_on:
risingwave-meta:
condition: service_healthy
networks:
- risingwave-net
networks:
risingwave-net:
driver: bridge
volumes:
meta-data:
hummock-data:
compaction-data:
Kết quả mong đợi: File docker-compose.yml đã được ghi đè với cấu hình đầy đủ 6 service (frontend, meta, compute, storage, compactor, hummock) và định nghĩa volumes.
2. Cấu hình biến môi trường (Environment Variables)
Tạo file .env cho biến động
RisingWave yêu cầu một số biến môi trường để định cấu hình hành vi của các node, đặc biệt là đường dẫn lưu trữ Hummock và các thông số hiệu năng. Thay vì hardcode trong docker-compose.yml, chúng ta sẽ tạo file .env để dễ dàng thay đổi mà không cần chỉnh sửa file chính.
File này sẽ chứa các biến quan trọng như RW_STORAGE_HUMMOCK_DATA_DIR để chỉ định nơi lưu trữ dữ liệu vật lý, giúp tách biệt dữ liệu khỏi container lifecycle.
cat > .env
Kết quả mong đợi: File .env được tạo thành công trong thư mục hiện hành.
Tích hợp biến môi trường vào Docker Compose
Để Docker Compose nhận diện và truyền các biến này vào container, chúng ta cần khai báo env_file trong file docker-compose.yml. Điều này đảm bảo khi container khởi động, các biến môi trường đã sẵn sàng cho RisingWave.
Chỉnh sửa file docker-compose.yml bằng cách thêm dòng env_file: - .env vào từng service (frontend, meta, compute, storage, compactor, hummock). Dưới đây là đoạn code mẫu cho service risingwave-meta và risingwave-compute để bạn tham khảo cách chèn vào file chính.
sed -i '/risingwave-meta:/,/risingwave-compute:/{
/command:/i\ env_file:\n - .env
}' docker-compose.yml
sed -i '/risingwave-compute:/,/risingwave-storage:/{
/command:/i\ env_file:\n - .env
}' docker-compose.yml
sed -i '/risingwave-storage:/,/risingwave-compactor:/{
/command:/i\ env_file:\n - .env
}' docker-compose.yml
sed -i '/risingwave-compactor:/,/risingwave-hummock:/{
/command:/i\ env_file:\n - .env
}' docker-compose.yml
sed -i '/risingwave-hummock:/,/networks:/{
/command:/i\ env_file:\n - .env
}' docker-compose.yml
Kết quả mong đợi: File docker-compose.yml đã được cập nhật, mỗi service đều có mục env_file trỏ về .env.
3. Định nghĩa mạng (Network) và Lưu trữ (Volumes)
Cấu hình mạng riêng cho cụm RisingWave
Trong file docker-compose.yml đã tạo ở phần 1, chúng ta đã định nghĩa mạng risingwave-net với driver bridge. Việc này cực kỳ quan trọng vì các service của RisingWave cần giao tiếp với nhau qua các hostname (ví dụ: risingwave-meta:5690).
Mạng riêng này đảm bảo an toàn và tách biệt lưu lượng nội bộ của RisingWave khỏi mạng host hoặc các container khác không liên quan. Docker Compose sẽ tự động tạo mạng này khi lệnh up được thực thi, không cần tạo thủ công trước.
Áp dụng Volume lưu trữ bền vững
RisingWave là hệ thống stateful, dữ liệu không thể mất khi container bị dừng. Chúng ta cần gắn các volume của Docker vào các thư mục cụ thể trên host. Trong file docker-compose.yml phần volumes đã khai báo 3 volume: meta-data, hummock-data, compaction-data.
Tuy nhiên, để dữ liệu được lưu vào thư mục cố định /var/lib/risingwave trên Ubuntu 24.04 (như yêu cầu trong phần 1), chúng ta cần ánh xạ (mount) các volume này vào các thư mục tương ứng trên host. Chỉnh sửa phần volumes trong file docker-compose.yml để thêm đường dẫn host.
mkdir -p /var/lib/risingwave/{meta,hummock,compaction}
# Chỉnh sửa file docker-compose.yml để map volume
sed -i 's/meta-data:/meta-data:\n driver: local\n driver_opts:\n type: none\n o: bind\n device: \/var\/lib\/risingwave\/meta/' docker-compose.yml
sed -i 's/hummock-data:/hummock-data:\n driver: local\n driver_opts:\n type: none\n o: bind\n device: \/var\/lib\/risingwave\/hummock/' docker-compose.yml
sed -i 's/compaction-data:/compaction-data:\n driver: local\n driver_opts:\n type: none\n o: bind\n device: \/var\/lib\/risingwave\/compaction/' docker-compose.yml
Kết quả mong đợi: Các volume trong file docker-compose.yml đã được cấu hình để trỏ vào thư mục /var/lib/risingwave trên host, đảm bảo dữ liệu tồn tại sau khi xóa container.
Verify cấu hình trước khi khởi động
Trước khi chạy lệnh docker compose up, chúng ta cần xác nhận file cấu hình không có lỗi cú pháp và các đường dẫn volume tồn tại.
docker compose config
ls -la /var/lib/risingwave/
Kết quả mong đợi: Lệnh docker compose config in ra toàn bộ cấu hình đã merge (bao gồm biến môi trường từ .env) mà không báo lỗi. Lệnh ls hiển thị 3 thư mục con meta, hummock, compaction đã được tạo sẵn.
Điều hướng series:
Mục lục: Series: Triển khai Database Serverless với RisingWave trên Ubuntu 24.04
« Phần 1: Chuẩn bị môi trường Ubuntu 24.04 và cài đặt các công cụ cần thiết
Phần 3: Khởi động cụm RisingWave và kiểm tra trạng thái các node »