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:
- 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
- Tự động chuyển đổi slave server thành master server khi master server gặp sự cố
- 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
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
Để 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.
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
.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]
Triển khai Streaming Replication + Load Ballancing + Failover cho PostgreSQL với Pgpool