Cách thiết lập PostgreSQL Replication trên Debian 11

theanh

Administrator
Nhân viên
PostgreSQL là một hệ thống quản lý cơ sở dữ liệu mã nguồn mở và miễn phí tập trung vào khả năng mở rộng và tuân thủ SQL. PostgreSQL là một RDBMS (Hệ thống quản lý cơ sở dữ liệu quan hệ) tiên tiến và cấp doanh nghiệp hỗ trợ cả truy vấn SQL (quan hệ) và JSON (phi quan hệ).

Đây là một hệ thống quản lý cơ sở dữ liệu cấp doanh nghiệp và cực kỳ ổn định, cung cấp nhiều giải pháp khác nhau cho phép bạn thiết lập tính khả dụng cao và khả năng chuyển đổi dự phòng. PostgreSQL được sử dụng làm cơ sở dữ liệu chính cho các ứng dụng web, ứng dụng di động và ứng dụng phân tích. Hệ thống này nổi tiếng về độ tin cậy, tính linh hoạt, tính năng mạnh mẽ và hiệu suất.

Trong hướng dẫn này, tôi sẽ cài đặt và thiết lập Bản sao logic của máy chủ cơ sở dữ liệu PostgreSQL thông qua pglogical2 trên hai máy chủ Debian 11. Bạn sẽ cài đặt máy chủ PostgreSQL với gói mở rộng pglogical, sau đó thiết lập bản sao giữa hai hoặc nhiều máy chủ PostgreSQL.

pglogical là một phần mở rộng của PostgreSQL cho phép bạn thiết lập bản sao luồng logic ở cấp cơ sở dữ liệu. Nó sử dụng mô hình publish/subscribe để sao chép. Với phần mở rộng pglogical, thay vào đó, sao chép dữ liệu có sẵn trên PostgreSQL, bạn sẽ sao chép và đồng bộ hóa các bảng cụ thể trên cơ sở dữ liệu có sẵn của mình với các máy chủ PostgreSQL khác.

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

Để hoàn thành hướng dẫn này, bạn phải có các yêu cầu sau:
  • Hai hoặc nhiều máy chủ Debian 11.
  • Người dùng không phải root có quyền quản trị viên sudo/root.
Ví dụ này sử dụng hai máy chủ Debian với thông tin chi tiết sau:
Mã:
Hostname IP Address Used as
------------------------------------------
pgdg01 192.168.5.25 Publisher Node
pgdg02 192.168.5.26 Subscriber Node
Khi máy chủ đã sẵn sàng, giờ bạn có thể bắt đầu cài đặt và cấu hình PostgreSQL Replication thông qua pglogical.

Thiết lập /etc/hosts và kho lưu trữ PostgreSQL​

Ví dụ này sẽ giả định rằng bạn đang sử dụng máy chủ Debian 11 mới, vì vậy điều đầu tiên bạn sẽ làm là thiết lập kho lưu trữ PostgreSQL và cài đặt PostgreSQL vào tất cả các hệ thống Debian của bạn.

Bạn phải chạy các bước sau trên tất cả các máy chủ Debian của mình.

Để bắt đầu, hãy mở tệp cấu hình '/etc/hosts' bằng trình chỉnh sửa nano sau lệnh.
Mã:
sudo nano /etc/hosts
Thêm các dòng sau vào tệp và đảm bảo thay đổi chi tiết của địa chỉ IP và tên máy chủ.
Mã:
192.168.5.25 pgdg01
192.168.5.26 pgdg02
Lưu và đóng tệp '/etc/hosts' khi hoàn tất.

Tiếp theo, nhập lệnh apt sau để cài đặt một số phụ thuộc cơ bản. Nhập y khi được nhắc và nhấn ENTER để tiếp tục.
Mã:
sudo apt install wget gnupg2 lsb-release curl apt-transport-https ca-certificates

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22319%22%3E%3C/svg%3E


Bây giờ hãy chạy lệnh sau để thêm khóa GPG PostgreSQL và kho lưu trữ cho Debian máy chủ.
Mã:
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/pgdg.gpg > /dev/null 2>&1
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Sau đó, hãy cập nhật và làm mới chỉ mục gói của bạn để áp dụng các thay đổi.
Mã:
sudo apt update
Khi được thêm vào, bạn sẽ thấy kho lưu trữ PostgreSQL trong danh sách.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22166%22%3E%3C/svg%3E


