Để đảm bảo tính sẵn sàng cao (High Availability – HA) trong PostgreSQL, bạn có thể áp dụng nhiều phương pháp và công nghệ khác nhau. Dưới đây là một hướng dẫn chi tiết với các bước cụ thể và mã mẫu đi kèm.

1. Streaming Replication

Mô tả: Streaming Replication cho phép sao chép dữ liệu từ một máy chủ chính sang một hoặc nhiều máy chủ phụ theo thời gian thực.

Bước 1: Cấu hình máy chủ chính

Chỉnh sửa tệp cấu hình postgresql.conf trên máy chủ chính:

# Thêm vào trong postgresql.conf
wal_level = replica
max_wal_senders = 3
wal_keep_segments = 64

Chỉnh sửa tệp pg_hba.conf để cho phép kết nối từ máy chủ phụ:

# Thêm vào pg_hba.conf
host    replication     all             /32            md5

Bước 2: Tạo user cho replication

CREATE ROLE replicator WITH REPLICATION PASSWORD 'your_password' LOGIN;

Bước 3: Sao chép dữ liệu từ máy chủ chính sang máy chủ phụ

pg_basebackup -h  -D /var/lib/postgresql/12/main -U replicator -P -X stream

Bước 4: Cấu hình máy chủ phụ

Tạo tệp recovery.conf trong thư mục dữ liệu của máy chủ phụ:

# Tạo tệp recovery.conf
standby_mode = 'on'
primary_conninfo = 'host= port=5432 user=replicator password=your_password'
trigger_file = '/tmp/postgresql.trigger.5432'

Bước 5: Khởi động lại máy chủ phụ

systemctl start postgresql

2. Failover Clustering

Mô tả: Sử dụng các công cụ để tự động chuyển đổi vai trò giữa máy chủ chính và phụ khi có sự cố.

Bước 1: Cài đặt Patroni

# Trên máy chủ chính và phụ, cài đặt Patroni
sudo apt-get install patroni

Bước 2: Cấu hình Patroni

Tạo tệp cấu hình patroni.yml:

scope: mycluster
namespace: db
name: postgres

restapi:
  listen: 0.0.0.0:8008
  connect_address: :8008

etcd:
  host: :2379

bootstrap:
  dcs:
    etcd:
      hosts: :2379
  initdb:
    - encoding: UTF8
    - locale: en_US.UTF-8

Bước 3: Khởi động Patroni

patroni /path/to/patroni.yml

3. Load Balancing

Mô tả: Sử dụng công cụ như Pgpool-II hoặc HAProxy để phân phối lưu lượng truy cập đến các máy chủ khác nhau.

Bước 1: Cài đặt Pgpool-II

# Cài đặt Pgpool-II
sudo apt-get install pgpool2

Bước 2: Cấu hình Pgpool-II

Chỉnh sửa tệp cấu hình pgpool.conf:

backend_hostname0 = ''
backend_port0 = 5432
backend_weight0 = 1
backend_hostname1 = ''
backend_port1 = 5432
backend_weight1 = 1

Bước 3: Khởi động Pgpool-II

systemctl start pgpool2

4. Giám sát và Cảnh báo

Mô tả: Sử dụng các công cụ giám sát để theo dõi tình trạng của cơ sở dữ liệu và gửi cảnh báo khi có vấn đề xảy ra.

Bước 1: Cài đặt Prometheus và Grafana

# Cài đặt Prometheus
sudo apt-get install prometheus

# Cài đặt Grafana
sudo apt-get install grafana

Bước 2: Cấu hình Prometheus

Chỉnh sửa tệp cấu hình prometheus.yml để theo dõi PostgreSQL:

scrape_configs:
  - job_name: 'postgresql'
    static_configs:
      - targets: [':9187']

5. Kiểm tra và Bảo trì

Mô tả: Thực hiện các bài kiểm tra phục hồi và bảo trì định kỳ để đảm bảo quy trình hoạt động hiệu quả.

Bước 1: Thực hiện kiểm tra phục hồi

# Thực hiện lệnh khôi phục từ sao lưu
pg_restore -U username -d target_db mydb.backup

Bước 2: Ghi chú quy trình Ghi chú các bước thực hiện và kiểm tra để cải thiện quy trình phục hồi trong tương lai.

Kết luận

Bằng cách áp dụng các phương pháp và công nghệ trên, bạn có thể đảm bảo tính sẵn sàng cao cho PostgreSQL. Việc cấu hình chính xác, giám sát liên tục và kiểm tra định kỳ là rất quan trọng để duy trì hiệu suất và khả năng phục hồi của hệ thống.