Cách cài đặt và cấu hình PostgreSQL Replication với Hot Standby trên Ubuntu 15.04

theanh

Administrator
Nhân viên
PostgreSQL hay Postgres là một hệ thống quản lý cơ sở dữ liệu quan hệ đối tượng (ORDBMS) mã nguồn mở với hơn 15 năm phát triển tích cực. Đây là một máy chủ cơ sở dữ liệu mạnh mẽ và có thể xử lý khối lượng công việc cao. PostgreSQL có thể được sử dụng trên các máy chủ Linux, Unix, BSD và Windows.

Sao chép cơ sở dữ liệu chủ/tớ là một quá trình sao chép (đồng bộ hóa) dữ liệu từ một cơ sở dữ liệu trên một máy chủ (chủ) sang một cơ sở dữ liệu trên một máy chủ khác (các máy chủ tớ). Lợi ích chính của quá trình này là phân phối cơ sở dữ liệu cho nhiều máy, do đó khi máy chủ chủ gặp sự cố, sẽ có một máy sao lưu với cùng dữ liệu có sẵn để xử lý các yêu cầu mà không bị gián đoạn.

PostgreSQL cung cấp một số cách để sao chép cơ sở dữ liệu. Nó có thể được sử dụng cho mục đích sao lưu và cung cấp máy chủ cơ sở dữ liệu có tính khả dụng cao. Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt và cấu hình sao chép PostgreSQL bằng cách sử dụng chế độ chờ nóng. Chế độ chờ nóng dễ cấu hình và là điểm khởi đầu rất tốt để tìm hiểu sâu về PostgreSQL.



Chế độ chờ nóng yêu cầu 2 máy chủ cơ sở dữ liệu, chúng tôi sẽ sử dụng Ubuntu làm hệ điều hành trên cả hai máy chủ.
  1. Máy chủ chính - chấp nhận kết nối từ máy khách với quyền đọc và ghi.
  2. Máy chủ phụ - máy chủ dự phòng chạy bản sao dữ liệu từ máy chủ chính với quyền chỉ đọc.


Điều kiện tiên quyết
  • 2 máy chủ Ubuntu - 1 cho máy chủ chính và 1 cho máy chủ phụ.
  • Quyền root trên máy chủ.
  • Một số kiến thức cơ bản về Ubuntu, apt, v.v.

Bước 1 - Thiết lập Tên máy chủ​

Đăng nhập vào cả hai máy chủ bằng ssh:
Mã:
ssh user@masterip
ssh user@slaveip
Bây giờ hãy thiết lập tên máy chủ cho cả hai máy chủ - máy chủ chính và máy chủ phụ - bằng lệnh hostnamectl.

Trên máy chủ chính:
Mã:
sudohostnamectl set-hostname master-server
Trên máy chủ phụ:
Mã:
sudohostnamectl set-hostname slave-server
Tiếp theo, chỉnh sửa tệp /etc/hosts bằng trình soạn thảo vim:
Mã:
sudo vim /etc/hosts
Dán cấu hình này cho máy chủ chính:
Mã:
192.168.1.249 master-server
Dán cấu hình này cho máy chủ phụ:
Mã:
192.168.1.248 slave-server
Lưu tệp và thoát khỏi trình chỉnh sửa.


Bước 2 - Cài đặt PostgreSQL trên Máy chủ chính và Máy chủ phụ​

Trước khi bắt đầu cài đặt PostgreSQL, hãy cập nhật kho lưu trữ Ubuntu:
Mã:
sudo apt-get update
Tiếp theo, cài đặt PostgreSQL với tất cả các thành phần phụ thuộc của nó:
Mã:
sudo apt-get install postgresql postgresql-client postgresql-contrib
Sau khi Postgres được cài đặt, hãy cung cấp mật khẩu mới cho người dùng postgres (được tạo tự động khi cài đặt).
Mã:
passwd postgres
Nhập mật khẩu người dùng postgres của bạn.

Bây giờ hãy thử nghiệm PostgreSQL:
Mã:
su - postgres
psql
\conninfo
Bạn sẽ thấy kết quả bên dưới:




Bước 3 - Cấu hình máy chủ chính​

Trong bước này, chúng ta sẽ cấu hình 'máy chủ chính' với địa chỉ IP '192.168.1.249'. Chúng ta sẽ tạo một người dùng/vai trò mới với quyền đặc biệt để thực hiện sao chép, sau đó chúng ta chỉnh sửa tệp cấu hình PostgreSQL để bật chế độ sao chép dự phòng nóng.

Từ quyền root, chuyển sang người dùng PostgreSQL bằng lệnh su:
Mã:
su - postgres
Truy cập shell Postgres bằng lệnh psql và nhập truy vấn PostgreSQL này để tạo người dùng/vai trò mới:
Mã:
psql
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'replicauser@';
Kiểm tra người dùng bản sao mới bằng lệnh PostgreSQL bên dưới:
Mã:
\du
Người dùng bản sao mới đã được tạo.