Sau khi thêm kho lưu trữ PostgreSQL, bước tiếp theo bạn sẽ cài đặt máy chủ PostgreSQL và tiện ích mở rộng pglogical.

Cài đặt PostgreSQL và tiện ích mở rộng pglogical​

Theo mặc định, kho lưu trữ PostgreSQL chính thức cung cấp nhiều phiên bản PostgreSQL như PostgreSQL 13, 14 và 15. Đối với ví dụ này, bạn sẽ cài đặt và thiết lập sao chép PostgreSQL với phiên bản PostgreSQL 15 mới nhất.

Nhập lệnh 'apt install' sau để cài đặt Máy chủ PostgreSQL. Nhập y để xác nhận cài đặt và nhấn ENTER để tiếp tục.
Mã:
sudo apt install postgresql

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22255%22%3E%3C/svg%3E


Khi quá trình cài đặt hoàn tất, hãy nhập tiện ích lệnh systemctl sau để xác minh máy chủ PostgreSQL và đảm bảo rằng dịch vụ đã được bật và đang chạy.
Mã:
sudo systemctl is-enabled postgresql
sudo systemctl status postgresql
Đầu ra 'enabled' xác nhận rằng dịch vụ PostgreSQL đã được bật và sẽ tự động khởi động khi hệ thống khởi động. Và đầu ra 'active (running)' xác nhận rằng dịch vụ PostgreSQL hiện tại đang chạy.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22214%22%3E%3C/svg%3E


Tiếp theo, nhập lệnh apt sau để cài đặt gói mở rộng pglogical. Nếu bạn đang sử dụng phiên bản PostgreSQL khác, bạn nên thay thế số gói như 'postgresql-version-pglogical'.
Mã:
sudo apt install postgresql-15-pglogical
Nhập y khi được nhắc và nhấn ENTER để tiếp tục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22744%22%20height=%22245%22%3E%3C/svg%3E


Sau khi PostgreSQL đã chạy và tiện ích mở rộng pglogical đã được cài đặt. Bạn đã sẵn sàng bắt đầu cấu hình sao chép luồng logic bằng pglogical.

Thiết lập Tường lửa UFW​

Trước khi cấu hình máy chủ PostgreSQL, bây giờ bạn phải thiết lập tường lửa ufw để bảo mật và giới hạn kết nối đến máy chủ PostgreSQL của bạn. Với điều này, bạn sẽ chỉ có kết nối từ các mạng đáng tin cậy của mình, được bảo mật bởi triển khai PostgreSQL của bạn.

Để cài đặt ufw, hãy nhập lệnh apt sau. Khi được nhắc, hãy nhập y để xác nhận và nhấn ENTER để tiếp tục.
Mã:
sudo apt install ufw
Tiếp theo, nhập lệnh ufw sau để mở dịch vụ OpenSSH. Và đầu ra 'Rule added' xác nhận rằng quy tắc mới đã được thêm vào ufw.
Mã:
sudo ufw allow OpenSSH
Bây giờ hãy nhập lệnh ufw sau để cho phép các mạng đáng tin cậy của bạn truy cập vào máy chủ PostgreSQL 5432. Hãy đảm bảo thay đổi địa chỉ IP trong lệnh sau.
Mã:
sudo ufw allow from 192.168.5.0/24 to any port 5432
Tiếp theo, hãy nhập lệnh sau để bắt đầu và bật tường lửa ufw. Khi được nhắc xác nhận, hãy nhập y và nhấn ENTER để tiếp tục.
Mã:
sudo ufw enable
Đầu ra 'Firewall is running and enabled' xác nhận rằng ufw đang chạy và cũng được bật, điều này có nghĩa là tường lửa ufw sẽ tự động khởi động khi hệ thống khởi động.

Bây giờ bạn có thể xác minh trạng thái và danh sách các cổng được bật trên ufw bằng cách nhập lệnh sau lệnh.
Mã:
sudo ufw status
Bạn sẽ thấy tường lửa ufw 'Trạng thái: Hoạt động' với dịch vụ OpenSSH và cổng máy chủ PostgreSQL '5432' đã được thêm và có sẵn trên tường lửa ufw.

