Khởi tạo thư mục dữ liệu và cấu trúc file hệ thống
Bước đầu tiên là tạo không gian lưu trữ vật lý cho LiteFS quản lý. Chúng ta cần một thư mục riêng biệt để chứa journal (log giao dịch), snapshot (bản chụp dữ liệu) và các file metadata.
Việc tách biệt thư mục dữ liệu khỏi thư mục mặc định của SQLite giúp LiteFS quản lý hiệu quả hơn và dễ dàng backup sau này. Thư mục này sẽ đóng vai trò là "nguồn gốc" (source of truth) cho toàn bộ cụm.
Kết quả mong đợi: Thư mục /var/lib/litefs được tạo với quyền sở hữu thuộc về user litefs (hoặc user hiện tại nếu chưa tạo user riêng) để đảm bảo an ninh.
sudo mkdir -p /var/lib/litefs
sudo chown -R litefs:litefs /var/lib/litefs
ls -ld /var/lib/litefs
Cấu hình file litefs.yml cho chế độ Primary
File cấu hình chính litefs.yml xác định vai trò của node này là Primary (Master). Trong file này, chúng ta khai báo đường dẫn đến thư mục dữ liệu và định nghĩa database SQLite mặc định mà LiteFS sẽ quản lý.
Phần primary trong cấu hình là bắt buộc cho node Master. Nó chỉ ra rằng node này có quyền ghi (Write) và sẽ là nguồn phát tán dữ liệu cho các node Replication khác. Database được khai báo ở đây sẽ tự động được tạo nếu chưa tồn tại.
Kết quả mong đợi: File /etc/litefs/litefs.yml được tạo thành công, chứa cấu hình đúng chuẩn YAML cho chế độ Primary, sẵn sàng để LiteFS đọc khi khởi động.
sudo tee /etc/litefs/litefs.yml
Thiết lập Port đồng bộ hóa và danh sách Node Replication
Node Primary cần mở cổng HTTP (mặc định là 8080) để phục vụ các yêu cầu đồng bộ hóa từ các node Replication (Edge Nodes). Cấu hình nodes trong phần primary là nơi bạn sẽ liệt kê địa chỉ IP của các node Edge trong tương lai.
Hiện tại, chúng ta cấu hình http://localhost:8080 để LiteFS tự kiểm tra tính nhất quán nội bộ (self-replication check) hoặc để test giao diện. Khi triển khai thực tế, bạn sẽ thay thế bằng IP thật của các node Edge hoặc giữ nguyên nếu các node Edge biết connect vào IP của Primary.
Kết quả mong đợi: LiteFS hiểu rõ nó là Master, biết lắng nghe trên cổng 8080 và sẵn sàng chấp nhận kết nối từ các node con được liệt kê trong mảng nodes.
# Cập nhật lại cấu hình nếu cần thêm IP thật của các node Edge
# Ví dụ: nodes: - http://192.168.1.50:8080 - http://192.168.1.51:8080
sudo systemctl restart litefs
sudo systemctl status litefs --no-pager
Kiểm tra dữ liệu trên Primary và xác nhận chế độ Read-Write
Để xác nhận Primary đang hoạt động đúng, chúng ta cần thực hiện thao tác ghi (INSERT) trực tiếp vào database SQLite. Nếu LiteFS cấu hình đúng, lệnh này sẽ thành công và dữ liệu sẽ được ghi vào journal của LiteFS ngay lập tức.
Sau khi ghi, ta cần đọc lại dữ liệu để đảm bảo tính nhất quán. Quan trọng hơn, ta sẽ kiểm tra trạng thái của LiteFS qua API HTTP để xác nhận node này đang ở trạng thái primary và có dữ liệu.
Kết quả mong đợi: Lệnh SQL INSERT chạy thành công không lỗi, dữ liệu xuất hiện khi SELECT, và API trả về status primary cùng với thông tin snapshot đã tạo.
# 1. Tạo bảng và ghi dữ liệu thử nghiệm
sudo litefs sqlite /var/lib/litefs/app --exec "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT); INSERT INTO users (name) VALUES ('Admin');"
# 2. Đọc lại dữ liệu để xác nhận
sudo litefs sqlite /var/lib/litefs/app --exec "SELECT * FROM users;"
# 3. Kiểm tra trạng thái qua API HTTP của LiteFS
curl -s http://localhost:8080/v1/status | jq '.'
# 4. Kiểm tra xem file journal đã được tạo chưa
ls -l /var/lib/litefs/app/
Điều hướng series:
Mục lục: Series: Triển khai Database Edge với LiteFS và Ubuntu 24.04
« Phần 2: Giới thiệu kiến trúc LiteFS và cài đặt LiteFS
Phần 4: Triển khai LiteFS cho chế độ Replication (Edge Nodes) »