Hướng Dẫn Triển Khai PostgreSQL 12 Trên CentOS: Phương Pháp YUM và Biên Dịch Từ Mã Nguồn

Triển Khai Cơ Sở Dữ Liệu PostgreSQL 12 Trên Môi Trường Linux

Tài liệu kỹ thuật này tổng hợp quy trình cài đặt, cấu hình môi trường và thiết lập sao chép dữ liệu cho hệ quản trị PostgreSQL phiên bản 12 trên nền tảng CentOS 7.x/8.x. Nội dung chia làm ba phần chính: triển khai qua trình quản lý gói hệ thống, biên dịch trực tiếp từ mã nguồn, và cấu hình nhân bản luồng để đảm bảo tính sẵn sàng cao.

1. Triển Khai Qua Kho Gói Hệ Thống (YUM)

Cách tiếp cận này phù hợp với các môi trường cần tốc độ triển khai nhanh và tích hợp sẵn với hệ thống package manager của RedHat/CentOS.

1.1. Thêm Kho Lưu Trữ Chính Thức

Kết nối kho phần mềm do cộng đồng PostgreSQL cung cấp để truy cập phiên bản ổn định:

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Đối với CentOS 7: thay EL-8 bằng EL-7

1.2. Cài Đặt Dịch Vụ Và Khởi Tạo Dữ Liệu

Các gói dịch vụ sẽ được đặt tên theo phiên cụ thể để tránh xung đột:

sudo dnf install -y postgresql12 postgresql12-server
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb

1.3. Quản Lý Vòng Đời Dịch Vụ

sudo systemctl enable --now postgresql-12
sudo systemctl status postgresql-12

1.4. Bảo Mật Tài Khoản Mặc Định

Tài khoản postgres trong hệ điều hành và cơ sở dữ liệu có thể được cập nhật mật khẩu thông qua interactive terminal:

su - postgres
psql -c "ALTER USER postgres WITH PASSWORD 'SecurePgPass123!';"

1.5. Cho Phép Kết Nối Mạng Ngoại Vi

Cần mở cổng tường lửa và chỉnh sửa hai tệp cấu hình cốt lõi:

sudo firewall-cmd --add-port=5432/tcp --permanent
sudo firewall-cmd --reload
# Tệp cấu hình máy chủ
echo "listen_addresses = '*'" | sudo tee -a /var/lib/pgsql/12/data/postgresql.conf

# Tệp kiểm soát truy cập
echo "host all all 0.0.0.0/0 md5" | sudo tee -a /var/lib/pgsql/12/data/pg_hba.conf

sudo systemctl restart postgresql-12

1.6. Tham Khảo Lệnh Shell Thường Dùng

-- Quản lý database
CREATE DATABASE app_db OWNER postgres;
\l
\c app_db

-- Quản lý đối tượng
CREATE TABLE logs(id serial, msg text, created_at timestamptz DEFAULT now());
\d+ logs

-- Phân quyền
GRANT ALL PRIVILEGES ON DATABASE app_db TO admin_role;
REVOKE CREATE ON SCHEMA public FROM PUBLIC;

2. Cài Đặt Bằng Cách Biên Dịch Mã Nguồn

Phương pháp này cho phép tùy chỉnh sâu các tham số tối ưu và không phụ thuộc vào policy đóng gói của nhà cung cấp OS.

2.1. Chuẩn Bị Phụ Thuộc và Tải Gói

sudo dnf groupinstall "Development Tools" -y
sudo dnf install readline-devel zlib-devel pam-devel libxml2-devel openssl-devel python3-devel -y
wget https://ftp.postgresql.org/pub/source/v12.17/postgresql-12.17.tar.gz

2.2. Giải Nén và Biên Dịch

tar -zxvf postgresql-12.17.tar.gz
cd postgresql-12.17
./configure --prefix=/opt/pgsql12 --with-openssl --with-pgport=5432
make -j$(nproc) && sudo make install

2.3. Cấu Hình Người Dùng và Thư Mục Dữ Liệu

sudo groupadd dba
sudo useradd -r -g dba -d /opt/pgsql12 -s /bin/bash postgres
sudo mkdir -p /opt/pgsql12/data
sudo chown -R postgres:dba /opt/pgsql12

2.4. Định Nghĩa Biến Môi Trường Toàn Cục

