Tích hợp Pgpool-II trên Kubernetes để Tối Ưu Hóa Kết Nối và Cân Bằng Tải Truy Vấn PostgreSQL

Trình bày cách triển khai Pgpool-II trên Kubernetes nhằm tối ưu hóa kết nối và cân bằng tải truy vấn đọc từ PostgreSQL.

Giới thiệu

Do PostgreSQL là một ứng dụng có trạng thái, yêu cầu quản lý cụ thể (ví dụ: sao lưu, phục hồi, chuyển đổi tự động), các chức năng tích hợp của Kubernetes không đủ để xử lý. Vì vậy, cần sử dụng một Operator để mở rộng khả năng của Kubernetes, hỗ trợ tạo và quản lý PostgreSQL.

Các Operator như Crunchy PostgreSQL Operator, Zalando PostgreSQL Operator và KubeDB đều thiếu khả năng cân bằng tải truy vấn.

<ul>
<li><a href="https://github.com/CrunchyData/postgres-operator">Crunchy PostgreSQL Operator</a></li>
<li><a href="httpshttps://github.com/zalando/postgres-operator">Zalando PostgreSQL Operator</a></li>
<li><a href="https://github.com/kubedb/operator">KubeDB</a></li>
</ul>

Kiến trúc Hệ thống

Điều kiện Cần Thiết

  • Đảm bảo bạn có một cluster Kubernetes với kubectl đã cài đặt.
  • PostgreSQL OperatorPostgreSQL Cluster đã được thiết lập.

Triển Khai Pgpool-II

Để giảm thiểu phức tạp, chỉ kích hoạt tính năng cân bằng tải và pool kết nối trong Pgpool-II.

Một cấu hình cơ bản cho Pgpool-II pod có thể như sau:

backend_hostname0: 'svc_primary'
backend_hostname1: 'svc_replica'
backend_port0: '5432'
backend_port1: '5432'
backend_flag0: 'PRIMARY_NODE|DISABLE_FAILOVER'
backend_flag1: 'DISABLE_FAILOVER'
failover_on_backend_error: false
sr_check_period: 10
sr_check_user: 'pguser'
load_balance_mode: true
connection_cache: true
listen_addresses: '*'

Hai phương pháp phổ biến để cấu hình Pgpool-II:

  1. Sử dụng biến môi trường:
  • Xem thêm
  1. Sử dụng ConfigMap:
  • Xem thêm

Cấu Hình Pgpool-II Với Biến Môi Trường

Biến môi trường có thể được truyền vào container trong pod để điều chỉnh cấu hình Pgpool-II. Một ví dụ về file YAML có thể tải xuống và sửa đổi như sau:

$ curl -LO https://raw.githubusercontent.com/pgpool/pgpool2_on_k8s/master/pgpool-minimal-config.yaml

Ví dụ, các biến môi trường dưới đây sẽ chuyển thành cấu hình trong pgpool.conf:

env:
- name: PGPOOL_PARAM_BACKEND_HOSTNAME0
  value: "svc_primary"
- name: PGPOOL_PARAM_BACKEND_HOSTNAME1
  value: "svc_replica"
- name: PGPOOL_PARAM_BACKEND_FLAG0
  value: "PRIMARY_NODE|DISABLE_FAILOVER"
- name: PGPOOL_PARAM_BACKEND_FLAG1
  value: "DISABLE_FAILOVER"

Sau khi chỉnh sửa file YAML, chạy lệnh sau để triển khai:

kubectl apply -f pgpool-minimal-config.yaml

Sử Dụng ConfigMap Để Cấu Hình Pgpool-II

Thay vì biến môi trường, bạn có thể sử dụng ConfigMap để định nghĩa toàn bộ cấu hình pgpool.confpool_hba.conf.

Tải xuống các file mẫu:

curl -LO https://raw.githubusercontent.com/pgpool/pgpool2_on_k8s/master/pgpool-cm.yaml
curl -LO https://raw.githubusercontent.com/pgpool/pgpool2_on_k8s/master/pgpool-deploy.yaml

File ConfigMap có thể trông như sau:

apiVersion: v1
kind: ConfigMap
metadata:
  name: pgpool-config
data:
  pgpool.conf: |-
    listen_addresses = '*'
    backend_hostname0 = 'svc_postgresql'
    ...
  pool_hba.conf: |-
    local all all trust
    host all all 127.0.0.1/32 trust
    ...

Các Cài Đặt Khác

  • SSL: Bật SSL để đảm bảo kết nối an toàn.
  • Kiểm Tra Sao Chép: Cấu hình kiểm tra sao chép nếu cần theo dõi độ trễ giữa các node.

Sử dụng lệnh sau để áp dụng cấu hình:

kubectl apply -f pgpool-cm.yaml
kubectl apply -f pgpool-deploy.yaml

Thẻ: Kubernetes Pgpool-II PostgreSQL Operator load-balancing

Đăng vào ngày 28 tháng 6 lúc 18:54