Cách thiết lập sao chép Master-Slave cho PostgreSQL 9.6 trên Ubuntu 16.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ừ cơ sở dữ liệu trên một máy chủ (máy chủ chính) sang cơ sở dữ liệu trên một máy chủ khá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ính 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ủ Ubuntu 16.04. Chúng tôi sẽ sử dụng chế độ chờ Hot 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. Cấu hình tường lửa UFW.
  3. Cấu hình máy chủ MASTER.
  4. Cấu hình máy chủ SLAVE.
  5. Sao chép dữ liệu PostgreSQL từ MASTER sang SLAVE.
  6. Kiểm tra.
Điều kiện tiên quyết:
  • 1 Ubuntu 16.04 serverMASTER - Cho phép Đọc và Ghi - IP: 10.0.15.10
[*] 1 Ubuntu 16.04 server
  • SLAVE - Chỉ Đọc - IP: 10.0.15.11
[*] Quyền Root

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

Trong hướng dẫn này, chúng ta sẽ cài đặt phiên bản mới nhất của PostgreSQL 9.6. Trong kho lưu trữ chính thức của Ubuntu, họ chỉ cung cấp PostgreSQL 9.5, vì vậy chúng ta cần cài đặt phiên bản mới nhất từ kho lưu trữ PostgreSQL trực tiếp.

Thêm kho lưu trữ postgreSQL 9.6 vào thư mục sources.list.d.
Mã:
echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' | tee /etc/apt/sources.list.d/postgresql.list
Và nhập khóa ký PostgreSQL vào hệ thống.
Mã:
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
Bây giờ hãy cập nhật kho lưu trữ hệ thống bằng lệnh apt.
Mã:
apt-get update
Tiếp theo, cài đặt gói PosgreSQL 9.6 bằng lệnh apt bên dưới.
Mã:
apt-get install -y postgresql-9.6 postgresql-contrib-9.6
Nếu quá trình cài đặt đã hoàn tất, hãy thêm nó để tự động bắt đầu khi khởi động.
Mã:
systemctl enable postgresql
Theo mặc định, PostgreSQL đang chạy trên địa chỉ IP localhost (127.0.0.1) với cổng 5432 trên Ubuntu, hãy kiểm tra bằng lệnh netstat.
Mã:
netstat -plntu


PostgreSQL 9.6 đang chạy trên hệ thống. Ở bước tiếp theo, chúng ta phải cấu hình mật khẩu cho người dùng postgres.

Từ tài khoản root, đăng nhập vào người dùng postgres bằng lệnh su, sau đó truy cập vào thiết bị đầu cuối postgres front-end psql.
Mã:
su - postgres
psql
Vui lòng thay đổi mật khẩu cho người dùng postgres và kiểm tra thông tin kết nối bằng các truy vấn postgres bên dưới.
Mã:
\password postgres
\conninfo


PostgreSQL 9.6 đã được cài đặt trên hệ thống, đang chạy mà không có lỗi và mật khẩu cho người dùng postgres đã được cập nhật.

Bước 2 - Cấu hình Tường lửa UFW​

UFW hay Tường lửa đơn giản là một ứng dụng để quản lý tường lửa dựa trên iptables trên Ubuntu. UFW là công cụ cấu hình tường lửa mặc định cho Ubuntu Linux và cung cấp một cách thân thiện với người dùng để cấu hình tường lửa.

Chúng ta có thể cài đặt ufw từ kho lưu trữ Ubuntu chính bằng lệnh apt.
Mã:
apt-get install -y ufw
Thêm các dịch vụ mới vào tường lửa UFW: thêm các dịch vụ SSH và PostgreSQL bằng các lệnh bên dưới.
Mã:
ufw allow ssh
ufw allow postgresql
Bật tường lửa UFW và kiểm tra trạng thái.
Mã:
ufw enable
ufw status


Tường lửa UFW đã được cài đặt và dịch vụ PostgreSQL đã được thêm vào.

LƯU Ý:

Chạy bước 1 và bước 2 trên máy chủ MASTER và SLAVE.

Bước 3 - Cấu hình PostgreSQL MASTER Server​

Máy chủ chính có địa chỉ IP là 10.0.15.10 và dịch vụ postgres sẽ chạy dưới IP đó với cổng mặc định. Máy chủ chính sẽ có quyền ĐỌC và GHI vào cơ sở dữ liệu và thực hiện sao chép luồng đến máy chủ phụ.