cat << 'EOF' | sudo tee /etc/profile.d/pg_env.sh
export PGHOME=/opt/pgsql12
export PGDATA=/opt/pgsql12/data
export PATH=$PATH:$PGHOME/bin
export LD_LIBRARY_PATH=$PGHOME/lib
EOF
source /etc/profile.d/pg_env.sh

2.5. Khởi Tạo Cluster Và Kích Hoạt Tự Động

su - postgres
initdb -D $PGDATA
exit
sudo cp /opt/pgsql12/contrib/start-scripts/linux /etc/init.d/postgresql12
sudo chmod +x /etc/init.d/postgresql12
sudo chkconfig --add postgresql12

3. Thiết Lập Nhân Bản Luồng (Streaming Replication)

Chế độ stream replication cho phép sao chép ghi WAL liên tục, giảm thiểu khoảng thời gian mất dữ liệu (RPO) xuống mức tối thiểu so với phương pháp archive truyền thống.

3.1. Cấu Hình Phía Máy Chủ Chính (Primary)

Tạo role chuyên dụng cho việc nhận luồng WAL:

CREATE ROLE repl_user LOGIN REPLICATION ENCRYPTED PASSWORD 'StrongReplPass!';

Cập nhật postgresql.conf trên Primary:

listen_addresses = '*'
wal_level = replica
max_wal_senders = 3
hot_standby = on
archive_mode = on
archive_command = 'test ! -f /opt/pgsql12/archive/%f && cp %p /opt/pgsql12/archive/%f'

Cho phép kết nối replication trong pg_hba.conf:

host replication repl_user 10.0.0.0/24 scram-sha-256

3.2. Đồng Bộ Dữ Liệu Sang Máy Chủ Phụ (Standby)

Xóa nội dung thư mục dữ liệu cũ trên Standby và sao chép toàn bộ khối dữ liệu cơ sở:

rm -rf /opt/pgsql12/data/*
su - postgres -c "/opt/pgsql12/bin/pg_basebackup -h 10.0.0.10 -U repl_user -D /opt/pgsql12/data -X stream -P -R"

Công cụ pg_basebackup sẽ tự động tạo tệp standby.signal và ghi chuỗi kết nối vào postgresql.auto.conf. Để kích hoạt chế độ hot standby, thêm vào postgresql.conf:

hot_standby = on
max_standby_streaming_delay = 30s

Khởi động lại dịch vụ tại cả Primary và Standby.

3.3. Giám Sát Trạng Thái Nhân Bản

Thực thi truy vấn sau trên Primary để xác nhận trạng thái kết nối và độ trễ:

SELECT client_addr, state, sync_state, sent_lsn, replay_lsn 
FROM pg_stat_replication;

4. Sao Lưu và Khôi Phục Cơ Sở Dữ Liệu

Sử dụng utility pg_dump và pg_restore giúp duy trì tính nhất quán logic khi nâng cấp phiên bản hoặc di chuyển môi trường.

4.1. Script Tự Động Hóa Sao Lưu

#!/usr/bin/env bash
set -euo pipefail

TARGET_DB="app_production"
TARGET_USER="app_admin"
BACKUP_DIR="/backups/postgres"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")

mkdir -p "$BACKUP_DIR"
/opt/pgsql12/bin/pg_dump -Fc \
  -U "$TARGET_USER" \
  -h 127.0.0.1 \
  -p 5432 \
  -d "$TARGET_DB" \
  -f "${BACKUP_DIR}/${TARGET_DB}_${TIMESTAMP}.dump"

echo "Backup completed at $(date)"

4.2. Quy Trình Khôi Phục Dữ Liệu

# Tạo container trống tương ứng
/opt/pgsql12/bin/createdb -U postgres -h 127.0.0.1 -p 5432 restored_db

# Nhúng dữ liệu đã dump vào
/opt/pgsql12/bin/pg_restore -U postgres \
  -d restored_db \
  --no-owner \
  --no-privileges \
  -h 127.0.0.1 \
  -p 5432 \
  /backups/postgres/app_production_20231025_143000.dump

Lưu ý: Việc khôi phục yêu cầu phiên bản PostgreSQL đích phải lớn hơn hoặc bằng phiên bản tạo ra file dump. Đối với nâng cấp major version, cần thực hiện Dump/Load từng giai đoạn hoặc sử dụng pg_upgrade.

Thẻ: postgresql-12 yum-dnf-installation source-compilation-linux streaming-replication wal-logging

Đăng vào ngày 14 tháng 10 lúc 01:48