Cấu hình PostgreSQL để Bật Sao chép​

WAL hay Ghi nhật ký trước là phương pháp đảm bảo tính toàn vẹn của dữ liệu trên máy chủ PostgreSQL. Bất kỳ thay đổi nào đối với bảng và chỉ mục chỉ được ghi sau khi những thay đổi đó đã được ghi nhật ký.

Trong PostgreSQL, có ba phương pháp WAL mà bạn có thể sử dụng để bật tính năng sao chép.
  • Cài đặt WAL mặc định là 'bản sao', cho phép bạn thiết lập lưu trữ và sao chép, đồng thời cho phép bạn chạy các truy vấn chỉ đọc trên máy chủ dự phòng.
  • Tối thiểu cho phép bạn xóa mọi bản ghi nhật ký ngoại trừ một số thông tin quan trọng sẽ được khôi phục sau sự cố hoặc tắt máy ngay lập tức.
  • Phương pháp logic cho phép bạn thêm một số thông tin vào WAL hỗ trợ giải mã logic.
Trong phần này, bạn sẽ thiết lập PostgreSQL để chạy trên địa chỉ IP mạng cục bộ, thiết lập mức wal 'logic' thông qua phần mở rộng 'pglogical', sau đó bật người dùng sao chép thông qua tệp pg_hba.conf.

Để bắt đầu, đăng nhập vào shell PostgreSQL bằng cách nhập lệnh sau.
Mã:
sudo -u postgres psql
Sau đó, xác minh cấu hình 'wal_level' mặc định trên máy chủ PostgreSQL.
Mã:
select name,setting,unit from pg_settings where name in ('wal_level','max_worker_processes','max_replication_slots','max_wal_senders','shared_preload_libraries','track_commit_timestamp');
Đầu ra bên dưới xác nhận rằng mức wal mặc định trên máy chủ PostgreSQL là 'bản sao', đây là tiêu chuẩn hiện nay Các phiên bản PostgreSQL.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22239%22%3E%3C/svg%3E


Bây giờ hãy nhập '\q' để thoát khỏi shell PostgreSQL.

Tiếp theo, hãy mở tệp cấu hình PostgreSQL mặc định '/etc/postgresql/15/main/postgresql.conf' bằng trình chỉnh sửa nano sau lệnh.
Mã:
sudo nano /etc/postgresql/15/main/postgresql.conf
Bỏ chú thích tham số 'listen_addresses' và thêm địa chỉ IP máy chủ nội bộ của bạn vào đó.

Dưới đây là cấu hình sẽ được sử dụng trên máy chủ 'pgdg01'.
Mã:
listen_addresses = 'localhost, 192.168.5.25'

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22274%22%3E%3C/svg%3E


Dưới đây là cấu hình sẽ được sử dụng trên máy chủ 'pgdg02'.
Mã:
listen_addresses = 'localhost, 192.168.5.26'

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22264%22%3E%3C/svg%3E


Bây giờ hãy thêm các tham số sau để bật mức wal 'logic' thông qua phần mở rộng 'pglogical'. Cả hai máy chủ đều có cấu hình tương tự cho các thiết lập mức wal. Tham số 'shared_preload_libraries = 'pglogical'' sẽ kích hoạt mức wal logic thông qua phần mở rộng 'pglogical'.
Mã:
max_worker_processes = 10
shared_preload_libraries = 'pglogical'
track_commit_timestamp = 'on'
wal_level = 'logical'

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22657%22%20height=%22233%22%3E%3C/svg%3E


Lưu và đóng Tệp '/etc/postgresql/15/main/postgresql.conf' khi hoàn tất.

