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.
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.
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.
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ủ.
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.
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ủ.
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.
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.
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.
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.
Đầ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'.
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.
Để 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.
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.
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.
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.
Đầ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.
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.
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.
Để bắt đầu, đăng nhập vào shell PostgreSQL bằng cách nhập lệnh sau.
Sau đó, xác minh cấu hình 'wal_level' mặc định trên máy chủ PostgreSQL.
Đầ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.
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'.
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'.
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'.
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.
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.
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.
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.
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ủ.
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.
Đầ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 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.
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 đó.
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'.
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=#'
Nhập truy vấn sau để bật tiện ích mở rộng 'pglogical' trên cơ sở dữ liệu 'appdb'.
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'.
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.
### 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'.
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.
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.
Đầ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:
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'.
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.
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'.
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.
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.
Tiếp theo, đăng nhập vào PostgreSQL bằng lệnh sau.
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.
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ủ.
Kết nối với cơ sở dữ liệu 'appdb' mà bạn đã tạo.
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'.
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.
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:
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.
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.
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.
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.
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
Đầ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.
Nhập các truy vấn sau để chèn dữ liệu mới vào bảng 'giáo viên'.
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.
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'.
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.
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.
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.
Đâ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.
Mã:
Hostname IP Address Used as
------------------------------------------
pgdg01 192.168.5.25 Publisher Node
pgdg02 192.168.5.26 Subscriber Node
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
Mã:
192.168.5.25 pgdg01
192.168.5.26 pgdg02
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'
Mã:
sudo apt update
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
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
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
Mã:
sudo ufw allow OpenSSH
Mã:
sudo ufw allow from 192.168.5.0/24 to any port 5432
Mã:
sudo ufw enable
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
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.
Để bắt đầu, đăng nhập vào shell PostgreSQL bằng cách nhập lệnh sau.
Mã:
sudo -u postgres psql
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');
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
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
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
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
Mã:
ss -tulpn | grep 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
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');
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
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;
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
Mã:
CREATE EXTENSION pglogical;
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
);
Mã:
INSERT INTO teachers(id, first_name, last_name, subject)
VALUES
(1, 'Alice', 'Wonderland', 'Math'),
(2, 'Bob', 'Rista', 'Physics'),
(3, 'John', 'Bonas', 'English');
Mã:
select count(*) from teachers;
select * from teachers;
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.
Mã:
select pglogical.create_node(node_name := 'provider1', dsn := 'host=pgdg01 port=5432 dbname=appdb user=appuser');
Mã:
select pglogical.create_replication_set('replication_set');
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
Mã:
pgdg01:5432:appdb:appuser:Str0ngP4ssw0rd
pgdg01:5432:replication:appuser:Str0ngP4ssw0rd
pgdg02:5432:appdb:appuser:Str0ngP4ssw0rd
pgdg02:5432:replication:appuser:Str0ngP4ssw0rd
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
Mã:
sudo -u postgres psql
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
Mã:
\c appdb
Mã:
CREATE TABLE teachers (
id INT PRIMARY KEY,
first_name VARCHAR,
last_name VARCHAR,
subject VARCHAR
);
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.
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();
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;
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
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
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.