Cách cài đặt Sao chép cơ sở dữ liệu PostgreSQL

1678
27-11-2023
Cách cài đặt Sao chép cơ sở dữ liệu PostgreSQL

Sao chép cơ sở dữ liệu đang được xử lý sao chép dữ liệu từ một máy chủ chính sang nhiều máy chủ được gọi là bản sao. Máy chủ chính chấp nhận các hoạt động đọc/ghi trong khi các bản sao thực hiện các giao dịch chỉ đọc. Máy chủ chính và các bản sao giống nhau tạo thành một cụm cơ sở dữ liệu (cụm cơ sở dữ liệu).

Mục đích của việc sao chép cơ sở dữ liệu là để đảm bảo tính nhất quán (dự phòng), tính nhất quán (nhất quán), tính sẵn sàng cao (tính khả dụng cao) và khả năng truy cập dữ liệu (khả năng truy cập dữ liệu), đặc biệt là trong các ứng dụng quan trọng, có lượng truy cập cao.

PostgreSQL cung cấp hai phương pháp sao chép: sao chép vật lý (phát trực tuyến) và sao chép logic. Cả hai phương pháp này đều được sử dụng cho các trường hợp khác nhau và người dùng có thể chọn một trong hai mục tiêu thuộc tính tùy chọn.

1. Sao chép PostgreSQL vật lý

Đây là loại sao chép phổ biến nhất trong PostgreSQL. Sao chép vật lý duy trì một bản sao đầy đủ của toàn bộ dữ liệu của một cụm. Nó sử dụng chính xác các dữ liệu khối ở chính và thực hiện sao chép từng byte. Nói một cách đơn giản hơn, toàn bộ tập hợp dữ liệu trên máy chủ chính sẽ được sao chép sang các bản sao hoạt động như một nút dự phòng(nút dự phòng).

Sao chép vật lý không sao chép một công cụ đối tượng của cụm cơ sở dữ liệu chính, giống như một dữ liệu hàng trong một bảng. Thay vào đó, nó hoạt động ở khối đĩa cấp độ và phản chiếu tất cả các nút bản sao dữ liệu; bao bao gồm tất cả các bảng trong mỗi cơ sở dữ liệu.

Trường hợp sử dụng

  • Hầu hết được sử dụng để thiết lập và khắc phục thảm họa vì tất cả các bản sao đều giống nhau.
  • Được xuất khi xử lý cơ sở dữ liệu có lượng dữ liệu lớn

Ưu điểm

  • Nó rất dễ thực hiện vì tất cả các cụm cơ sở dữ liệu đều giống nhau.
  • Nó đảm bảo tính chất tốt nhất của dữ liệu và tính năng có sẵn ở bất kỳ thời điểm nào vì tất cả các nút bản sao đều chứa các bản gốc dữ liệu gốc.
  • Giải thích các nhu cầu đọc chỉ (chỉ đọc) trên các nút bản sao
  • Nó rất hiệu quả vì nó không yêu cầu bất kỳ quy trình xử lý đặc biệt nào.

Nhược điểm

  • Tốn nhiều băng thông tin được sao chép toàn bộ dữ liệu mà không chỉ các dữ liệu nhỏ trên máy chủ chính.
  • Không cung cấp bản sao hỗ trợ multi-master (multi-primary)

2. Sao chép logic PostgreSQL

Logical Replication lần đầu tiên được giới thiệu trong PostgreSQL 9.0. Nó hoạt động bằng cách sao chép các dữ liệu đối tượng và những thay đổi của chúng dựa trên một mã định nghĩa duy nhất, ngoại trừ khóa chính(khóa chính). Nói một cách đơn giản hơn, sao chép logic sao chép cơ sở dữ liệu đối tượng theo mô hình dựa trên dữ liệu hàng và ngược lại, sao chép vật lý sẽ gửi mọi thứ đến các nút bản sao.

Do đó, sao chép logic cung cấp khả năng kiểm soát chi tiết để sao chép dữ liệu ngược lại với sao chép vật lý.

Trường hợp sử dụng

