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

Xây Dựng Hệ Thống Cụm PostgreSQL Độ Sẵn Sàng Cao (HA) Toàn Diện Với Patroni Và Etcd Trên Cloud Server

29 tháng 5, 2026

1. Đặt vấn đề: Thách thức về độ sẵn sàng của Cơ sở dữ liệu trong kỷ nguyên số

Trong hạ tầng công nghệ thông tin của bất kỳ doanh nghiệp nào, Cơ sở dữ liệu (Database) luôn là thành phần cốt lõi và nhạy cảm nhất. Một sự cố ngừng hoạt động (downtime) dù chỉ diễn ra trong vài phút cũng có thể dẫn đến tổn thất nghiêm trọng về mặt doanh thu, làm gián đoạn trải nghiệm của khách hàng và ảnh hưởng trực tiếp đến uy tín thương hiệu. Khi doanh nghiệp dịch chuyển hệ thống lên hạ tầng Cloud Server, việc thiết kế một kiến trúc có khả năng chống chịu lỗi (fault-tolerant) trở thành yêu cầu bắt buộc.

PostgreSQL từ lâu đã nổi tiếng với sự mạnh mẽ, tuân thủ chuẩn ACID và hỗ trợ xử lý dữ liệu phức tạp. Tuy nhiên, cơ chế Replication mặc định của PostgreSQL (Stream Replication) dù hoạt động rất tốt nhưng lại thiếu đi một thành phần quan trọng: khả năng tự động phát hiện sự cố và chuyển vùng dữ liệu (Automatic Failover). Nếu nút chính (Primary) gặp sự cố, quản trị viên hệ thống (DBA) phải can thiệp thủ công để cấu hình lại một nút phụ (Standby) lên làm nút chính, đồng thời định tuyến lại luồng traffic từ ứng dụng. Quá trình này không chỉ mất thời gian mà còn tiềm ẩn nhiều rủi ro sai sót do con người.

Để giải quyết triệt để bài toán này, kiến trúc kết hợp giữa Patroni và Etcd đã trở thành giải pháp tiêu chuẩn công nghiệp (industry-standard), mang lại một hệ thống PostgreSQL có độ sẵn sàng cao (High Availability - HA) hoàn chỉnh, tự động hóa hoàn toàn và có khả năng mở rộng linh hoạt.

2. Tổng quan về các thành phần trong giải pháp HA

Để xây dựng một cụm (cluster) PostgreSQL HA bền vững, chúng ta cần sự phối hợp nhịp nhàng của ba thành phần chính bao gồm: Hệ quản trị cơ sở dữ liệu, Trình quản lý cụm và Hệ thống lưu trữ trạng thái phân tán.

PostgreSQL (Trọng tâm lưu trữ)

Đóng vai trò là tầng lưu trữ dữ liệu chính thức. Trong cụm HA, chúng ta áp dụng mô hình Asynchronous hoặc Synchronous Streaming Replication. Tại một thời điểm, chỉ có duy nhất một nút Primary nhận các truy vấn ghi (Write) và đồng bộ dữ liệu xuống các nút Standby (chỉ đọc - Read-only).

Etcd (Hệ thống DCS - Distributed Consensus Store)

Etcd là một kho lưu trữ dữ liệu dạng key-value phân tán, nhất quán và có độ tin cậy cao, thường được sử dụng để chia sẻ cấu hình và phát hiện dịch vụ (service discovery). Sử dụng thuật toán đồng thuận Raft, Etcd đóng vai trò là "nguồn chân lý duy nhất" (Single Source of Truth) lưu trữ trạng thái hiện tại của toàn bộ cụm PostgreSQL. Nó giúp ngăn chặn hiện tượng cực kỳ nguy hiểm trong hệ thống phân tán: Split-Brain (hiện tượng hai nút cùng tự nhận mình là Primary dẫn đến sai lệch dữ liệu).

Patroni (Bộ não điều khiển)

Patroni là một template quản lý PostgreSQL mã nguồn mở được phát triển bởi Zalando, viết bằng ngôn ngữ Python. Patroni hoạt động như một người giám sát (daemon) chạy cấu hình trực tiếp trên từng nút Cloud Server. Nó liên tục kiểm tra sức khỏe của PostgreSQL và tương tác với Etcd để duy trì hoặc thay đổi trạng thái cụm. Nếu Patroni phát hiện nút Primary bị sập, nó sẽ tự động phối hợp với Etcd để bầu chọn ra một nút Standby phù hợp nhất lên thay thế mà không cần bất kỳ sự can thiệp thủ công nào.

