Quay lại danh sách
Tin tức công nghệ

Chạy cụm cơ sở dữ liệu phân tán siêu nhẹ rqlite trên 3 VPS cấu hình 1 vCPU để đạt tính sẵn sàng cao (HA)

4 tháng 6, 2026

Giới thiệu về bài toán tính sẵn sàng cao với chi phí tối ưu

Trong kỷ nguyên số hiện nay, tính sẵn sàng cao (High Availability - HA) không còn là đặc quyền riêng của các tập đoàn lớn với ngân sách công nghệ thông tin khổng lồ. Mọi ứng dụng doanh nghiệp, từ hệ thống quản lý nội bộ đến các dịch vụ SaaS sơ khai, đều đòi hỏi khả năng hoạt động liên tục, không bị gián đoạn ngay cả khi một phần hạ tầng gặp sự cố.

Tuy nhiên, việc triển khai các cụm cơ sở dữ liệu phân tán truyền thống như MySQL Cluster, PostgreSQL vẹt hoặc các giải pháp NoSQL như Cassandra thường đi kèm với gánh nặng lớn về chi phí phần cứng và độ phức tạp trong vận hành. Các hệ thống này đòi hỏi tài nguyên CPU, RAM đáng kể và đội ngũ kỹ sư có chuyên môn sâu để duy trì. Đối với các doanh nghiệp khởi nghiệp hoặc các dự án có ngân sách hạn chế, đây là một thách thức không nhỏ.

Bài viết này sẽ hướng dẫn bạn một giải pháp thay thế đột phá: xây dựng một cụm cơ sở dữ liệu phân tán có tính sẵn sàng cao hoàn chỉnh bằng cách sử dụng rqlite trên 3 máy chủ ảo (VPS) với cấu hình tối giản chỉ 1 vCPU và 1GB RAM. Đây là minh chứng cho thấy bạn hoàn toàn có thể đạt được kiến trúc phân tán mạnh mẽ mà không cần đầu tư quá nhiều vào hạ tầng.

rqlite là gì và tại sao lại phù hợp với VPS cấu hình thấp?

rqlite là một cơ sở dữ liệu quan hệ phân tán, được xây dựng trên nền tảng của SQLite — động cơ cơ sở dữ liệu siêu nhẹ và phổ biến nhất thế giới. Điểm đặc biệt của rqlite là nó tích hợp giao thức đồng thuận Raft (thông qua ngôn ngữ Go) trực tiếp vào SQLite, biến một cơ sở dữ liệu tệp tin đơn lẻ thành một hệ thống phân tán có khả năng tự phục hồi và đồng bộ hóa dữ liệu giữa nhiều nút (nodes).

Những ưu điểm vượt trội của rqlite bao gồm:

  • Siêu nhẹ (Lightweight): Khác với các hệ quản trị CSDL lớn, rqlite có kích thước tệp thực thi rất nhỏ và tiêu thụ cực kỳ ít tài nguyên. Một VPS 1 vCPU hoàn toàn có thể vận hành rqlite mượt mà bên cạnh các ứng dụng nhẹ khác.
  • Giao thức đồng thuận Raft: Đảm bảo tính nhất quán của dữ liệu (Strong Consistency). Khi một dữ liệu được ghi thành công, nó chắc chắn đã được sao chép sang đa số các nút trong cụm.
  • Giao tiếp qua HTTP/REST API: rqlite cung cấp API chuẩn HTTP, giúp việc tích hợp với bất kỳ ngôn ngữ lập trình nào (Python, Node.js, Go, Java) trở nên vô cùng đơn giản mà không cần driver phức tạp.
  • Dễ vận hành: Không có phụ thuộc bên ngoài (zero dependencies). Bạn chỉ cần một tệp thực thi duy nhất để chạy toàn bộ hệ thống.
Lưu ý quan trọng: rqlite tuân theo định lý CAP với xu hướng ưu tiên tính nhất quán (C) và tính chịu lỗi phân vùng (P). Do đó, nó cực kỳ phù hợp cho các dữ liệu cấu hình, trạng thái hệ thống, hoặc các ứng dụng quản lý giao dịch quy mô vừa và nhỏ.