Tiếp theo, mở tệp xác thực PostgreSQL '/etc/postgresql/15/main/pg_hba.conf' bằng lệnh trình chỉnh sửa nano sau.
Mã:
sudo nano /etc/postgresql/15/main/pg_hba.conf
Thêm các dòng sau vào cuối dòng. Điều này sẽ cho phép xác thực cho bất kỳ người dùng nào từ máy chủ '192.168.5.1/24' đối với cả người dùng PostgreSQL thông thường và người dùng sao chép.
Mã:
# IPv4 local connections:
host all all 192.168.5.1/24 scram-sha-256
# replication privilege.
host replication all 192.168.5.1/24 scram-sha-256
Lưu và đóng tệp '/etc/postgresql/15/main/pg_hba.conf' khi hoàn tất.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22749%22%20height=%22333%22%3E%3C/svg%3E


Khi cấu hình '/etc/postgresql/15/main/postgresql.conf' và '/etc/postgresql/15/main/pg_hba.conf' hoàn tất, hãy nhập tiện ích lệnh systemctl sau để khởi động lại dịch vụ PostgreSQL và áp dụng thay đổi.
Mã:
sudo systemctl restart postgresql
Bây giờ hãy nhập lệnh ss sau để đảm bảo rằng PostgreSQL đang chạy trên địa chỉ IP cục bộ của bạn.
Mã:
ss -tulpn | grep 5432
Bạn sẽ nhận được đầu ra như thế này - Trên máy chủ pgdg01, máy chủ PostgreSQL sẽ chạy ở '192.168.5.25:5432'. Trên máy chủ pgdg02, máy chủ PostgreSQL phải chạy ở '192.168.5.26:5432'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22112%22%3E%3C/svg%3E


Cuối cùng, nhập lệnh sau để đăng nhập vào shell PostgreSQL và xác minh mức wal đã bật trên PostgreSQL của bạn máy chủ.
Mã:
sudo -u postgres psql
Nhập truy vấn PostgreSQL sau để xác minh mức wal đã bật trên máy chủ PostgreSQL của bạn.
Mã:
select name,setting,unit from pg_settings where name in ('wal_level','max_worker_processes','max_replication_slots','max_wal_senders','shared_preload_libraries','track_commit_timestamp');
Đầu ra 'wal_level - logical' xác nhận rằng mức wal 'logical' đã được bật, thông qua 'shared_preload_library - pglogical'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22192%22%3E%3C/svg%3E


Tại thời điểm này, bạn đã cấu hình máy chủ PostgreSQL với cấp độ wal 'logical' để sao chép luồng logic thông qua 'pglogical'. Ngoài ra, cả hai máy chủ PostgreSQL đều đang chạy trên địa chỉ IP mạng nội bộ. Ở bước tiếp theo, bạn sẽ tạo một người dùng và cơ sở dữ liệu PostgreSQL mới, sau đó bật tiện ích mở rộng 'pglogical'.

Thiết lập người dùng và cơ sở dữ liệu​

pglogical là tiện ích mở rộng PostgreSQL hoạt động ở cấp cơ sở dữ liệu. Với tiện ích này, bạn không sao chép toàn bộ hệ thống PostgreSQL, mà thay vào đó, bạn sao chép các bảng hoặc cơ sở dữ liệu cụ thể có sẵn trên PostgreSQL.

Để thiết lập pglogical, bạn phải có PostgreSQL với đặc quyền/vai trò SUPERUSER. Ngoài ra, bạn phải bật tiện ích mở rộng 'pglogical' trên cơ sở dữ liệu đích mà bạn muốn sao chép.

Đăng nhập vào shell PostgreSQL bằng cách nhập lệnh sau.
Mã:
sudo -u postgres psql
Tạo người dùng và cơ sở dữ liệu mới bằng các truy vấn PostgreSQL sau.

Trong ví dụ này, bạn sẽ tạo một người dùng mới 'appuser' với quyền 'SUPERUSER'. Tại thời điểm viết bài này, pglogical yêu cầu quyền người dùng SUPER để làm cho nó hoạt động. Bạn cũng sẽ tạo một cơ sở dữ liệu mới 'appdb', đây là cơ sở dữ liệu mục tiêu mà bạn muốn bật sao chép trên đó.
Mã:
CREATE ROLE appuser WITH LOGIN SUPERUSER ENCRYPTED PASSWORD 'Str0ngP4ssw0rd';
CREATE DATABASE appdb WITH OWNER appuser;
Xác minh danh sách người dùng và cơ sở dữ liệu trên máy chủ PostgreSQL của bạn bằng các truy vấn sau. Bạn sẽ nhận được người dùng mới 'appuser' với quyền SUPERUSER và cơ sở dữ liệu mới 'appdb'.
Mã:
\du
\l

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22405%22%3E%3C/svg%3E