3. Kiến trúc hệ thống tiêu chuẩn trên Cloud Server

Một mô hình triển khai PostgreSQL HA tiêu chuẩn đảm bảo tính sẵn sàng cao và khả năng chống chịu lỗi tối ưu cần tối thiểu 03 nút Cloud Server (thường được gọi là Node). Quy tắc số lẻ này bắt buộc phải tuân thủ để hệ thống Etcd có thể đạt được số đông bầu chọn (Quorum) khi xảy ra phân tách mạng.

Cấu hình đề xuất cho mỗi Node:
- Hệ điều hành: Ubuntu Server 22.04 LTS hoặc Rocky Linux 9
- CPU/RAM: Tùy thuộc vào tải của doanh nghiệp (Tối thiểu 2 vCPU - 4GB RAM)
- Ổ cứng: SSD/NVMe chuyên dụng cho Database
- Mạng: Sở hữu IP nội bộ (Private IP) để tối ưu hóa bảo mật và tốc độ truyền tải.

Mô hình định tuyến luồng dữ liệu thông thường sẽ đi kèm với một công cụ cân bằng tải như HAProxy kết hợp với Keepalived (Vip) đặt ở phía trước, giúp ứng dụng luôn kết nối đến đúng IP của nút Primary hiện tại thông qua các cổng kiểm tra sức khỏe (Health-check REST API) do Patroni cung cấp.

4. Quy trình cấu hình chi tiết cụm PostgreSQL HA với Patroni và Etcd

Dưới đây là các bước triển khai thực tế được áp dụng phổ biến trong môi trường doanh nghiệp:

Bước 1: Chuẩn bị hệ thống và cài đặt Etcd Cluster

Trước tiên, quản trị viên cần thiết lập bản ghi cấu hình mạng nội bộ trong file /etc/hosts trên cả 3 Node để các máy chủ có thể nhận diện nhau bằng tên (Hostname). Tiến hành mở các cổng tường lửa cần thiết bao gồm: 2379 (Etcd Client), 2380 (Etcd Peer), 5432 (PostgreSQL), và 8008 (Patroni REST API).

Cài đặt gói Etcd trên cả 3 Node. Sau khi cài đặt, cấu hình file /etc/etcd/etcd.yml sao cho mỗi nút định nghĩa rõ ràng địa chỉ IP của mình và danh sách IP của các thành viên khác trong cụm. Khởi động dịch vụ và kiểm tra trạng thái hoạt động bằng lệnh:

etcdctl member list

Đảm bảo phản hồi trả về hiển thị đầy đủ thông tin của cả 3 nút với trạng thái khỏe mạnh (healthy).

Bước 2: Cài đặt PostgreSQL và Patroni

Lưu ý quan trọng: Chúng ta chỉ cài đặt phần mềm PostgreSQL (binaries) chứ không khởi tạo dữ liệu ban đầu (không chạy initdb). Patroni sẽ chịu trách nhiệm hoàn toàn trong việc khởi tạo và cấu hình cơ sở dữ liệu.

Cài đặt Patroni thông qua trình quản lý gói của hệ điều hành hoặc qua pip. Sau đó, chúng ta tiến hành bước quan trọng nhất: Cấu hình file /etc/patroni/patroni.yml trên từng Node.

Bước 3: Tối ưu hóa file cấu hình Patroni

File cấu hình của Patroni chứa toàn bộ logic vận hành của cụm. Các tham số chính bao gồm:

  • scope: Tên của cụm PostgreSQL (ví dụ: pg-ha-cluster).
  • namespace: Đường dẫn lưu trữ trên Etcd.
  • dcs: Khai báo danh sách các endpoints của cụm Etcd để Patroni kết nối.
  • pg_hba: Định nghĩa quyền truy cập mạng, cho phép các node trong cụm thực hiện replication và ứng dụng truy xuất dữ liệu một cách an toàn.
  • postgresql: Các tham số tối ưu hóa hiệu năng của PostgreSQL như max_connections, shared_buffers, wal_level: replica.

Bước 4: Khởi chạy và kiểm tra vận hành

