Tổng quan kiến trúc LiteFS và cơ chế đồng bộ hóa
LiteFS là một hệ thống file system (FUSE) được thiết kế đặc biệt để đồng bộ hóa cơ sở dữ liệu SQLite giữa các node Edge.
Khác với các giải pháp replication truyền thống dựa trên binlog hoặc snapshot, LiteFS hoạt động bằng cách chuyển đổi SQLite journal (WAL) thành các log sự kiện và truyền chúng qua mạng.
Quá trình này đảm bảo tính nhất quán (consistency) theo mô hình Primary-Replica, nơi chỉ có một Primary node ghi dữ liệu, còn các Replica node nhận và áp dụng các thay đổi đó theo trình tự.
Cơ chế hoạt động dựa trên giao thức TCP/TLS, cho phép LiteFS hoạt động như một overlay file system, mount vào một thư mục cụ thể trên server.
Ứng dụng của bạn vẫn truy cập SQLite file như bình thường, nhưng LiteFS sẽ can thiệp ở mức độ kernel để bắt các write operation và đồng bộ chúng.
Tải và cài đặt binary LiteFS từ GitHub
Bước đầu tiên là tải binary của LiteFS từ kho lưu trữ chính thức của dự án trên GitHub.
Chúng ta sẽ sử dụng phiên bản stable mới nhất (v0.3.11 tại thời điểm viết bài) để đảm bảo tính ổn định cho Ubuntu 24.04 (amd64).
Thao tác này sẽ tải file nén, giải nén và đặt binary vào thư mục system bin để có thể chạy trực tiếp từ terminal.
Thực thi lệnh tải và cài đặt:
cd /tmp && curl -LO https://github.com/superfly/litefs/releases/download/v0.3.11/litefs-v0.3.11-linux-amd64.tar.gz && tar -xzf litefs-v0.3.11-linux-amd64.tar.gz && mv litefs-v0.3.11-linux-amd64/litefs /usr/local/bin/ && rm -rf /tmp/litefs-v0.3.11* && chmod +x /usr/local/bin/litefs
Kết quả mong đợi: Không có lỗi báo về từ terminal, binary `litefs` đã sẵn sàng trong PATH.
Verify kết quả bằng cách kiểm tra phiên bản:
litefs --version
Kết quả mong đợi: Xuất hiện dòng thông tin phiên bản, ví dụ: `litefs version 0.3.11`.
Cấu hình systemd service cho LiteFS
Để LiteFS chạy tự động khi server khởi động và quản lý vòng đời (start/stop/restart), chúng ta cần tạo một unit file cho systemd.
File cấu hình này sẽ định nghĩa user chạy service, đường dẫn mount point, và các tham số khởi động cần thiết.
Tạo file unit với tên `litefs.service` trong thư mục `/etc/systemd/system/`.
Đường dẫn file: `/etc/systemd/system/litefs.service`
Nội dung file hoàn chỉnh:
[Unit]
Description=LiteFS Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/bin/litefs mount --primary /var/lib/litefs --config /etc/litefs/config.yml
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Kết quả mong đợi: File được tạo thành công, không có lỗi cú pháp.
Lưu ý: Cấu hình này giả định bạn sẽ tạo file `config.yml` và thư mục mount `/var/lib/litefs` trong các bước sau. Hiện tại file này chỉ là khung sườn để systemd nhận diện service.
Tải lại cấu hình của systemd để nhận diện service mới:
systemctl daemon-reload
Kết quả mong đợi: Không có thông báo lỗi, lệnh chạy im lặng.
Chuẩn bị thư mục và kiểm tra trạng thái
Trước khi khởi động service, chúng ta cần tạo thư mục đích để LiteFS mount vào. Nếu thư mục này không tồn tại, service sẽ khởi động lỗi.
Thư mục tiêu chuẩn được khuyến nghị là `/var/lib/litefs`.
Tạo thư mục và cấp quyền (nên chạy dưới user root hoặc user chạy ứng dụng):
mkdir -p /var/lib/litefs && chown root:root /var/lib/litefs
Kết quả mong đợi: Thư mục được tạo, quyền sở hữu là root.
Bước tiếp theo là tạo một file cấu hình giả (dummy) để service có thể khởi động thành công mà không bị lỗi "file not found".
Đường dẫn file: `/etc/litefs/config.yml`
Nội dung file hoàn chỉnh (cấu hình mặc định an toàn):
[litefs]
primary = true
replica = false
Kết quả mong đợi: File cấu hình được tạo tại `/etc/litefs/config.yml`.
Khởi động service LiteFS:
systemctl start litefs
Kết quả mong đợi: Service bắt đầu chạy, không báo lỗi tức thời.
Thiết lập service tự động khởi động cùng hệ điều hành:
systemctl enable litefs
Kết quả mong đợi: Xuất hiện thông báo `Created symlink ...`.
Kiểm tra trạng thái hoạt động của LiteFS:
systemctl status litefs
Kết quả mong đợi: Dòng đầu tiên hiển thị `Active: active (running)`, màu xanh lá cây, và không có dòng `Failed`.
Verify xem LiteFS đã mount thành công vào thư mục chưa:
mount | grep litefs
Kết quả mong đợi: Xuất hiện một dòng chứa `type fuse.litefs` và đường dẫn `/var/lib/litefs`.
Điều hướng series:
Mục lục: Series: Triển khai Database Edge với LiteFS và Ubuntu 24.04
« Phần 1: Chuẩn bị môi trường Ubuntu 24.04 và công cụ cần thiết
Phần 3: Cấu hình LiteFS cho chế độ Primary (Master) »