Tiếp theo, kết nối với cơ sở dữ liệu mới 'appdb' bằng cách sử dụng '\c' hoặc Truy vấn '\connect'. Khi được kết nối, dấu nhắc shell PostgreSQL của bạn sẽ trở thành như sau 'appdb=#'
Mã:
\c appdb
Nhập truy vấn sau để bật tiện ích mở rộng 'pglogical' trên cơ sở dữ liệu 'appdb'.
Mã:
CREATE EXTENSION pglogical;
Sau đó, hãy xác minh danh sách các tiện ích mở rộng đã bật trên cơ sở dữ liệu 'appdb' hiện tại bằng cách sử dụng truy vấn sau. Bạn sẽ thấy phần mở rộng 'pglogical' được bật trên cơ sở dữ liệu 'appdb'.
Mã:
\dx

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22656%22%20height=%22281%22%3E%3C/svg%3E


Sau khi tạo người dùng và cơ sở dữ liệu và bật pglogical, tiếp theo bạn sẽ bắt đầu cấu hình pglogical để bật tính năng sao chép cơ sở dữ liệu giữa hai máy chủ PostgreSQL.

Bật tính năng sao chép bảng thông qua pglogical​

Trong phần này, bạn sẽ bật tính năng sao chép logic trên bảng cụ thể mà bạn sẽ tạo trên cơ sở dữ liệu 'appdb'

### Thiết lập pgdg01 làm Nút xuất bản

Nhập các truy vấn PostgreSQL sau trên 'nút xuất bản' - máy chủ 'pgdg01' để tạo một bảng mới có tên là 'teachers'.
Mã:
CREATE TABLE teachers (
 id INT PRIMARY KEY,
 first_name VARCHAR,
 last_name VARCHAR,
 subject VARCHAR
);
Chèn dữ liệu mới vào bảng 'giáo viên' bằng cách nhập các truy vấn sau.
Mã:
INSERT INTO teachers(id, first_name, last_name, subject)
VALUES 
(1, 'Alice', 'Wonderland', 'Math'),
(2, 'Bob', 'Rista', 'Physics'),
(3, 'John', 'Bonas', 'English');
Sau đó, hãy truy xuất dữ liệu mới của bạn để đảm bảo rằng dữ liệu đó có sẵn trên máy chủ của nút xuất bản pgdg01.
Mã:
select count(*) from teachers;
select * from teachers;
Đầu ra bên dưới xác nhận rằng dữ liệu mới đã được thêm vào bảng 'giáo viên'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22627%22%20height=%22585%22%3E%3C/svg%3E


Tiếp theo, để thiết lập sao chép trên cơ sở dữ liệu/bảng PostgreSQL thông qua pglogical, bạn phải làm theo các bước sau:
  • Tạo nút nhà cung cấp trên máy chủ Publisher pgdg01.
  • Tạo một bộ sao chép cho phép bạn kiểm soát những bảng nào trong cơ sở dữ liệu sẽ được sao chép.
  • Thêm bảng vào bộ sao chép.
Nhập lệnh sau để tạo một nút nhà cung cấp mới có tên là 'provider1'. Hãy đảm bảo thay đổi thông tin chi tiết của PostgreSQL bằng máy chủ pgdg01.
Mã:
select pglogical.create_node(node_name := 'provider1', dsn := 'host=pgdg01 port=5432 dbname=appdb user=appuser');
Tiếp theo, nhập truy vấn sau để tạo một bộ bản sao mới có tên là 'replication_set'.
Mã:
select pglogical.create_replication_set('replication_set');
Sau đó, thêm bảng 'teachers' vào tập bản sao 'replication_set' bằng cách nhập truy vấn sau.
Mã:
select pglogical.replication_set_add_table(set_name := 'replication_set', relation := 'teachers', synchronize_data := true);

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22226%22%3E%3C/svg%3E