Khởi chạy dịch vụ Patroni trên Node đầu tiên (được dự định làm Primary). Patroni sẽ nhận thấy Etcd chưa có dữ liệu về cụm, từ đó nó tự động chạy lệnh initdb để khởi tạo phân vùng cơ sở dữ liệu mới và tự phong cho mình làm Primary. Khởi chạy tiếp dịch vụ Patroni trên Node 2 và Node 3, hệ thống sẽ tự động thực hiện quá trình pg_basebackup từ Node Primary để đồng bộ toàn bộ dữ liệu ban đầu một cách mượt mà.

Sử dụng công cụ kiểm tra của Patroni để giám sát trạng thái cụm:

patronictl -c /etc/patroni/patroni.yml list

Kết quả hiển thị một bảng thông tin tường minh, chỉ rõ Node nào đang giữ vai trò Leader (Primary) và các Node nào đang ở trạng thái Replica (Standby) cùng với độ trễ đồng bộ (Lag).

5. Cơ chế tự động Failover và kịch bản khôi phục sau sự cố

Điểm ưu việt tuyệt đối của kiến trúc này nằm ở cách xử lý sự cố hoàn toàn tự động:

  1. Phát hiện sự cố: Khi nút Primary gặp sự cố phần cứng hoặc mất mạng đột ngột, Patroni trên nút đó không thể làm mới "khóa thuê" (TTL Leader key) trên Etcd trong một khoảng thời gian quy định (thường là 30 giây).
  2. Bầu chọn Leader mới: Khóa trên Etcd hết hạn và bị xóa. Hai nút Standby còn lại sẽ nhận thấy cụm đang thiếu Leader. Dựa vào thuật toán đồng thuận, nút Standby nào có dữ liệu cập nhật mới nhất (WAL vị trí cao nhất) sẽ được Etcd chấp thuận cấp quyền Leader mới.
  3. Tái cấu hình: Patroni trên nút thắng cuộc sẽ thực hiện quảng bá cấu hình lên PostgreSQL, chuyển trạng thái từ Read-only sang Read-Write. Nút Standby còn lại sẽ tự động đổi hướng replication sang nhìn vào nút Primary mới. Toàn bộ quá trình diễn ra chỉ trong vài mươi giây, đảm bảo dịch vụ cốt lõi không bị gián đoạn kéo dài.
  4. Tái gia nhập cụm: Khi nút Primary cũ được sửa chữa và khởi động lại, Patroni sẽ nhận biết qua Etcd rằng đã có một Leader mới. Nó sẽ tự động hạ cấp nút cũ xuống làm Standby, thực hiện đồng bộ lại dữ liệu nếu cần, loại bỏ hoàn toàn rủi ro sai lệch dữ liệu.

6. Lời kết và những lưu ý vận hành cho doanh nghiệp

Triển khai thành công hệ thống PostgreSQL Độ sẵn sàng cao (HA) với Patroni và Etcd trên Cloud Server là một bước tiến chiến lược giúp doanh nghiệp bảo vệ tài sản dữ liệu quý giá và duy trì hoạt động kinh doanh liên tục (Business Continuity). Tuy nhiên, để hệ thống vận hành hoàn hảo, các doanh nghiệp cần lưu ý một số điểm sau:

  • Luôn triển khai hệ thống giám sát (Monitoring) như Prometheus & Grafana để theo dõi sát sao các chỉ số tài nguyên, độ trễ replication và trạng thái của Etcd cluster.
  • Thường xuyên tổ chức các buổi diễn tập sự cố giả định (Chaos Engineering) để kiểm tra tính thực tế của kịch bản tự động failover.
  • Mặc dù hệ thống có khả năng chống chịu lỗi cao, việc thiết lập chiến lược Sao lưu dữ liệu tự động định kỳ (Backup/Restore) kết hợp giữa sao lưu vật lý và sao lưu logic vẫn là bắt buộc để phòng ngừa rủi ro dữ liệu bị xóa nhầm hoặc tấn công mã độc.

Với sự linh hoạt của hạ tầng Cloud Server kết hợp cùng sức mạnh quản trị thông minh của Patroni và Etcd, doanh nghiệp hoàn toàn có thể tự tin vận hành các ứng dụng quy mô lớn với độ tin cậy và an toàn tuyệt đối.

Xây Dựng Hệ Thống Cụm PostgreSQL Độ Sẵn Sàng Cao (HA) Toàn Diện Với Patroni Và Etcd Trên Cloud Server | DPTCloud