Các trường hợp sử dụng điển hình của bao sao chép logic bao gồm:

  • Sao chép giữa các phiên bản chính khác nhau của PostgreSQL.
  • Sao chép giữa các phiên bản PostgreSQL được lưu trữ trên các nền tảng khác, ví dụ: từ Linux sang Windows.
  • Gửi các thay đổi trong cơ sở dữ liệu tới các bản sao khi chúng diễn ra trong thời gian thực.
  • Quyền truy cập dữ liệu cấp độ được sao chép cho các nhóm người dùng khác nhau.

Ưu điểm

  • Lý tưởng để tạo ra bản sao lưu tăng dần
  • Thường được xuất đề cho các cụm cơ sở dữ liệu Yêu cầu tính sẵn sàng cung cấp hiệu suất tốt hơn và ít bị mất dữ liệu.
  • Tối ưu hóa băng thông vì những dữ liệu hàng thay đổi mới được gửi đến các nút bản sao thay vì toàn bộ dữ liệu.
  • Được sử dụng trong bản sao đa chủ mà không thể sử dụng bản sao vật lý.
  • Hỗ trợ sao chép trên các hệ thống nền tảng khác, ví dụ: Linux sang windows và ngược lại.

Nhược điểm

  • Không thể truyền tải lượng lớn dữ liệu khi chúng diễn ra trong thời gian thực.
  • Quá trình sao chép phức tạp hơn so với sao chép vật phẩm.
  • Sử dụng cao tài nguyên trên các nút bản sao.

3. Cài đặt Bản sao PostgreSQL vật lý trên Ubuntu 22.04

Bước cài đặt được thực hiện dựa trên mô hình sau:

Cách cài đặt Sao chép cơ sở dữ liệu PostgreSQL - Ảnh 1.

Vai trò của nútĐịa chỉ IPTên hệ điều hành
———-———-Ubuntu 22.04
Sơ đẳng26.10.235.75Ubuntu 22.04
Bản sao10.26.235.206Ubuntu 22.04

Lệnh được thực thi với người dùng root

Bước 1: Cài đặt máy chủ PostgreSQL

Đầu tiên, chúng tôi cài đặt các gói yêu cầu như sau:

apt update && apt install postgresql postgresql-contrib -y 

Khi cài đặt postgres, hệ thống sẽ tạo một tên người dùng postgresvà sử dụng cấu hình tệp postgresql.confđược tìm thấy trong thư mục/etc/postgresql/<postgre_version>/main/

Sau khi quá trình cài đặt hoàn tất, postgres sẽ tự động bật lên. Có thể kiểm tra bằng lệnh sau:

root@nahida:~# systemctl status postgresql ● postgresql.service - PostgreSQL RDBMS      Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)      Active: active (exited) since Sat 2023-07-13 10:35:47 +07; 1min 02s ago    Main PID: 3422896 (code=exited, status=0/SUCCESS)       Tasks: 0 (limit: 9507)      Memory: 0B      CGroup: /system.slice/postgresql.service  Jul 13 10:35:47 nahida systemd[1]: Starting PostgreSQL RDBMS... Jul 13 10:35:47 nahida systemd[1]: Finished PostgreSQL RDBMS. 

Cấu hình để dịch vụ tự động khởi động khi máy chủ khởi động lại

root@nahida:~# systemctl enable postgresql Synchronizing state of postgresql.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable postgresql 

Bước 2: Định cấu hình nút chính

Thực hiện truy cập nút chính và đăng nhập với người dùngpostgres

sudo -u postgres psql 

Trước khi cấu hình sao chép, chúng ta phải tạo một người dùng để sử dụng cho quá trình sao chép. Do đó, hãy chạy lệnh sau để tạo người dùng replicatorvà phân bổ đặc quyền REPLICATION.

postgres=# CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'P@ssword321'; CREATE ROLE 

in which:

  • replicatorlà người dùng có tên cần tạo
  • P@ssword321là mật khẩu được sử dụng cho người dùngreplicator

Tiếp theo, chúng tôi cần cấu hình để đảm bảo nút bản sao có thể kết nối với nút chính bằng cách cấu hình như sau:

#------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------  # - Connection Settings -  listen_addresses = '10.26.235.75'               # what IP address(es) to listen on;                                         # comma-separated list of addresses;                                         # defaults to 'localhost'; use '*' for all                                         # (change requires restart) port = 5432                             # (change requires restart) 

Tiếp theo, tìm đến config wal_level. Cài đặt thông tin định lượng này sẽ được ghi vào tệp Write Ahead Log (WAL).