Tiếp theo, hãy đến thư mục PostgreSQL '/etc/postgresql/9.4/main' để chỉnh sửa tệp cấu hình.
Mã:
cd /etc/postgresql/9.4/main/
Mở tệp postgresql.conf bằng vim:
Mã:
vim postgresql.conf
Bỏ chú thích dòng 59 và thêm địa chỉ IP của máy chủ.
Mã:
listen_addresses = 'localhost,192.168.1.249'
Trong thiết lập WAL (Write Ahead Log) dòng 175, bỏ chú thích và đổi giá trị thành hot_standby.
Mã:
wal_level = hot_standby
Trong phần điểm kiểm tra dòng 199, bỏ chú thích 'checkpoint_segments' và đổi giá trị thành 8.
Mã:
checkpoint_segments = 8
Trong phần lưu trữ dòng 206 và 208, bật tùy chọn lưu trữ và thêm lệnh lưu trữ.
Mã:
archive_mode = on
archive_command = 'cp -i %p /var/lib/postgresql/9.4/main/archive/%f'
Trong phần sao chép dòng 224 và 226, hãy thay đổi giá trị thành số lượng tối đa của quy trình gửi WAL.
Mã:
max_wal_senders = 3
wal_keep_segments = 8
Lưu tệp và thoát khỏi vim.

Bây giờ hãy tạo một thư mục mới bên trong thư mục 'main' để cấu hình lưu trữ - chạy lệnh bên dưới với tư cách là người dùng postgres:
Mã:
mkdir -p /var/lib/9.4/main/archive/
Tiếp theo, hãy chỉnh sửa tệp pg_hba.conf để cho phép kết nối sao chép.
Mã:
vim pg_hba.conf
Cuối dòng, hãy thêm cấu hình mới cho người dùng 'replica' để tạo kết nối.
Mã:
host replication replica 192.168.1.248/24 md5
#192.168.1.248 là địa chỉ IP của máy chủ phụ
Lưu và thoát.


Bước 4 - Cấu hình máy chủ phụ​

Cấu hình máy chủ phụ giống như máy chủ chính. Sử dụng su để trở thành người dùng postgres và đi đến thư mục cấu hình PostgreSQL.
Mã:
su - postgres
cd /etc/postgresql/9.4/main/
Chỉnh sửa postgresql.conf bằng vim:
Mã:
vim postgresql.conf
Bỏ chú thích dòng 59 và thêm địa chỉ IP của máy chủ phụ.
Mã:
listen_addresses = 'localhost,192.168.1.248'
Đi đến dòng 175 và bỏ chú thích cài đặt wal_level, thay đổi giá trị thành hot_standby.
Mã:
wal_level = hot_standby
Bỏ chú thích dòng 199 trên phần điểm kiểm tra.
Mã:
checkpoint_segments = 8
Bỏ chú thích dòng 224 và 226 để cấu hình Tiến trình max_wal_sender.
Mã:
max_wal_senders = 3
wal_keep_segments = 8
Bỏ chú thích dòng 245 để bật chế độ hot_standby trên máy chủ phụ.
Mã:
hot_standby = on
Lưu và thoát.


Bước 5 - Đồng bộ hóa dữ liệu từ máy chủ chính sang máy chủ phụ​

Trong bước này, chúng ta sẽ di chuyển thư mục dữ liệu PostgreSQL '/var/lib/postgresql/9.4/main' đến một thư mục sao lưu rồi thay thế bằng dữ liệu chính mới nhất bằng lệnh 'pg_basebackup'.

Chỉ chạy tất cả các lệnh bên dưới trên máy chủ phụ!

Dừng PostgreSQL trên máy chủ phụ:
Mã:
systemctl stop postgresql
Bây giờ hãy đăng nhập vào người dùng postgres và đổi tên thư mục 'main' thành 'main_original' làm bản sao lưu.
Mã:
su - postgres
mv 9.4/main 9.4/main_original
Chạy lệnh bên dưới để sao chép dữ liệu từ máy chủ chính sang máy chủ phụ:
Mã:
pg_basebackup -h 192.168.1.249 -D /var/lib/postgresql/9.4/main -U replica -v -P



Lưu ý:
  • 192.168.1.249 là địa chỉ IP của máy chủ chính.
  • Và bạn sẽ được nhắc nhập mật khẩu cho người dùng 'replica' để sao chép.
Đi đến thư mục 'main' mới và tạo tệp khôi phục mới 'recovery.conf' với vim:
Mã:
cd /var/lib/postgresql/9.4/main/
vim recovery.conf
Dán cấu hình bên dưới:
Mã:
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.249 port=5432 user=replica password=replicauser@'
restore_command = 'cp //var/lib/postgresql/9.4/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'
Bây giờ quay lại người dùng root với lệnh exit và khởi động PostgreSQL bằng lệnh systemctl:
Mã:
exit
systemctl start postgresql
Đảm bảo không có lỗi nào sau khi chạy lệnh start.


Bước 6 - Kiểm tra​

Truy cập máy chủ chính và đăng nhập vào người dùng postgres, sau đó chạy lệnh bên dưới để xem thông tin sao chép.
Mã:
su - postgres
psql -x -c "select * from pg_stat_replication;"
Bạn sẽ thấy thông tin sao chép bên dưới:



Tiếp theo, hãy kiểm tra để tạo cơ sở dữ liệu mới từ máy chủ chính rồi kiểm tra xem cơ sở dữ liệu đó có tồn tại trên máy chủ phụ hay không.
Mã:
su - postgres
psql
create database howtoforge;


Bây giờ hãy đăng nhập vào máy chủ phụ và kiểm tra xem cơ sở dữ liệu 'howtoforge' đã được tự động phản chiếu sang máy chủ phụ hay chưa.
Mã:
su - postgres
psql
\list


Cơ sở dữ liệu đã được sao chép từ máy chủ chính sang máy chủ phụ máy chủ.


Tham khảo​

 
Back
Bên trên