Bây giờ bạn đã tạo nút nhà cung cấp với máy chủ PostgreSQL pgdg01, hãy tạo tập bản sao 'replication_set', và thêm bảng 'teachers' vào 'replication_set'. Tiếp theo, bạn sẽ tạo và thiết lập một nút subscriber trên máy chủ 'pgdg02'.

Thiết lập pgdg02 làm Subsciber Node​

Di chuyển đến máy chủ 'pgdg02' và nhập lệnh nano editor sau để tạo tệp mật khẩu PostgreSQL mới '/var/lib/postgresql/.pgpass'. Tệp mật khẩu này sẽ được sử dụng cho
Mã:
sudo -u postgres nano /var/lib/postgresql/.pgpass
Thêm các dòng sau vào tệp và đảm bảo thay đổi tên người dùng và mật khẩu bằng thông tin chi tiết của bạn.
Mã:
pgdg01:5432:appdb:appuser:Str0ngP4ssw0rd
pgdg01:5432:replication:appuser:Str0ngP4ssw0rd
pgdg02:5432:appdb:appuser:Str0ngP4ssw0rd
pgdg02:5432:replication:appuser:Str0ngP4ssw0rd
Lưu và đóng tệp khi hoàn tất.

Bây giờ hãy nhập lệnh sau để thay đổi quyền của tệp '/var/lib/postgresql/.pgpass' thành chỉ đọc.
Mã:
sudo chmod 0600 /var/lib/postgresql/.pgpass
Tiếp theo, đăng nhập vào PostgreSQL bằng lệnh sau.
Mã:
sudo -u postgres psql
Sau khi đăng nhập, hãy nhập truy vấn sau để tải lại cấu hình máy chủ PostgreSQL của bạn, sau đó thoát để đảm bảo rằng các thay đổi được đã áp dụng.
Mã:
select pg_reload_conf();
\q

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22691%22%20height=%22335%22%3E%3C/svg%3E


Bây giờ hãy đăng nhập lại vào shell PostgreSQL trên pgdg02 máy chủ.
Mã:
sudo -u postgres psql
Kết nối với cơ sở dữ liệu 'appdb' mà bạn đã tạo.
Mã:
\c appdb
Sau đó nhập truy vấn PostgreSQL sau để tạo bảng mới 'teachers', bảng này phải khớp với bảng mà bạn có trên nút nhà cung cấp 'pgdg01'.
Mã:
CREATE TABLE teachers (
 id INT PRIMARY KEY,
 first_name VARCHAR,
 last_name VARCHAR,
 subject VARCHAR
);
Nếu bạn kiểm tra dữ liệu có sẵn, bạn sẽ nhận được một bảng trống.
Mã:
select count(*) from teachers;
select * from teachers;

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22611%22%20height=%22500%22%3E%3C/svg%3E


Với tệp mật khẩu PostgreSQL và bảng 'teachers' đã tạo, tiếp theo bạn sẽ thiết lập PostgreSQL trên máy chủ 'pgdg02' dưới dạng thuê bao với các bước sau:
  • Tạo một nút Thuê bao trên máy chủ pgdg02.
  • Tạo thuê bao sẽ bắt đầu quá trình đồng bộ hóa và sao chép trong nền.
  • Xác minh quá trình sao chép.
Nhập truy vấn sau để tạo một nút thuê bao mới với máy chủ PostgreSQL pgdg02. Hãy chắc chắn thay đổi thông tin chi tiết về tên máy chủ, tên cơ sở dữ liệu và người dùng.
Mã:
select pglogical.create_node(node_name := 'subscriber1', dsn := 'host=pgdg02 port=5432 dbname=appdb user=appuser');

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2280%22%3E%3C/svg%3E


Tiếp theo, tạo một đăng ký mới có tên là 'subscription1'. Hãy chắc chắn nhập bộ bản sao có tên 'replication_set' và nhà cung cấp là PostgreSQL trên máy chủ pgdg01. Với điều này, việc sao chép bảng 'giáo viên' sẽ được bắt đầu và chạy ở chế độ nền.
Mã:
select pglogical.create_subscription(subscription_name := 'subscription1', replication_sets := array['replication_set'], provider_dsn := 'host=pgdg01 port=5432 dbname=appdb user=appuser' );

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2255%22%3E%3C/svg%3E


