Kết nối Postgres bằng Patroni

Bizfly Cloud Database là dịch vụ cung cấp dịch vụ cơ sở dữ liệu trên nền tảng điện toán đám mây giúp người dùng, doanh nghiệp triển khai một giải pháp quản trị dữ liệu hiệu quả, đảm bảo khả năng khôi phục toàn vẹn dữ liệu trong các tình huống sự cố thảm họa. Đồng thời thực hiện giám sát thông tin liên quan đến hệ quan trị cơ sở dữ liệu của người dùng, tự động điều chỉnh khả năng lưu trữ dữ liệu theo nhu cầu sử dụng tài nguyên của hệ quản trị cơ sở dữ liệu.

Bizfly Cloud Database là dịch vụ miễn phí cung cấp bởi Bizfly Cloud trong thời gian Beta và dùng thử. Các nội dung liên quan đến chi phí sử dụng chỉ mang tính chất tham khảo.


PostgreSQL Patroni là một công cụ mã nguồn mở được sử dụng để quản lý và triển khai một cụm PostgreSQL phân tán có tính sẵn sàng cao. Nó là một thành phần của dự án Patroni, được phát triển bởi Zalando SE. Patroni sử dụng các khái niệm và cơ chế của PostgreSQL Streaming Replication và PostgreSQL High Availability (HA) để tạo ra một cụm PostgreSQL có khả năng tự phục hồi và sẵn sàng cao. Giữa các máy chủ PostgreSQL trong cụm, Patroni sử dụng etcd hoặc ZooKeeper để lưu trữ thông tin cấu hình và trạng thái của cụm. Patroni giúp đơn giản hóa việc triển khai và quản lý các cụm PostgreSQL có tính sẵn sàng cao. Nó cung cấp các cơ chế tự động để đảm bảo rằng dữ liệu và dịch vụ PostgreSQL vẫn hoạt động một cách liên tục và có khả năng phục hồi từ sự cố. Hiện tại, Bizfly Cloud đã cung cấp database engine PostgreSQL được cài đặt sẵn thành phần Patroni để tiện cho việc triển khai các mô hình sử dụng database phù hợp với nhu cầu sử dụng.

Hướng dẫn kết nối

Trước tiên cần truy cập dashboard để tạo database

Untitled

Lựa chọn Database engine của postgresql có sẵn thành phần Patroni

Untitled

Sau khi database instance được build xong, có thể truy cập vào trang quản lý database instance. Vào mục nodes rồi thực hiện tạo thêm secondary node

Untitled

Nhập tên second node rồi chọn Xác nhận để tạo.

Untitled

Hướng dẫn kiểm tra

Có thể test thêm về thành phần patroni qua tính năng failover qua đoạn code sau

import psycopg2

hosts = [
    'your_database_host'
]

hosts = ",".join(hosts)
database_name = "postgres"
username = "root"
password = "password_database"
port = 5432
target_session_attrs = "any"

conn = psycopg2.connect(
    database=database_name,
    host=hosts,
    user=username,
    password=password,
    port=port,
    target_session_attrs=target_session_attrs
)

cur = conn.cursor()
cur.execute("select pg_is_in_recovery(), pg_postmaster_start_time()")
row = cur.fetchone()
print("recovery = ", row[0])
print("time = ", row[1])

Kết quả trả vể

recovery =  False
time =  2023-12-27 07:09:41.656979+00:00

Sau khi tắt primary node, secondary node được đẩy lên làm primary node và việc connect vẫn không bị gián đoạn

Untitled

Kết quả trả vể

recovery =  False
time =  2023-12-27 08:18:02.939977+00:00