Load Balancing, High Availability và Failover với PostgreSQL

20 tháng 09, 2019 - 6372 lượt xem

Khi hệ thống càng lớn, càng đòi hỏi cơ sở dữ liệu cần được duy trì ở trạng thái ổn định và sẵn sàng, dữ liệu phải đảm bảo được sao lưu một cách an toàn.

Một số yêu cầu để phục vụ tính ổn định đó:

  • Load Balancing
  • High Availability
  • Self Healing and Automated Reconstruction
  • Backups and recovery

Toàn bộ yêu cầu xử lý tập trung vào một database server sẽ khiến rủi ro rất cao, quá tải và phụ thuộc. Scale sẽ giảm áp lực cho database chính và tăng khả năng chịu tải của hệ thống. Mặc dù vậy, scale cũng đặt ra một số vấn đề như dữ liệu không đồng nhất giữa các database scale, khiến dữ liệu bị sai lệch giữa các lần truy cập, việc insert dữ liệu xảy ra đồng thời giữa các database server, khiến việc conflict dẫn đến gây lỗi và dữ liệu không đồng nhất. Ngoài ra, quản lý các database scale không hiệu quả sẽ lãng phí và khiến hiệu suất giảm thiểu.

Để giảm quyết vấn đề đó, mô hình master-slave được sử dụng với một database chính là master - đóng vai trò thực hiện xử lý câu lệnh insert, update, delete. Các database slave được đồng bộ dữ liệu từ master, slave đóng vai trò read-only, chỉ thực hiện được câu lệnh select ở slave.

Khi ấy, các câu lệnh truy vấn select sẽ được chia đều ra các slave + master, giảm áp lực đến database master. Bởi dữ liệu chỉ insert, update, delete vào một master duy nhất, nên việc insert đồng thời giữa các database không còn, đảm bảo không bị conflict data. Các slave sẽ kết nối đến master, chuyển WAL (Transaction log) từ node Master tới slave, sau đó slave phản ánh lại nội dung WAL vào dữ liệu.

 

PostDock giúp việc triển khai một cluster các database dễ dàng, với các thành phần chính là: 

  • PGPool
  • PostgreSQL 
  • Barman

Trong đó: 

PGPool có thể quản lý multiple PostgreSQL servers, sử dụng câu lệnh replication cho phép tạo các bản backup real-time trên các node vật ký khác.

Giữ kết nối đến database server, và tái sử dụng khi các kết nối có cùng thuộc tính

PGPool cũng chia tải các truy vấn với câu lênh Select được thực hiện ở cả master-slave và đảm bảo insert, delete, update ở master.

Ngoài ra, pgpool cũng giới hạn số lượng kết nối đồng thời, đảm bảo database không quá tải.

 

Barman giúp quản lý backup và recovery các PostgreSQL server, đảm bảo dữ liệu tồn tại khi một trong các node xảy ra sự cố.

PostDock cũng giúp database luôn sẵn sàng, khi master bị shutdown, một trong các slave sẽ được promote lên thành master và thực hiện đầy đủ chức năng như master cũ.

Trong đó, CLUSTER_NODE_NETWORK_NAME phải được đặt đúng theo tên node thực tế, và PARTNER_NODES phải được liệt kê đầy đủ các service sẽ tham gia vào cluster.

Pgpool sẽ kết nối đến các slave và master thông qua mạng nội bộ và port 5432 internal. Port 5440, 5441, 5442 để expose ra host, phục vụ mục đích kiểm tra.

Triển khai ứng dịch vụ trong chế độ swarm

Kiểm tra

Trong đó:

Một master database xử lý các câu lệnh insert, update, delete. 2 database pgslave1 và pgslave2 thuộc role standby.

Thực hiện câu lệnh create table kiểm tra master và slave

 

 

Kiểm tra việc chia tải câu lệnh select lên các database slave thông qua câu lệnh select địa chỉ host, mỗi lần select, trả về một địa chỉ host của các slave master, điều đó cho thấy, câu lệnh đã được chia đều ra các slave, nhằm giảm tải đến master chính

 

Kiểm tra khả năng tự đề cử slave lên thành master sau khi node master bị shutdown.

Sau đó vài giây, một slave sẽ được đề cử trở thành master

Việc truy vấn ngay sau đó diễn ra bình thường, không ảnh hưởng đến dữ liệu ban đầu

 

Bình luận

avatar
khoa nguyen 2023-04-28 03:24:17.070804 +0000 UTC

mình build docker compose theo this guilde này nhưng bị lỗi

post-dock_pgmaster.1.zopneg9gr6y6@VPS2    | 2023-04-28 03:20:27.065 UTC [324] FATAL:  password authentication failed for user "monkey_user"
post-dock_pgmaster.1.zopneg9gr6y6@VPS2    | 2023-04-28 03:20:27.065 UTC [324] DETAIL:  Role "monkey_user" does not exist.
post-dock_pgmaster.1.zopneg9gr6y6@VPS2    |     Connection matched pg_hba.conf line 95: "host all all all md5"
 

nhờ bạn hỗ trợ hướng dẫn giúp

Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  0 Thích
0