Đi đến thư mục cấu hình postgres '/etc/postgresql/9.6/main' và chỉnh sửa tệp postgresql.conf bằng vim.
Mã:
cd /etc/postgresql/9.6/main/
vim postgresql.conf
Bỏ chú thích dòng 'listen_addresses' và thay đổi giá trị thành địa chỉ IP của máy chủ chí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 tôi sẽ sử dụng đồng bộ hóa 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à thay đổi tùy chọn archive_command thành lệnh 'cp %p /var/lib/postgresql/9.6/main/archive/%f'.
Mã:
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f'
Đối với cài đặt 'Sao chép', trong hướng dẫn này, chúng tôi chỉ sử dụng 2 máy chủ, máy chủ chính và máy chủ phụ, bỏ chú thích dòng 'wal_sender' và thay đổi giá trị thành 2, và đối với giá trị 'wal_keep_segments' 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à đổi giá trị thành tên 'pgslave001'.
Mã:
synchronous_standby_names = 'pgslave001'
Lưu tệp và thoát khỏi trình chỉnh sửa.

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 tệp lưu trữ. Tạo một thư mục lưu trữ mới, thay đổi quyền và thay đổi chủ sở hữu thành người dùng postgres.
Mã:
mkdir -p /var/lib/postgresql/9.6/main/archive/
chmod 700 /var/lib/postgresql/9.6/main/archive/
chown -R postgres:postgres /var/lib/postgresql/9.6/main/archive/
Tiếp theo, chỉnh sửa tệp pg_hba.conf để cấu hình xác thực.
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
 
# Địa chỉ IP PostgreSQL SLave
host replication replica 10.0.15.11/32 md5
Lưu và thoát, sau đó khởi động lại PostgreSQL.
Mã:
systemctl restart postgresql
PostgreSQL đang chạy dưới địa chỉ IP 10.0.15.10, hãy kiểm tra bằng lệnh netstat.
Mã:
netstat -plntu


Tiếp theo, tạo một người dùng mới để sao chép. Chúng tôi sẽ tạo một người dùng mới có tên là 'replica' với mật khẩu 'aqwe123@'. Vui lòng chọn một mật khẩu an toàn tại đây để thiết lập! Đăng nhập vào người dùng postgres và truy cập vào thiết bị đầu cuối postgres front-end psql.
Mã:
su - postgres
psql
Tạo người dùng 'replica' mới với mật khẩu 'aqwe123@' bằng truy vấn postgres bên dưới.
Mã:
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'aqwe123@';
Bây giờ hãy kiểm tra người dùng mới bằng truy vấn 'du' bên dưới và bạn sẽ thấy người dùng bản sao có quyền sao chép.
Mã:
\du


Cấu hình máy chủ MASTER đã hoàn tất.

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

Máy chủ SLAVE có địa chỉ IP 10.0.15.11. Và máy chủ này chỉ có quyền ĐỌC đối với cơ sở dữ liệu. Máy chủ cơ sở dữ liệu Postgres sẽ chạy dưới địa chỉ IP của máy chủ, không phải IP localhost.

Dừng dịch vụ postgres trên máy chủ phụ bằng lệnh systemctl bên dưới.
Mã:
systemctl stop postgresql
Đi tới thư mục cấu hình Postgres '/etc/postgresql/9.6/main', sau đó chỉnh sửa tệp cấu hình 'postgresql.conf'.
Mã:
cd /etc/postgresql/9.6/main/
vim postgresql.conf
Bỏ chú thích dòng listen_addresses và thay thế giá trị bằng địa chỉ IP máy chủ phụ 10.0.15.11.
Mã:
listen_addresses = '10.0.15.11'
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 mức đồng bộ hóa, hãy bỏ chú thích ở dòng synchronize_commit và thay đổi giá trị như hiển thị bên dưới.
Mã:
synchronous_commit = local
Đối với cài đặt sao chép, hãy bỏ chú thích ở dòng max_wal_senders và thay thế giá trị bằng '2' vì chỉ sử dụng 2 máy chủ. Và đối với wal_keep_segments, hãy thay đổi giá trị thành '10'.
Mã:
max_wal_senders = 2
wal_keep_segments = 10
Bỏ chú thích ở dòng 'synchronous_standby_names' cho tên ứng dụng và thay đổi giá trị thành tên 'pgslave001'.
Mã:
synchronous_standby_names = 'pgslave001'
Bật hot_standby cho máy chủ phụ bằng cách bỏ chú thích dòng sau và đổi giá trị thành 'on'.
Mã:
hot_standby = on
Lưu tệp và thoát khỏi trình soạn thảo.

