Tin tức

OpenRun Tích Hợp Litestream Vào Nền Tảng, Giúp Sao Chép SQLite Không Cần Vận Hành

OpenRun, nền tảng GitOps tự lưu trữ, nay tích hợp sẵn hỗ trợ Litestream: cơ sở dữ liệu SQLite được sao chép liên tục đến bộ nhớ tương thích S3, với khôi phục tự động trên các ổ đĩa trống. Không thay đổi ứng dụng, không cấu hình sidecar, không logic khôi phục.

August 30, 2026· 4 min read· Nguồn: OpenRun - Self-Hosted GitOps Platform for Docker and Kubernetes
OpenRun Tích Hợp Litestream Vào Nền Tảng, Giúp Sao Chép SQLite Không Cần Vận Hành

OpenRun, nền tảng GitOps mã nguồn mở, tự lưu trữ để triển khai ứng dụng web và công cụ nội bộ trên Docker, Podman hoặc Kubernetes, đã thêm hỗ trợ Litestream tích hợp sẵn. Cơ sở dữ liệu SQLite nay được sao chép liên tục đến AWS S3 hoặc bộ nhớ đối tượng tương thích S3 (Cloudflare R2, MinIO, SeaweedFS), và khôi phục là tự động: khi OpenRun phát hiện ổ đĩa ứng dụng trống hoặc được tạo lại, nó khôi phục cơ sở dữ liệu từ bản sao trước khi khởi động ứng dụng. Thiết lập tương tự hoạt động trên một nút đơn với Docker/Podman và trên Kubernetes.

Điểm mấu chốt: nhà phát triển ứng dụng sử dụng SQLite bình thường mà không cần cài đặt Litestream, cấu hình bộ nhớ đối tượng, sửa đổi hình ảnh container hoặc triển khai logic khôi phục. Gánh nặng vận hành đó chuyển vào nền tảng.

Cách Hoạt Động

Cài đặt Litestream được định nghĩa một lần trong cấu hình máy chủ OpenRun. Một dịch vụ SQLite tham chiếu cấu hình đó, và ứng dụng liên kết với dịch vụ. Ứng dụng nhận một ổ đĩa bền vững được gắn tại /data và tìm cơ sở dữ liệu của nó qua các biến môi trường được tiêm (SQLITE_DB_PATH, SQLITE_DIR). Mọi tệp *.db mà ứng dụng tạo trong thư mục đó đều được sao chép, bao gồm cả các tệp được tạo trong thời gian chạy. Các thay đổi thường sao chép trong khoảng một giây theo mặc định (sync_interval có thể cấu hình).

Trên Docker và Podman, OpenRun chạy Litestream trong một container đồng hành mỗi ứng dụng chia sẻ ổ đĩa dữ liệu của ứng dụng. Trước khi container ứng dụng khởi động trên một ổ đĩa trống, các container khôi phục kéo bất kỳ cơ sở dữ liệu nào đã sao chép về. Khi ứng dụng mở rộng về không khi nhàn rỗi, container Litestream thực hiện đồng bộ cuối và dừng lại.

Trên Kubernetes, ổ đĩa của liên kết trở thành PersistentVolumeClaim, và OpenRun tự động thêm một container khởi tạo khôi phục cùng một sidecar Litestream gốc (Kubernetes 1.29 trở lên) vào pod ứng dụng. Sidecar khởi động trước container ứng dụng và bị chấm dứt sau nó, cho phép đồng bộ cuối trong quá trình tắt máy có trật tự. Ứng dụng có liên kết SQLite chạy như một bản sao đơn với chiến lược cập nhật Recreate, ngăn nhiều pod ứng dụng ghi vào cùng một ổ đĩa SQLite trong khi cập nhật.

Các Kịch Bản Khôi Phục

Đối với ổ đĩa ứng dụng bị mất, khôi phục là tự động: lần khởi động tiếp theo thấy ổ đĩa trống, chạy các container khôi phục, và khởi động ứng dụng với dữ liệu đã khôi phục. Bản sao được khóa theo liên kết, vì vậy gắn cùng liên kết vào một ứng dụng mới cũng khôi phục dữ liệu vào ổ đĩa mới của ứng dụng đó.

Đối với mất hoàn toàn nút, với siêu dữ liệu sao chép được bật, quy trình khôi phục là: cài đặt OpenRun trên một máy mới, khởi động máy chủ với cùng tệp cấu hình. Khi khởi động, máy chủ thấy cơ sở dữ liệu siêu dữ liệu của nó bị thiếu, khôi phục cơ sở dữ liệu siêu dữ liệu và kiểm toán từ bản sao, và khởi động với tất cả ứng dụng, liên kết, dịch vụ, phiên bản và lịch sử kiểm toán còn nguyên vẹn. Mỗi ứng dụng sau đó triển khai lại trên yêu cầu đầu tiên, khôi phục dữ liệu SQLite của nó từ bản sao riêng trước khi container khởi động.

Sao chép là không đồng bộ. Với sync_interval mặc định một giây, một sự cố đột ngột có thể mất khoảng một giây ghi gần nhất chưa đến bộ nhớ đối tượng. Kịch bản mất nút được thực hiện từ đầu đến cuối trong các bài kiểm tra CI: bài kiểm tra giết cứng máy chủ, xóa container, ổ đĩa và thư mục cài đặt OpenRun, sau đó xác minh mọi thứ được xây dựng lại tự động từ kho đối tượng.

Giám Sát

openrun replication status báo cáo trạng thái của mọi cơ sở dữ liệu được sao chép, kết hợp danh sách bản sao trong bộ nhớ đối tượng với trạng thái của container sao chép, vì vậy một container sao chép thất bại có thể thấy được ngay cả khi bộ nhớ đối tượng vẫn chứa một bản sao gần đây. Trạng thái cũng có thể thấy trong Console App.

Nhà phát triển ứng dụng sử dụng SQLite bình thường mà không cần cài đặt Litestream, cấu hình bộ nhớ đối tượng, sửa đổi hình ảnh container hoặc triển khai logic khôi phục.
Ban biên tập Manul X