Cách cài đặt và cấu hình Master-Slave Replication với PostgreSQL 9.6 trên CentOS 7

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ẽ 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ừ cơ sở dữ liệu trên một máy chủ (chủ) sang cơ sở dữ liệu trên một máy chủ khác (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 có cùng dữ liệu để 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, chúng tôi sẽ chỉ cho bạn cách cài đặt và cấu hình sao chép Chủ-Tớ PostgreSQL 9.6 trên máy chủ CentOS 7. Chúng tôi sẽ sử dụng chế độ chờ Nóng và đây là điểm khởi đầu rất tốt để tìm hiểu sâu hơn về PostgreSQL.

Những gì chúng tôi sẽ làm​

  1. Cài đặt PostgreSQL 9.6
  2. Khởi động và cấu hình PostgreSQL 9.6
  3. Cấu hình Firewalld
  4. Cấu hình máy chủ Master
  5. Cấu hình máy chủ Slave
  6. Kiểm tra

Điều kiện tiên quyết​

  • 1 máy chủ CentOS 7Master - Quyền đọc và ghi - IP: 10.0.15.10
[*] 1 máy chủ CentOS 7
  • Slave - Chỉ Quyền đọc - IP: 10.0.15.11
[*] Root Quyền

Bước 1 - Cài đặt PostgreSQL 9.6​

Trong hướng dẫn này, chúng ta sẽ thảo luận về cách cài đặt PostgreSQL phiên bản 9.6 mới nhất trên máy chủ CentOS 7. Theo mặc định, kho lưu trữ chính thức của CentOS cung cấp phiên bản cũ hơn, vì vậy chúng ta cần cài đặt PostgreSQL từ kho lưu trữ chính thức.

Thêm kho lưu trữ PostgreSQL 9.6 mới vào hệ thống.
Mã:
yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Bây giờ hãy cài đặt PostgreSQL 9.6 bằng lệnh yum sau.
Mã:
yum -y install postgresql96-server postgresql96-contrib
Như vậy, bạn có thể cài đặt PostgreSQL 9.6.

Bước 2 - Khởi động và cấu hình PostgreSQL 9.6​

Trước khi khởi động dịch vụ postgres, chúng ta cần khởi tạo cơ sở dữ liệu. Để thực hiện việc này, hãy vào thư mục '/usr/pgsql-9.6/bin' và khởi tạo cơ sở dữ liệu bằng lệnh postgres setup 'postgresql96-setup'.
Mã:
cd /usr/pgsql-9.6/bin
./postgresql96-setup initdb
Tiếp theo, hãy khởi động dịch vụ postgres và cho phép dịch vụ này tự động khởi động khi hệ thống khởi động.
Mã:
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
Theo mặc định, postgres chạy trên cổng 5432. Vì vậy, hãy đảm bảo trạng thái cổng 5432 là 'LISTEN' bằng cách thực hiện lệnh netstat theo cách sau.
Mã:
netstat -plntu


Nếu bạn không có lệnh netstat, hãy cài đặt net-tools. Nó là một phần của net-tools.
Mã:
yum -y install net-tools
Vì vậy, PostgreSQL 9.6 đã được khởi động. Nhưng chúng ta vẫn cần cấu hình mật khẩu cho người dùng postgres. Đăng nhập với tư cách là người dùng 'postgres', sau đó truy cập shell 'psql' của postgres.
Mã:
su - postgres
psql
Cung cấp mật khẩu mới cho người dùng 'postgres' bằng truy vấn bên dưới.
Mã:
\password postgres
Nhập mật khẩu mới:


Vậy là PostgreSQL 9.6 đã được khởi động và mật khẩu mới cho người dùng postgres đã được cấu hình.

Bước 3 - Cấu hình Firewalld​

Firewalld là công cụ quản lý tường lửa mặc định trên CentOS 7. Chúng tôi sẽ khởi động dịch vụ này và mở cổng để kết nối PostgreSQL.

Khởi động firewalld và cho phép nó tự động khởi động khi khởi động hệ thống bằng các lệnh sau:
Mã:
systemctl start firewalld
systemctl enable firewalld
Tiếp theo, thêm dịch vụ postgres mới vào firewalld bằng các lệnh sau.
Mã:
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
Bây giờ hãy kiểm tra cổng mở của dịch vụ.
Mã:
firewall-cmd --list-all
Và bạn sẽ thấy dịch vụ PostgreSQL đã được thêm vào firewalld.



LƯU Ý: Chạy Bước 1, Bước 2 và Bước 3 trên tất cả Máy chủ chính và Máy chủ phụ.

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

Trong bước này, chúng ta sẽ cấu hình một máy chủ chính để sao chép. Đây là máy chủ chính, cho phép quá trình đọc và ghi từ các ứng dụng chạy trên đó. PostgreSQL trên máy chủ chính chỉ chạy trên địa chỉ IP '10.0.15.10' và thực hiện sao chép luồng đến máy chủ phụ.

Đi đến thư mục dữ liệu pgsql '/var/lib/pgsql/9.6/data' và chỉnh sửa tệp cấu hình 'postgresql.conf'.
Mã:
cd /var/lib/pgsql/9.6/data
vim postgresql.conf
Bỏ chú thích dòng 'listen_addresses' và thay đổi giá trị của địa chỉ IP máy chủ thành '10.0.15.10'.
Mã:
listen_addresses = '10.0.15.10'
Bỏ chú thích dòng 'wal_level' và thay đổi giá trị thành 'hot_standby'.
Mã:
wal_level = hot_standby
Đối với Ở cấp độ đồng bộ hóa, chúng ta sẽ sử dụng đồng bộ cục bộ. Bỏ chú thích và thay đổi giá trị dòng như bên dưới.
Mã:
synchronous_commit = local
Bật chế độ lưu trữ và cung cấp cho biến archive_command một lệnh làm giá trị.
Mã:
archive_mode = on
 archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'
Đối với cài đặt 'Sao chép', bỏ chú thích dòng 'wal_sender' và thay đổi giá trị thành 2 (trong hướng dẫn này, chúng tôi chỉ sử dụng 2 máy chủ chính và phụ), và đối với 'wal_keep_segments', giá trị là 10.
Mã:
max_wal_senders = 2
 wal_keep_segments = 10
Đối với tên ứng dụng, bỏ chú thích dòng 'synchronous_standby_names' và thay đổi giá trị thành 'pgslave01'.
Mã:
synchronous_standby_names = 'pgslave01'
Chỉ vậy thôi. Lưu những thay đổi này và thoát khỏi trình soạn thảo.

Tiếp theo, trong tệp postgresql.conf, chế độ lưu trữ được bật, vì vậy chúng ta cần tạo một thư mục mới cho mục đích lưu trữ.

Tạo một thư mục mới, thay đổi quyền của thư mục đó và thay đổi chủ sở hữu thành người dùng postgres.
Mã:
mkdir -p /var/lib/pgsql/9.6/archive/
chmod 700 /var/lib/pgsql/9.6/archive/
chown -R postgres:postgres /var/lib/pgsql/9.6/archive/
Bây giờ hãy chỉnh sửa tệp pg_hba.conf.
Mã:
vim pg_hba.conf
Dán cấu hình bên dưới vào cuối dòng.
Mã:
# Localhost
 host replication replica 127.0.0.1/32 md5
 
 # PostgreSQL Master IP address
 host replication replica 10.0.15.10/32 md5
 
 # PostgreSQL SLave IP address
 host replication replica 10.0.15.11/32 md5
Lưu và thoát. Toàn bộ cấu hình đã hoàn tất. Bây giờ, hãy khởi động lại PostgreSQL 9.6 bằng lệnh sau.
Mã:
systemctl restart postgresql-9.6


Tiếp theo, chúng ta cần tạo một người dùng mới có quyền sao chép. Chúng ta sẽ tạo một người dùng mới có tên là 'replica'.

Đăng nhập với tư cách là người dùng postgres và tạo một người dùng 'replica' mới với mật khẩu 'aqwe123@'.
Mã:
su - postgres
createuser --replication -P replica
Nhập mật khẩu mới:


Như vậy, cấu hình PostgreSQL 9.6 Master đã hoàn tất và người dùng để sao chép đã được tạo.

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

Trong bước này, chúng ta sẽ cấu hình máy chủ Slave. Chúng tôi muốn thay thế thư mục dữ liệu postgres trên máy chủ phụ bằng dữ liệu postgres từ máy chủ chính, sau đó cấu hình máy chủ phụ để chạy dưới địa chỉ IP '10.0.15.11' và cuối cùng bật hot_standby trên đó để chỉ cho phép đọc mà không ghi.

Trước khi bắt đầu cấu hình máy chủ phụ, hãy dừng dịch vụ postgres bằng lệnh systemctl bên dưới.
Mã:
systemctl stop postgresql-9.6
Sau đó, hãy đến thư mục postgres và sao lưu thư mục dữ liệu.
Mã:
cd /var/lib/pgsql/9.6/
mv data data-backup
Tạo thư mục dữ liệu mới và thay đổi quyền sở hữu thư mục thành người dùng postgres.
Mã:
mkdir -p data/
chmod 700 data/
chown -R postgres:postgres data/
Tiếp theo, hãy đăng nhập với tư cách là người dùng postgres và sao chép toàn bộ thư mục dữ liệu từ máy chủ 'Master' sang máy chủ 'Slave' với tư cách là người dùng bản sao.
Mã:
su - postgres
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
Mật khẩu:
Nhập mật khẩu của bạn và đợi dữ liệu được truyền từ máy chủ chính sang máy chủ phụ.



Sau khi quá trình truyền dữ liệu hoàn tất, hãy đến thư mục dữ liệu postgres và chỉnh sửa tệp postgresql.conf trên máy chủ phụ.
Mã:
cd /var/lib/pgsql/9.6/data/
vim postgresql.conf
Thay đổi giá trị của 'listen_addresses' thành địa chỉ ip của máy chủ phụ '10.0.15.11'.
Mã:
listen_addresses = '10.0.15.11'
Bật 'hot_standby' trên máy chủ phụ bằng cách bỏ chú thích dòng sau và thay đổi giá trị thành 'on'.
Mã:
hot_standby = bật
Vậy là xong. Lưu các thay đổi và thoát khỏi trình soạn thảo.

Sau đó tạo tệp 'recovery.conf' mới bằng vim.
Mã:
vim recovery.conf
Dán cấu hình sau vào đó.
Mã:
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica password=aqwe123@ application_name=pgslave01'
trigger_file = '/tmp/postgresql.trigger.5432'
Lưu các thay đổi và thoát khỏi tệp.

Lưu ý: Trên primary_conninfo, hãy nhập thông tin chi tiết về máy chủ của riêng bạn.

Thay đổi quyền sở hữu tệp recovery.conf thành quyền của người dùng 'postgres'.
Mã:
chmod 600 recovery.conf
chown postgres:postgres recovery.conf
Và khởi động PostgreSQL 9.6 trên máy chủ phụ.
Mã:
systemctl start postgresql-9.6
Cấu hình máy chủ phụ đã hoàn tất.

Bây giờ khi bạn kiểm tra máy chủ phụ, bạn sẽ thấy PostgreSQL 9.6 đang chạy trên máy chủ có địa chỉ IP là '10.0.15.11'.
Mã:
netstat -plntu

Bước 6 - Kiểm tra​

Cài đặt và cấu hình cho bản sao Master-Slave PostgreSQL 9.6 đã hoàn tất. Để kiểm tra thiết lập, hãy kiểm tra luồng trạng thái của bản sao và kiểm tra sao chép dữ liệu từ Master sang Slave.

Đăng nhập vào máy chủ Master và chuyển sang người dùng postgres.
Mã:
su - postgres
Tiếp theo, hãy kiểm tra sao chép trạng thái phát trực tuyến của PostgreSQL bằng các lệnh sau.
Mã:
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"
Bạn sẽ thấy giá trị trạng thái là 'streaming' và sync_state là 'sync'.



Tiếp theo, hãy kiểm tra bằng cách chèn dữ liệu từ máy chủ master rồi kiểm tra tất cả dữ liệu trên máy chủ slave.

Đăng nhập với tư cách là người dùng postgres và truy cập shell PostgreSQL trên Máy chủ 'MASTER'.
Mã:
su - postgres
psql
Tạo bảng mới 'replica_test' và chèn một số dữ liệu vào đó bằng các truy vấn chèn sau.
Mã:
CREATE TABLE replica_test (test varchar(100));
INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT INTO replica_test VALUES ('Đây là từ Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');


Và bây giờ hãy đăng nhập vào máy chủ 'SLAVE' tương tự như cách bạn đã làm trên máy chủ chính.
Mã:
su - postgres
psql
Kiểm tra tất cả dữ liệu từ bảng 'replica_test' sử dụng truy vấn bên dưới.
Mã:
select * from replica_test;


Vì vậy, bạn sẽ thấy rằng tất cả dữ liệu được sao chép từ máy chủ 'MASTER' sang máy chủ 'SLAVE'.

Kiểm tra bổ sung​

Kiểm tra để thực hiện hành động 'WRITE' từ máy chủ 'SLAVE'.
Mã:
INSERT INTO replica_test VALUES ('this is SLAVE');
Và kết quả sẽ là 'Không thể thực hiện INSERT'.

Vì vậy, quá trình cài đặt và cấu hình PostgreSQL 9.6 Master-Slave Replication trên CentOS 7 đã thành công.

Tham khảo​

 
Back
Bên trên