Skip to main content

🔄 PgBouncer

PgBouncer là một công cụ quản lý kết nối (connection pooler) cho PostgreSQL. Nó giúp giảm tải và cải thiện hiệu suất của cơ sở dữ liệu bằng cách tái sử dụng các kết nối hiện có thay vì tạo kết nối mới mỗi khi có yêu cầu.

⭐ Tính năng chính

  • 🔁 Connection Pooling: Tái sử dụng các kết nối để giảm tải
  • ⚖️ Load Balancing: Phân phối tải đều giữa các kết nối
  • 🚫 Connection Limiting: Giới hạn số kết nối để tránh quá tải
  • 🔐 Authentication: Hỗ trợ nhiều phương thức xác thực

🛠️ Cài đặt và Cấu hình

1. 📥 Cài đặt PgBouncer

# Debian/Ubuntu
sudo apt update
sudo apt install pgbouncer

2. ⚙️ Cấu hình cơ bản

Chỉnh sửa file cấu hình chính /etc/pgbouncer/pgbouncer.ini:

[databases]
* = host=localhost port=5432

[pgbouncer]
# Chế độ pool:
# - session: sau khi client ngắt kết nối (mặc định)
# - transaction: sau khi giao dịch hoàn tất
# - statement: sau khi câu lệnh hoàn tất
pool_mode = transaction

# Giới hạn kết nối
max_client_conn = 5000

# Cấu hình xác thực
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt

# Danh sách admin users
admin_users = my_db_user

3. 🔒 Cấu hình xác thực

Tạo và chỉnh sửa file /etc/pgbouncer/userlist.txt:

📌 PostgreSQL < 14

"my_db_user" "md5badc318d987f61146c6ad8e15d84a111"

Tạo mật khẩu MD5:

echo "md5"$(echo -n 'YourdbpasswordYourdbusername' | md5sum | awk ' { print $1 } ')

📌 PostgreSQL ≥ 14

"my_db_user" "SCRAM-SHA-256$4096:lLN4+i05+kpeffD4s3rRiw==$Oq62iUGamAaF5cpB+agWV4u3xfc5cZCRtvMhmA+Zm3E=:hHkCesEi0p0wLWk1uUEeTtJTYLXHKDLdy2te3VAOe8s="

Lấy hash SCRAM-SHA-256:

psql -h localhost -p 5432 -Atq -U postgres -d postgres -c "SELECT concat('\"', usename, '\" \"', passwd, '\"') FROM pg_shadow"

4. 🚀 Khởi động dịch vụ

sudo service pgbouncer restart

🔄 Cấu hình nhiều instance PgBouncer

1. ➕ Tạo instance mới

# Tạo service mới
sudo cp /etc/init.d/pgbouncer /etc/init.d/pgbouncer02

# Chỉnh sửa service mới
sudo vi /etc/init.d/pgbouncer02

Nội dung cần thay đổi trong file service:

NAME=pgbouncer02
PGBOUNCER_ARGS="-d /etc/pgbouncer/pgbouncer02.ini"

2. 📝 Cấu hình instance mới

Tạo file /etc/pgbouncer/pgbouncer02.ini:

[databases]
db1 = host=localhost dbname=db1

[pgbouncer]
listen_addr = 127.0.0.1
listen_port = 16432
auth_file = userlist.txt
auth_type = md5
auth_user = pgbouncer
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 20
note
  • pool_mode: Xác định cách PgBouncer sử dụng các pool
  • max_client_conn: Số kết nối tối đa từ clients
  • default_pool_size: Số kết nối tối đa tới database

3. 🎯 Khởi động instance mới

sudo systemctl daemon-reload
sudo systemctl start pgbouncer02

📚 Tài liệu tham khảo