#------------------------------------------------------------------------------ # WRITE-AHEAD LOG #------------------------------------------------------------------------------  # - Settings -  wal_level = logical                     # minimal, replica, or logical                                         # (change requires restart) 

Tiếp theo, tìm đến config wal_log_hints. Cấu hình thành công onđể cho phép PostgreSQL ghi toàn bộ nội dung của mỗi trang đĩa vào tệp WAL trong lần sửa đổi đầu tiên của trang.

#wal_compression = off                  # enable compression of full-page writes wal_log_hints = on                      # also do full page writes of non-critical updates                                         # (change requires restart) 

Tiếp theo truy cập vào cấu hình tệp /etc/postgresql/<postgre_version>/main/pg_hba.conf Thêm vào cấu hình tệp cuối cùng cho phép nút bản sao ( 10.26.235.206 ) kết nối với nút chính bằng cách sử dụng replicator.

host  replication   replicator  10.26.235.206/32   md5 

Lưu các thay đổi. Sau đó khởi động lại dịch vụ

systemctl restart postgresql 

Bước 3: Định cấu hình nút bản sao

Trước khi nút sao chép có thể bắt đầu sao chép dữ liệu từ nút chính, bạn cần tạo một bản sao dữ liệu thư mục của nút chính sang dữ liệu thư mục của nút sao chép. Để đạt được điều này, trước tiên, hãy dừng dịch vụ PostgreSQL trên nút bản sao.

systemctl stop postgresql 

Tiếp theo, xóa tất cả các tệp trong dữ liệu thư mục của nút bản sao để bắt đầu.

rm -rf /var/lib/postgresql/<postgre_version>/main/ 

Bây giờ hãy chạy lệnh pg_basebackupnhư sau để sao chép dữ liệu từ nút chính sang nút sao chép

root@signora:~# pg_basebackup -h 10.26.235.75 -U replicator -X stream -C -S rep_10_26_235_75 -v -R -W -D /var/lib/postgresql/<postgre_version>/main/ Password: pg_basebackup: initiating base backup, waiting for checkpoint to complete pg_basebackup: checkpoint completed pg_basebackup: write-ahead log start point: 0/2000028 on timeline 1 pg_basebackup: starting background WAL receiver pg_basebackup: created replication slot "rep_10_26_235_75" pg_basebackup: write-ahead log end point: 0/2000100 pg_basebackup: waiting for background process to finish streaming ... pg_basebackup: syncing data to disk ... pg_basebackup: base backup completed 

in which:

  • -h: Tùy chọn này được xác định chỉ máy chủ, trong trường hợp này là IP địa chỉ của nút chính.
  • -U: Sao chép người dùng chỉ định tùy chọn. Đây là người dùng đã được định cấu hình trên nút chính và nút sao chép sẽ được sử dụng để kết nối với nút đó. Trong trường hợp của chúng ta, người dùng sao chép được gọi là người sao chép.
  • bạn có thể xem thêm ở đây

Sau đó, thực thi lệnh sau trên nút sao chép để cấp quyền sở hữu dữ liệu thư mục cho người dùng postgres.

chown postgres -R /var/lib/postgresql/<postgre_version>/main/ 

và thực thi bắt đầu dịch vụ posgresql trên nút bản sao nút

systemctl start postgresql 

Bước 4: Kiểm tra thiết lập sao chép

Để kiểm tra sao chép trạng thái, hãy kết nối với nút chính và thực hiện truy vấn như sau:

postgres=# select * from pg_stat_replication ;    pid   | usesysid |  usename   | application_name |  client_addr  | client_hostname | client_port |         backend_start         | backend_xmin |   state   | sent_lsn  | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag | replay_lag | sync_priority | sync_state |          reply_time ---------+----------+------------+------------------+---------------+-----------------+-------------+-------------------------------+--------------+-----------+-----------+-----------+-----------+------------+-----------+-----------+------------+---------------+------------+-------------------------------  3477655 |    16384 | replicator | 15/main          | 10.26.235.206 |                 |       58708 | 2023-07-13 11:33:01.406553+07 |              | streaming | 0/3000148 | 0/3000148 | 0/3000148 | 0/3000148  |           |           |            |             0 | async      | 2023-07-13 11:33:11.507075+07 (1 row) 

if state streamingcó nghĩa là đã cấu hình thành công.

SHARE