Bước 5 - Sao chép dữ liệu PostgreSQL từ MASTER sang SLAVE​

Tiếp theo, chúng ta muốn thay thế thư mục chính postgres trên máy chủ 'SLAVE' bằng thư mục dữ liệu chính từ máy chủ 'MASTER'.

Đăng nhập vào máy chủ SLAVE và truy cập người dùng postgres.
Mã:
su - postgres
Đi tới thư mục dữ liệu postgres 'main' và sao lưu bằng cách đổi tên thư mục.
Mã:
cd 9.6/
mv main main-bekup
Tạo thư mục 'main' mới với tư cách là người dùng 'postgres' và đảm bảo có quyền như thư mục main-bekup.
Mã:
mkdir main/
chmod 700 main/
Tiếp theo, sao chép thư mục chính từ máy chủ MASTER sang máy chủ SLAVE bằng lệnh pg_basebackup, chúng ta sẽ sử dụng người dùng bản sao để thực hiện sao chép dữ liệu này.
Mã:
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/postgresql/9.6/main -P --xlog
Mật khẩu:
Khi quá trình truyền dữ liệu hoàn tất, hãy chuyển đến thư mục dữ liệu chính và tạo một Tệp recovery.conf.
Mã:
cd /var/lib/postgresql/9.6/main/
vim recovery.conf
Dán cấu hình bên dưới:
Mã:
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica password=aqwe123@ application_name=pgslave001'
restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'
Lưu và thoát, sau đó thay đổi quyền của tệp thành 600 bằng lệnh chmod.
Mã:
chmod 600 recovery.conf


Bây giờ hãy khởi động PostgreSQL 9.6 trên máy chủ SLAVE và đảm bảo dịch vụ postgres đang chạy trên địa chỉ IP 10.0.15.11 với netstat.
Mã:
systemctl start postgresql
netstat -plntu


Việc chuyển dữ liệu và cấu hình cho máy chủ SLAVE đã hoàn tất.

Bước 6 - Kiểm tra​

Để kiểm tra, chúng tôi sẽ kiểm tra trạng thái sao chép của PostgreSQL 9.6 và thử tạo một bảng mới trên máy chủ MASTER, sau đó kiểm tra quá trình sao chép bằng cách kiểm tra tất cả dữ liệu từ máy chủ SLAVE.

Đăng nhập vào máy chủ MASTER và đăng nhập vào người dùng postgres.
Mã:
su - postgres
Chạy lệnh psql bên dưới để xem trạng thái sao chép.
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ẽ nhận được kết quả như bên dưới.



Tiếp theo, hãy thử tạo một bảng mới từ máy chủ MASTER. Đăng nhập vào người dùng postgres trên máy chủ chính.
Mã:
su - postgres
psql
Và tạo một bảng mới có tên là 'replica_test' và chèn dữ liệu vào bảng bằng cách chạy các truy vấn postgres bên dưới.
Mã:
CREATE TABLE replica_test (hakase 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');


Tiếp theo, đăng nhập vào người dùng postgres trên máy chủ SLAVE và truy cập thiết bị đầu cuối psql.
Mã:
su - postgres
psql
Kiểm tra dữ liệu trên Bảng 'replica_test' với truy vấn postgres bên dưới.
Mã:
select * from replica_test;
Và bạn sẽ nhận được cùng dữ liệu như trên MASTER, nó được sao chép từ máy chủ MASTER sang máy chủ SLAVE.



Kiểm tra bổ sung:

Kiểm tra để ghi trên máy chủ SLAVE bằng truy vấn bên dưới.
Mã:
INSERT INTO replica_test VALUES ('this is SLAVE');
Và bạn sẽ nhận được thông báo lỗi về truy vấn 'Không thể thực thi INSERT' trên máy chủ SLAVE.

Cài đặt và cấu hình PostgreSQL 9.6 với Master-Slave Replication trên Ubuntu 16.04 Xenial Xerus đã thành công.

Tham khảo​

 
Back
Bên trên