Triển khai Streaming Replication + Load Ballancing + Failover cho PostgreSQL với Pgpool

T.V.T Marine Automation Company Limited, David Tran

Chào các bạn, tiếp theo chuỗi các bài về PostgreSQL, hôm nay tôi hướng dẫn các bạn cách thức xây dựng một hệ thống PostgreSQL có các tính năng sau:

  1. Tự động sao lưu dự phòng kiểu Binary (còn gọi là Streaming/Binary Replication) với mô hình Master <-> Slave
  2. Tự động chuyển đổi slave server thành master server khi master server gặp sự cố
  3. Cân bằng tải các truy vấn chỉ đọc (SELECT) giữa các server (bao gồm cả master và slave).

Để thực hiện theo hướng dẫn ở bài này, bạn sẽ cần có 3 server Linux (có thể ảo hóa cho tiện thao tác và tiết kiệm). Trong đó, server #1 (ospc16) được cài Pgpool II 3.4; server #2 (osspc17) cài PostgreSQL 9.3 và hoạt động với vai trò là master server; server #3 (osspc18) cài PostgreSQL 9.3 và hoạt động với vai trò slave server;

Chuẩn bị Server

Ở bài hướng dẫn này, tôi sử dụng Ubuntu Server 14.04.1 cho cả 3 server. Sau khi cài đặt Ubuntu lên cả 3 server, tôi thực thi các lệnh sau để đảm bảo server của chúng ta ở trạng thái cập nhật mới nhất:

sudo apt-get update; sudo apt-get dist-upgrade -y

Cài đặt PostgreSQL 9.3 lên server #2 và server #3

Để cài đặt postgreSQL 9.3, ta có 2 cách: hoặc cài bằng lệnh apt-get install hoặc tài mã nguồn về và thực hiện việc biên dịch (xem Hướng dẫn biên dịch và cài đặt PostgreSQL 9.2.x trên Ubuntu 12.04 LTS). Trong hướng dẫn này, để đơn giản, tôi cài bằng lệnh apt-get như sau:

sudo apt-get install build-essential libpq-dev postgresql postgresql-server-dev-9.3

 Sau khi cài xong, cần lưu ý đường dẫn đến các thư mục quan trọng của PostgreSQL như sau:

  • data dir: /var/lib/postgresql/9.3/main
  • config dir: /etc/postgresql/9.3/main

Đến đây, chúng ta cần cấu hình để Server #2 và #3 hoạt động ở chế độ master - slave với streaming relication bằng cách điều chỉnh file /etc/postgresql/9.3/main/postgresql.conf trên cả hai server như sau:

listen_address = '*'
hot_standby = on
wal_level = hot_standby
max_wal_senders = 1
Xem thêm Cấu hình Tự sao lưu dự phòng (Asynchronous/Synchronous Streaming Replication) trong PostgreSQL 9.0 + để biết thêm cách thức. Chú ý đường dẫn của data dir và config dir hơi khác do cách cài đặt postgreSQL sử dụng phương pháp biên dịch chứ không phải cài từ apt-get như ở bài này.
Chú ý: Thiết lập pg_hba.conf một cách phù hợp để #1 và #2 có thể SSH lẫn nhau bằng ssh key (không password) qua tài khoản postgres

Cài đặt Pgpool II

Tại thời điểm viết bài này, Pgpool II có phiên bản mới nhất là 3.4. Ở bước này, chúng ta sẽ tiến hành cài đặt pgpool II 3.4 lên server #1 bằng phương pháp biến dịch. Cách làm như sau:

Cài đặt các thư viện cần thiết và trình biên dịch gcc

sudo apt-get install build-essential libpq-dev libssl-dev postgresql-client

Download và giải nén mã nguồn Pgpool trên server #1

sudo su
cd /usr/src
wget http://www.pgpool.net/download.php?f=pgpool-II-3.4.0.tar.gz
mv download.php?f=pgpool-II-3.4.0.tar.gz pgpool-II-3.4.0.tar.gz
tar xvfz pgpool-II-3.4.0.tar.gz
cd pgpool-II-3.4.0

Bắt đầu biên dịch Pgpool

./configure # Nếu bạn muốn Pgpool hỗ trợ OpenSSL có thể thêm tham số --with-openssl
make
make install
cp ./src/sample/pgpool.conf.sample-stream /usr/local/etc/pgpool.conf
cp ./src/sample/pcp.conf.sample /usr/local/etc/pcp.conf

Cài đặt Pgpool Extensions lên PostgreSQL server (#2 và #3)

Download mã nguồn Pgpool 3.4 về cả 2 PostgreSQL server này và thực hiện việc cài đặt các extensions của Pgpool cho cả 2 server bằng cách thực hiện lần lượt các lệnh sau trên từng server:

sudo su
cd /usr/src
wget http://www.pgpool.net/download.php?f=pgpool-II-3.4.0.tar.gz
mv download.php?f=pgpool-II-3.4.0.tar.gz pgpool-II-3.4.0.tar.gz
tar xvfz pgpool-II-3.4.0.tar.gz
cd /usr/src/pgpool-II-3.4.0/src/sql/pgpool-recovery
make
make install
psql -U postgres -f pgpool-recovery.sql template1
cd ../pgpool-regclass
make
make install
psql -U postgres -f pgpool-regclass.sql template1

 Đến đây, bước cài đặt & chuẩn bị các server đã hoàn tất. Chúng ta có thể bắt đầu các bước tiếp theo.

Cài đặt PgpoolAdmin

PgpoolAdmin là một công cụ được viết bằng PHP để quản lý Pgpool. PgpoolAdmin phải được cài trực tiếp trên server cài Pgpool (cụ thể: server #1). Các chức năng PgpoolAdmin cung cấp bao gồm: theo dõi, khởi động, tắt, thay đổi cấu hình Pgpool

Để cài đặt Pgpool, chúng ta cần cài webserver hỗ trợ PHP (có thể sử dụng PHP + Apache hoặc PHP-FPM + Nginx). Trong phạm vi bài này, tôi sử dụng PHP-FPM với NginX và sẽ cài đặt PgpoolAdmin vào thư mục /var/www/pgpooladmin lên server #1.

Nếu bạn chưa biết cách cài đặt NginX, xem thêm Hướng dẫn biên dịch và cấu hình NginX trên Ubuntu Server
Khi tạo tài khoản nginx, hãy tạo bằng lệnh sau để có thể login và tài khoản nginx: adduser --disabled-password --home /var/www --shell /bin/bash --system --group nginx.
Quan trọng: Bạn cần cài đặt gói php5-pgsql để PHP có thể giao tiếp với PostgreSQL.
cd /var/www
wget http://www.pgpool.net/download.php?f=pgpoolAdmin-3.4.0.tar.gz
mv download.php?f=pgpoolAdmin-3.4.0.tar.gz pgpoolAdmin-3.4.0.tar.gz
tar xvfz pgpoolAdmin-3.4.0.tar.gz
chown -hR nginx: pgpoolAdmin-3.4.0 # Do php-fpm tôi cấu hình thực thi bằng tài khoản nginx
cd pgpoolAdmin-3.4.0
chmod 777 templates_c
chmod 644 conf/pgmgt.conf.php

 Cấu hình cho phép pgpoolAdmin tương tác với Pgpool

chown nginx /usr/local/etc/pgpool.conf # vì php-fpm được thực thi bằng tài khoản nginx
chown nginx /usr/local/etc/pcp.conf # vì php-fpm được thực thi bằng tài khoản nginx

 

[Bài còn tiếp]