Tự chạy Postgres trên VM: ba mật khẩu, backup liên tục, restore thử
2server quản lý PostgreSQL 18 trên VM của bạn: ba mật khẩu tách biệt, backup pgBackRest kèm WAL archiving, và diễn tập restore tự động vào container tạm. Kèm giới hạn: không có HA hay failover tự động.
Nhiều người nghe "tự chạy database trên một VM" là thấy rủi ro, và nỗi lo đó có lý: một bản backup chưa từng được restore thì chưa phải là backup, mới chỉ là một tệp bạn hy vọng dùng được.
Trang tài liệu PostgreSQL trên 2server mô tả cách 2server quản lý cluster PostgreSQL 18 trên VM của bạn. Bài này đọc lại ba thứ trong đó, và nói thẳng một thứ nó không làm.
Một: ba mật khẩu độc lập
Theo trang tài liệu, cluster có ba mật khẩu độc lập, mỗi cái cho một việc:
| Vai trò | Dùng cho |
|---|---|
| app | DML: đọc và ghi dữ liệu của ứng dụng |
two_migrator |
migration |
two_admin |
quản trị |
Còn two_owner thì không thể đăng nhập.
Ý nghĩa thực tế của việc tách này: mật khẩu ứng dụng dùng hằng ngày để đọc ghi dữ liệu là một mật khẩu riêng, không phải mật khẩu migration hay quản trị.
Hai: backup liên tục bằng pgBackRest và WAL archiving
Phần backup dùng pgBackRest cùng WAL archiving; trang tài liệu gọi đây là backup liên tục. Đến đây vẫn chưa nên an tâm, vì câu hỏi thật sự không phải "job backup có chạy không".
Ba: diễn tập restore tự động
2server tự chạy diễn tập phục hồi (restore drill): phục hồi vào một container tạm để kiểm tra thực tế xem phục hồi có làm được không.
Đây là khác biệt giữa hai câu trả lời:
- "Container Postgres đang up, job backup thoát mã 0."
- "Chúng tôi đã restore thử vào một container tạm và nó lên được."
Câu đầu chỉ cho biết các tiến trình đang chạy. Câu sau mới cho biết dữ liệu về lại được. Chúng tôi từng viết về chuyện này ở bài bốn dấu tick xanh không phủ lớp thật sự hỏng, nơi "backup thoát 0" là một trong bốn dấu tick đó.
Điều 2server không làm
Trang tài liệu nói rõ: không có HA hay failover tự động. Nếu VM chứa cluster chết, không có node dự phòng nào tự lên thay; bạn cần có sẵn kế hoạch dựng lại từ backup.
Nghĩa là trước khi tin vào cách này, bạn nên tự trả lời ba câu:
- Ứng dụng của bạn chịu được bao lâu khi database ngừng để restore?
- Bản backup nằm ở đâu so với chính VM đó?
- Ai sẽ chạy restore thật, và đã có ai từng làm chưa?
Nếu câu trả lời cho câu 1 là "gần như không được", bạn cần một thiết kế khác ngoài những gì trang này mô tả.
Việc tiếp theo
Đọc trang tài liệu PostgreSQL của 2server, rồi tự trả lời ba câu ở trên cho hệ thống của bạn. Sau đó hỏi chính mình: lần cuối bạn thấy một bản restore thật chạy lên là khi nào?