Kiến trúc hệ thống cụm 3 Nút (3-Node Cluster)

Để đạt được tính sẵn sàng cao và khả năng chịu lỗi theo giao thức Raft, số lượng nút tối thiểu trong một cụm phải là 3. Với cấu hình này, hệ thống có thể chịu đựng được sự cố sập hoàn toàn 1 nút mà không làm gián đoạn dịch vụ (vẫn còn 2/3 nút hoạt động để đạt được đa số phiếu bầu - Quorum).

Trong mô hình thực tế của chúng ta, chúng ta sẽ chuẩn bị 3 VPS riêng biệt, có thể nằm ở các nhà cung cấp hoặc các vùng (Regions) khác nhau để tăng tính an toàn:

  1. Node 1 (Leader/Follower): IP 192.168.1.101
  2. Node 2 (Follower/Leader): IP 192.168.1.102
  3. Node 3 (Follower): IP 192.168.1.103

Mỗi VPS chỉ cần cài đặt hệ điều hành Linux (Ubuntu/Debian) và mở các cổng mạng cần thiết (mặc định là 4001 cho API và 4002 cho giao tiếp nội bộ giữa các nút Raft).

Hướng dẫn từng bước triển khai chi tiết

Bước 1: Chuẩn bị môi trường và tải rqlite

Đăng nhập vào cả 3 VPS thông qua SSH và thực hiện tải xuống phiên bản rqlite mới nhất. Bạn có thể thực hiện lệnh sau trên cả 3 máy:

wget [https://github.com/rqlite/rqlite/releases/download/v8.0.0/rqlite-v8.0.0-linux-amd64.tar.gz](https://github.com/rqlite/rqlite/releases/download/v8.0.0/rqlite-v8.0.0-linux-amd64.tar.gz)
tar -xvf rqlite-v8.0.0-linux-amd64.tar.gz
cd rqlite-v8.0.0-linux-amd64/

Di chuyển các tệp thực thi vào thư mục hệ thống để tiện sử dụng:

sudo cp rqlited rqlite /usr/local/bin/

Bước 2: Khởi chạy Nút đầu tiên (Bootstrap Node)

Trên Node 1 (IP: 192.168.1.101), chúng ta sẽ khởi tạo cụm bằng cách chạy lệnh sau. Nút này sẽ tự động trở thành Leader ban đầu của cụm:

rqlited -node-id node1 \
  -http-addr 192.168.1.101:4001 \
  -raft-addr 192.168.1.101:4002 \
  ~/.rqlite

Trong đó, -node-id là định danh duy nhất, -http-addr là địa chỉ phục vụ API, và -raft-addr là địa chỉ dùng để đồng bộ dữ liệu giữa các máy chủ.

Bước 3: Tham gia các nút tiếp theo vào cụm

Bây giờ, trên Node 2 (IP: 192.168.1.102), hãy chạy lệnh sau để khởi động và yêu cầu gia nhập vào cụm thông qua Node 1:

rqlited -node-id node2 \
  -http-addr 192.168.1.102:4001 \
  -raft-addr 192.168.1.102:4002 \
  -join [http://192.168.1.101:4001](http://192.168.1.101:4001) \
  ~/.rqlite

Tương tự, thực hiện trên Node 3 (IP: 192.168.1.103):

rqlited -node-id node3 \
  -http-addr 192.168.1.103:4001 \
  -raft-addr 192.168.1.103:4002 \
  -join [http://192.168.1.101:4001](http://192.168.1.101:4001) \
  ~/.rqlite

Sau khi lệnh thực thi, hệ thống Raft sẽ tự động thực hiện quá trình bắt tay (handshake), đồng bộ hóa trạng thái ban đầu của SQLite và xác lập cấu hình cụm 3 nút.

Kiểm tra trạng thái và vận hành cụm

Để đảm bảo cụm đã hoạt động chính xác và đạt trạng thái HA, bạn có thể sử dụng công cụ dòng lệnh rqlite đi kèm để kiểm tra hệ thống từ bất kỳ nút nào:

rqlite -h 192.168.1.101:4001

Sau khi vào giao diện tương tác, gõ lệnh .status. Hệ thống sẽ trả về một bảng thông tin chi tiết bao gồm danh sách các nút, nút nào đang đóng vai trò Leader và trạng thái kết nối của các Follower.

Bạn cũng có thể tạo thử một bảng và chèn dữ liệu để kiểm tra tính đồng bộ:

CREATE TABLE doanh_nghiep (id INTEGER NOT NULL PRIMARY KEY, name TEXT);
INSERT INTO doanh_nghiep(name) VALUES("Công ty Công nghệ ABC");

Hãy thử truy vấn dữ liệu này từ Node 2 hoặc Node 3 bằng lệnh SELECT * FROM doanh_nghiep;, bạn sẽ thấy dữ liệu lập tức xuất hiện, chứng minh quá trình sao chép phân tán diễn ra theo thời gian thực với độ trễ cực thấp.

Thử nghiệm kịch bản chịu lỗi (Failover Test)

Để chứng minh tính sẵn sàng cao (HA) của cụm cơ sở dữ liệu siêu nhẹ này, chúng ta hãy thực hiện một bài kiểm tra thực tế: Giả lập tình huống một VPS bị sập hoàn toàn.

Hãy tiến hành tắt tiến trình rqlited trên Node 1 (đang là Leader) bằng cách nhấn Ctrl+C hoặc dùng lệnh kill. Lúc này, Node 1 hoàn toàn ngoại tuyến.

Ngay lập tức, giao thức Raft trên Node 2 và Node 3 sẽ phát hiện sự vắng mặt của Leader. Chúng sẽ tự động tổ chức một cuộc bầu cử mới (Election). Vì số lượng nút còn lại là 2/3 (đạt trên 50%), cuộc bầu cử hợp lệ. Một trong hai nút còn lại sẽ được đắc cử làm Leader mới.

Nếu bạn gửi một truy vấn ghi dữ liệu mới đến Node 2, hệ thống vẫn chấp nhận và xử lý bình thường. Khi Node 1 hoạt động trở lại, nó sẽ tự động kết nối lại vào cụm với vai trò Follower và tải xuống các dữ liệu bị thiếu trong thời gian nó ngoại tuyến. Đây chính là sức mạnh của khả năng tự phục hồi trong hệ thống phân tán.

Tối ưu hóa và bảo mật cho môi trường sản xuất (Production)

Mặc dù rqlite tiêu thụ rất ít tài nguyên, để vận hành ổn định trên VPS 1 vCPU trong môi trường thực tế, doanh nghiệp cần lưu ý các điểm sau:

  • Bật tính năng mã hóa TLS: Mặc định, giao tiếp giữa các nút là văn bản thuần túy. Hãy cấu hình chứng chỉ SSL/TLS để mã hóa dữ liệu truyền tải trên đường truyền Internet giữa các VPS.
  • Cấu hình xác thực (Authentication): Sử dụng tính năng thiết lập tài khoản và mật khẩu cho HTTP API để ngăn chặn các truy cập trái phép từ bên ngoài.
  • Giám sát tài nguyên (Monitoring): Thiết lập các công cụ cảnh báo như Prometheus và Grafana để theo dõi dung lượng RAM và IOPS của đĩa cứng, tránh tình trạng đĩa bị đầy làm ảnh hưởng đến tệp nhật ký của Raft (Raft log).

Kết luận

Xây dựng hệ thống cơ sở dữ liệu sẵn sàng cao không nhất thiết phải đánh đổi bằng chi phí hạ tầng đắt đỏ. Bằng việc kết hợp sự tinh gọn của SQLite và tính mạnh mẽ của giao thức Raft thông qua rqlite, doanh nghiệp hoàn toàn có thể sở hữu một cụm CSDL phân tán, chịu lỗi tốt ngay trên cấu hình 3 VPS 1 vCPU khiêm tốn.

Giải pháp này mở ra hướng đi mới cho các kiến trúc Microservices siêu nhẹ, các hệ thống Edge Computing hoặc các ứng dụng doanh nghiệp vừa và nhỏ tối ưu hóa tối đa chi phí vận hành mà vẫn đảm bảo được cam kết chất lượng dịch vụ (SLA) đối với khách hàng.