1. Kiểm tra yêu cầu phần cứng tối thiểu
Materialize là hệ thống stream-processing dựa trên PostgreSQL, đòi hỏi tài nguyên đáng kể để chạy các toán tử và lưu trữ state.
Yêu cầu tối thiểu để triển khai môi trường phát triển hoặc staging là: CPU 4 core, RAM 8GB, và Disk 50GB (SSD bắt buộc).
Để kiểm tra nhanh cấu hình máy chủ Ubuntu 24.04 hiện tại, thực thi các lệnh sau:
lscpu | grep "Core(s)"
Kết quả mong đợi: Dòng đầu tiên hiển thị tổng số core logic, ví dụ "Core(s) per socket: 4".
free -h
Kết quả mong đợi: Cột "total" ở dòng "Mem" phải lớn hơn hoặc bằng 8G.
df -h /
Kết quả mong đợi: Cột "Avail" phải lớn hơn 50G và loại hệ thống tập tin (Filesystem) phải là SSD (kiểm tra bằng `lsblk -o NAME,TYPE`).
2. Cài đặt Docker Engine và Docker Compose
Ubuntu 24.04 có thể cài Docker qua repository mặc định, nhưng để đảm bảo tính tương thích với Materialize, chúng ta cần cài đặt phiên bản Docker Engine mới nhất từ repository chính thức của Docker.
Bước 1: Cập nhật hệ thống và cài đặt các gói phụ thuộc cần thiết.
sudo apt update && sudo apt install -y ca-certificates curl gnupg lsb-release
Kết quả mong đợi: Không có lỗi (error) và các gói đã được cài đặt thành công.
Bước 2: Thêm key GPG của Docker vào hệ thống.
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Kết quả mong đợi: File key được tạo và phân quyền đọc cho tất cả user.
Bước 3: Thêm repository Docker vào nguồn apt.
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Kết quả mong đợi: File cấu hình nguồn repository được tạo tại `/etc/apt/sources.list.d/docker.list`.
Bước 4: Cài đặt Docker Engine, Docker CLI, Containerd và Docker Compose Plugin.
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Kết quả mong đợi: Các gói Docker được cài đặt, không có cảnh báo lỗi.
Bước 5: Thêm user hiện tại vào nhóm docker để chạy lệnh không cần sudo.
sudo usermod -aG docker $USER
Kết quả mong đợi: Lệnh chạy xong, cần đăng xuất và đăng nhập lại (hoặc chạy `newgrp docker`) để hiệu lực.
Bước 6: Kiểm tra phiên bản Docker và Compose.
docker --version
Kết quả mong đợi: Hiển thị phiên bản Docker Engine, ví dụ "Docker version 27.0.0".
docker compose version
Kết quả mong đợi: Hiển thị phiên bản Docker Compose Plugin, ví dụ "Docker Compose version v2.29.0".
3. Cấu hình User quyền Sudo và Firewall
Để quản lý hệ thống và firewall, user hiện tại cần có quyền sudo. Đồng thời, Materialize cần mở các cổng cụ thể để client kết nối và giao tiếp nội bộ.
Bước 1: Đảm bảo user hiện tại có quyền sudo.
id
Kết quả mong đợi: Xem nhóm của user. Nếu không thấy nhóm `sudo`, thực thi lệnh sau:
sudo usermod -aG sudo $USER
Kết quả mong đợi: User được thêm vào nhóm sudo, cần đăng xuất lại để áp dụng.
Bước 2: Cấu hình UFW (Uncomplicated Firewall) để mở các cổng cần thiết cho Materialize.
Các cổng bắt buộc cho Materialize:
- 6875: Cổng SQL (Frontend) để kết nối từ psql, DBeaver, hoặc ứng dụng.
- 6877: Cổng HTTP (Frontend) cho Dashboard và REST API.
- 6878: Cổng Internal (vCluster) cho giao tiếp giữa các node (cần nếu chạy distributed, nhưng tốt nhất nên mở luôn).
Thực thi lệnh bật UFW và mở các cổng:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 6875/tcp
sudo ufw allow 6877/tcp
sudo ufw allow 6878/tcp
sudo ufw enable
Kết quả mong đợi: Firewall được bật (Status: active) và hiển thị các cổng 22, 6875, 6877, 6878 ở trạng thái ALLOW.
Bước 3: Kiểm tra trạng thái firewall.
sudo ufw status verbose
Kết quả mong đợi: Đầu ra hiển thị "Status: active" và danh sách các cổng đã mở như đã cấu hình.
Bước 4: Tạo file cấu hình giới hạn tài nguyên cho Docker (Tùy chọn nhưng khuyến nghị cho Production).
Tạo file `/etc/docker/daemon.json` để giới hạn số lượng container và cấu hình log để tránh disk bị full.
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json > /dev/null
Kết quả mong đợi: File `/etc/docker/daemon.json` được tạo với nội dung cấu hình log rotation và shared memory.
Bước 5: Khởi động lại Docker để áp dụng cấu hình mới.
sudo systemctl restart docker
Kết quả mong đợi: Service Docker khởi động lại thành công.
Bước 6: Verify toàn bộ môi trường.
docker run --rm hello-world
Kết quả mong đợi: Container chạy thành công, in ra thông báo "Hello from Docker!". Điều này xác nhận Docker Engine hoạt động đúng, firewall không chặn, và quyền sudo đã được cấu hình tốt.
Điều hướng series:
Mục lục: Series: Triển khai Database Stream-native với Materialize trên Ubuntu 24.04
Phần 2: Khởi tạo cụm Materialize với Docker Compose và PostgreSQL »