Nhập truy vấn sau để xác minh đăng ký trạng thái.
Mã:
select * FROM pglogical.show_subscription_status();
Bạn sẽ nhận được kết quả như thế này - Trạng thái của 'subscription1' đang sao chép đến nhà cung cấp 'provider1' và bộ bản sao 'replication_set'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2265%22%3E%3C/svg%3E


Bây giờ hãy nhập truy vấn sau để đợi đăng ký bắt đầu sao chép không đồng bộ và dữ liệu đồng bộ hóa.
Mã:
SELECT pglogical.wait_for_subscription_sync_complete('subscription1');

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22733%22%20height=%22140%22%3E%3C/svg%3E


Cuối cùng, bạn có thể xác minh dữ liệu trên bảng 'teachers' có sẵn trên máy chủ PostgreSQL pgdg2.
Mã:
select count(*) from teachers;
select * from teachers;
Nếu sao chép thành công, dữ liệu của bạn hiện sẽ có sẵn và được sao chép vào Máy chủ PostgreSQL pgdg02.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22435%22%20height=%22299%22%3E%3C/svg%3E

Kiểm tra bản sao​

Trong phần này, bạn sẽ xác minh bản sao trên máy chủ PostgreSQL bằng cách chèn dữ liệu mới từ nút Publisher pgdg01. Sau đó, bạn sẽ xác minh dữ liệu từ nút Subscriber để đảm bảo dữ liệu được sao chép.

Đầu tiên, hãy kết nối với cơ sở dữ liệu 'appdb' trên máy chủ pgdg01 bằng cách nhập lệnh sau.
Mã:
sudo -u postgres psql -U appuser -h pgdg01 -d appdb
Nhập các truy vấn sau để chèn dữ liệu mới vào bảng 'giáo viên'.
Mã:
INSERT INTO teachers(id, first_name, last_name, subject)
VALUES 
(4, 'Ian', 'Gibson', 'Geography'),
(5, 'Tom', 'Riddle', 'Biology'),
(6, 'Jared', 'Dunn', 'Chemistry');

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22339%22%3E%3C/svg%3E


Xác minh bảng 'giáo viên' để đảm bảo rằng dữ liệu mới là đã thêm.
Mã:
select count(*) from teachers;
select * from teachers;

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22438%22%20height=%22359%22%3E%3C/svg%3E


Tiếp theo, di chuyển đến máy chủ pgdg02 và nhập lệnh sau để kết nối với cơ sở dữ liệu 'appdb'.
Mã:
sudo -u postgres psql -U appuser -h pgdg02 -d appdb
Nhập truy vấn sau để xác minh dữ liệu có sẵn trên bảng 'teachers'. Nếu sao chép thành công, bạn sẽ thấy dữ liệu mới cập nhật có sẵn trên máy chủ pgdg02.
Mã:
select count(*) from teachers;
select * from teachers;

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22445%22%3E%3C/svg%3E


Với thao tác này, bạn đã hoàn tất cấu hình sao chép luồng logic thông qua pglogical trên máy chủ PostgreSQL.

Kết luận​

Trong hướng dẫn này, bạn đã cài đặt và cấu hình sao chép luồng logic thông qua pglogical trên máy chủ Debian 11. Với hướng dẫn này, bạn cũng đã học được cách sử dụng cơ bản tiện ích mở rộng pglogical để tạo và quản lý sao chép PostgreSQL ở cấp cơ sở dữ liệu.

Ngoài ra, bạn cũng đã hoàn tất cài đặt PostgreSQL 15 mới nhất trên máy chủ Debian thông qua kho lưu trữ PostgreSQL chính thức và bảo mật máy chủ PostgreSQL thông qua tường lửa UFW.

Với hướng dẫn này, giờ đây bạn có thể thêm một máy chủ PostgreSQL khác và thiết lập tiện ích mở rộng pglogical để cho phép sao chép tới nhiều máy chủ. Bạn cũng có thể thiết lập cân bằng tải thông qua HAPROXY hoặc thiết lập chuyển đổi dự phòng cho máy chủ PostgreSQL. Để biết thông tin chi tiết, hãy truy cập tài liệu chính thức của PostgreSQL.
 
Back
Bên trên