Thứ hai, 23/11/2020 | 00:00 GMT+7

Cài đặt Streaming Replication Postgresql 12 trên Ubuntu 20.04

Nhân bản - Replicate - trực tuyến là một phương pháp phổ biến mà bạn có thể sử dụng để mở rộng quy mô cơ sở dữ liệu quan hệ của bạn theo chiều ngang

Việc này sử dụng hai hoặc nhiều bản sao của cùng một cụm cơ sở dữ liệu chạy trên các máy riêng biệt. Một cụm cơ sở dữ liệu được gọi là cụm cơ sở dữ liệu chính và phục vụ cả hoạt động đọc và ghi; những bản khác, được gọi là bản sao, chỉ phục vụ các hoạt động đọc. Bạn cũng có thể sử dụng tính năng sao chép trực tuyến để cung cấp tính khả dụng cao của hệ thống. Nếu cụm cơ sở dữ liệu chính hoặc server bị lỗi bất ngờ, các bản sao có thể tiếp tục phục vụ các hoạt động đọc hoặc (một trong các bản sao) trở thành cụm chính mới.

PostgreSQL là một cơ sở dữ liệu quan hệ được sử dụng rộng rãi hỗ trợ cả bản sao lôgic và vật lý. Bản sao lôgic chuyển dòng các thay đổi cấp cao từ cụm cơ sở dữ liệu chính đến cơ sở dữ liệu bản sao. Sử dụng bản sao lôgic, bạn có thể truyền trực tuyến các thay đổi đến chỉ một cơ sở dữ liệu hoặc bảng duy nhất trong cơ sở dữ liệu. Tuy nhiên, trong sao chép vật lý , các thay đổi đối với tệp nhật ký WAL (Ghi-Ahead-Ghi nhật ký) được truyền trực tuyến và sao chép trong các cụm bản sao. Do đó, bạn không thể sao chép các khu vực cụ thể của cụm cơ sở dữ liệu chính, nhưng thay vào đó, tất cả các thay đổi đối với cụm cơ sở dữ liệu chính sẽ được sao chép.

Trong hướng dẫn này, bạn sẽ cài đặt sao chép luồng vật lý với PostgreSQL 12 trên Ubuntu 20.04 bằng cách sử dụng hai máy riêng biệt chạy hai cụm PostgreSQL 12 riêng biệt. Một máy sẽ là máy chính và máy kia, máy sao chép .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần các thành phần sau:

  • Hai máy riêng Ubuntu 20.04 máy; một cái được gọi là cái chính và cái kia được gọi là bản sao . Bạn có thể cài đặt những điều này bằng Hướng dẫn cài đặt server ban đầu , bao gồm cả user không phải root có quyền sudo và tường lửa.
  • Tường lửa của bạn được cấu hình để cho phép HTTP / HTTPS và lưu lượng truy cập trên cổng 5432 — cổng mặc định được sử dụng bởi PostgreSQL 12. Bạn có thể làm theo Cách cài đặt tường lửa với ufw trên Ubuntu 20.04 để cấu hình các cài đặt tường lửa này.
  • PostgreSQL 12 chạy trên cả Server Ubuntu 20.04. Thực hiện theo Bước 1 của hướng dẫn Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 20.04 bao gồm cài đặt và cách sử dụng cơ bản của PostgreSQL trên Ubuntu 20.04.

Bước 1 - Cấu hình cơ sở dữ liệu chính để chấp nhận kết nối

Trong bước đầu tiên này, bạn sẽ cấu hình cơ sở dữ liệu chính để cho phép (các) cơ sở dữ liệu bản sao kết nối. Theo mặc định, PostgreSQL chỉ lắng nghe localhost ( 127.0.0.1 ) cho các kết nối. Để thay đổi điều này, trước tiên bạn sẽ chỉnh sửa tham số cấu hình listen_addresses trên cơ sở dữ liệu chính.

Trên server chính của bạn, hãy mở tệp cấu hình PostgreSQL, postgresql.conf , được tìm thấy trong thư mục /etc/postgresql/12/main/ :

  • sudo nano /etc/postgresql/12/main/postgresql.conf

Khi tệp được mở, hãy định vị listen_addresses và thay đổi giá trị từ localhost thành địa chỉ IP của server chính của bạn. Bạn cũng cần xóa # khỏi đầu dòng như sau:

/etc/postgresql/12/main/postgresql.conf
. . .
listen_addresses = 'your_primary_IP_address'
. . .

Lưu và thoát khỏi tệp.

Sau khi bạn hoàn tất, cơ sở dữ liệu chính của bạn bây giờ sẽ sẵn sàng chấp nhận các kết nối từ các máy khác trên địa chỉ IP bạn đã nhập. Tiếp theo, bạn sẽ tạo một role với các quyền thích hợp mà bản sao sẽ sử dụng khi kết nối với bản chính .

Bước 2 - Tạo một role đặc biệt với quyền sao chép

Bây giờ, bạn cần tạo một role trong cơ sở dữ liệu chính có quyền sao chép cơ sở dữ liệu. Bản sao của bạn sẽ sử dụng role này khi kết nối với bản chính . Tạo một role riêng chỉ để sao chép cũng có lợi ích bảo mật. Bản sao của bạn sẽ không thể thao tác bất kỳ dữ liệu nào trên bản chính ; nó sẽ chỉ có thể sao chép dữ liệu.

Đầu tiên, kết nối với cụm cơ sở dữ liệu với quyền là postgres bằng lệnh sau:

  • sudo -u postgres psql

Để tạo một role, bạn cần chạy CREATE ROLE trên cụm như sau:

  • CREATE ROLE test WITH REPLICATION PASSWORD 'testpassword' LOGIN;

Bạn sẽ nhận được kết quả sau:

Output
CREATE ROLE

Lệnh này tạo một role có tên test với mật khẩu 'testpassword' , mật khẩu này có quyền sao chép cụm cơ sở dữ liệu.

PostgreSQL có một cơ sở dữ liệu giả sao chép đặc biệt mà bản sao kết nối với, nhưng trước tiên bạn cần chỉnh sửa tệp cấu hình /etc/postgresql/12/main/pg_hba.conf để cho phép bản sao của bạn truy cập nó. Vì vậy, hãy thoát khỏi dấu nhắc lệnh PostgreSQL bằng lệnh:

  • \q

Đến đây bạn đã quay lại dấu nhắc lệnh của terminal, hãy mở tệp cấu hình /etc/postgresql/12/main/pg_hba.conf nano :

  • sudo nano /etc/postgresql/12/main/pg_hba.conf

Nối dòng sau vào cuối tệp pg_hba.conf

/etc/postgresql/12/main/pg_hba.conf
. . .
host    replication     test    your-replica-IP/32   md5

Điều này đảm bảo bản sao chính của bạn cho phép bản sao của bạn kết nối với cơ sở dữ liệu giả bản sao bằng cách sử dụng role, test mà bạn đã tạo trước đó. host nghĩa là chấp nhận các kết nối không cục bộ thông qua các socket TCP / IP đơn giản hoặc được mã hóa SSL. replication là tên của cơ sở dữ liệu giả đặc biệt mà PostgreSQL sử dụng để nhân rộng. Cuối cùng, giá trị md5 là kiểu xác thực được sử dụng. Nếu bạn muốn có nhiều hơn một bản sao , chỉ cần thêm lại cùng một dòng vào cuối tệp với địa chỉ IP của bản sao khác của bạn.

Đảm bảo những thay đổi này đối với tệp cấu hình được triển khai, bạn cần khởi động lại cụm chính bằng cách sử dụng:

  • sudo systemctl restart postgresql@12-main

Nếu cụm chính của bạn khởi động lại thành công, nó đã được cài đặt chính xác và sẵn sàng bắt đầu phát trực tuyến sau khi bản sao của bạn kết nối. Tiếp theo, bạn sẽ chuyển sang cài đặt cụm bản sao của bạn.

Bước 3 - Backup Cụm chính trên Bản sao

Khi bạn đang cài đặt bản sao vật lý với PostgreSQL trong hướng dẫn này, bạn cần thực hiện backup vật lý các tệp dữ liệu của cụm chính vào thư mục dữ liệu của bản sao. Để làm điều này, trước tiên bạn sẽ xóa tất cả các tệp trong thư mục dữ liệu của bản sao. Thư mục dữ liệu mặc định cho PostgreSQL trên Ubuntu là /var/lib/postgresql/12/main/ .

Bạn cũng có thể tìm thấy thư mục dữ liệu của PostgreSQL bằng cách chạy lệnh sau trên cơ sở dữ liệu của bản sao:

  • SHOW data_directory;

Khi bạn có vị trí của thư mục dữ liệu, hãy chạy lệnh sau để xóa mọi thứ:

  • sudo -u postgres rm -r /var/lib/postgresql/12/main/*

Vì chủ sở hữu mặc định của các tệp trong thư mục là user postgres , bạn cần chạy lệnh dưới dạng postgres bằng cách sử dụng sudo -u postgres .

Ghi chú:
Nếu trong trường hợp cực kỳ hiếm gặp, một tệp trong thư mục bị hỏng và lệnh không hoạt động, hãy xóa main cùng nhau và tạo lại nó với các quyền thích hợp như sau:

  • sudo -u postgres rm -r /var/lib/postgresql/12/main
  • sudo -u postgres mkdir /var/lib/postgresql/12/main
  • sudo -u postgres chmod 700 /var/lib/postgresql/12/main

 

Giờ đây khi thư mục dữ liệu của bản sao trống, bạn có thể thực hiện backup vật lý các tệp dữ liệu của bản sao chính. PostgreSQL thuận tiện có tiện ích pg_basebackup giúp đơn giản hóa quy trình. Nó thậm chí còn cho phép bạn đặt server ở chế độ chờ bằng cách sử dụng tùy chọn -R

Thực thi lệnh pg_basebackup trên bản sao như sau:

  • sudo -u postgres pg_basebackup -h primary-ip-addr -p 5432 -U test -D /var/lib/postgresql/12/main/ -Fp -Xs -R
  • -h chỉ định một server lưu trữ không cục bộ. Tại đây, bạn cần nhập địa chỉ IP của server với cụm chính.

  • -p chỉ định số cổng mà nó kết nối trên server chính. Theo mặc định, PostgreSQL sử dụng cổng :5432 .

  • -U cho phép bạn chỉ định user mà bạn kết nối với cụm chính. Đây là role bạn đã tạo ở bước trước.

  • -D là thư mục kết quả của bản backup. Đây là thư mục dữ liệu của bản sao mà bạn đã làm trống trước đó.

  • -Fp chỉ định dữ liệu được xuất ở định dạng thuần túy thay vì dưới dạng tệp tar

  • -Xs truyền nội dung của nhật ký WAL khi backup chính được thực hiện.

  • Cuối cùng, -R tạo một tệp trống, có tên là standby.signal , trong thư mục dữ liệu của bản sao. Tệp này cho phép cụm sao của bạn biết rằng nó sẽ hoạt động như một server dự phòng. -R cũng thêm thông tin kết nối về server chính vào tệp postgresql.auto.conf Đây là tệp cấu hình đặc biệt được đọc khi nào postgresql.conf thông thường được đọc, nhưng các giá trị trong .auto sẽ ghi đè các giá trị trong tệp cấu hình thông thường.

Khi pg_basebackup kết nối với chính , bạn cần nhập mật khẩu cho role mà bạn đã tạo ở bước trước. Tùy thuộc vào kích thước của cụm cơ sở dữ liệu chính của bạn, có thể mất một khoảng thời gian để sao chép tất cả các tệp.

Bản sao của bạn bây giờ sẽ có tất cả các tệp dữ liệu từ tệp chính mà nó yêu cầu để bắt đầu sao chép. Tiếp theo, bạn sẽ đặt bản sao vào chế độ chờ và bắt đầu sao chép.

Bước 4 - Khởi động lại và kiểm tra các cụm

Bây giờ các tệp dữ liệu của cụm chính đã được backup thành công trên bản sao , bước tiếp theo là khởi động lại cụm cơ sở dữ liệu bản sao để đưa nó vào chế độ chờ. Để khởi động lại cơ sở dữ liệu bản sao , hãy chạy lệnh sau:

  • sudo systemctl restart postgresql@12-main

Nếu cụm bản sao của bạn khởi động lại thành công ở chế độ chờ, nó hẳn đã được kết nối với cụm cơ sở dữ liệu chính trên máy khác của bạn. Để kiểm tra xem bản sao đã kết nối với bản chính và bản chính đang phát trực tuyến hay chưa, hãy kết nối với cụm cơ sở dữ liệu chính bằng lệnh:

  • sudo -u postgres psql

Bây giờ hãy truy vấn bảng pg_stat_replication trên cụm cơ sở dữ liệu chính như sau:

  • SELECT client_addr, state FROM pg_stat_replication;

Chạy truy vấn này trên cụm chính sẽ xuất ra một thứ tương tự như sau:

Output
   client_addr    |  state
------------------+-----------
 your_replica_IP | streaming

Nếu bạn có kết quả tương tự, thì kết quả chính đang truyền trực tuyến chính xác đến bản sao .

Kết luận

Đến đây bạn có hai server Ubuntu 20.04, mỗi server có một cụm cơ sở dữ liệu PostgreSQL 12 đang chạy với luồng vật lý giữa chúng. Bất kỳ thay đổi nào hiện được thực hiện đối với cụm cơ sở dữ liệu chính cũng sẽ xuất hiện trong cụm bản sao.

Bạn cũng có thể thêm nhiều bản sao vào cài đặt của bạn nếu cơ sở dữ liệu cần xử lý nhiều lưu lượng hơn.

Nếu bạn muốn tìm hiểu thêm về sao chép luồng vật lý bao gồm cách cài đặt sao chép đồng bộ đảm bảo không có khả năng mất bất kỳ dữ liệu quan trọng nào, bạn có thể đọc mục này trong tài liệu PostgreSQL chính thức.

Bạn có thể xem trang chủ đề PostgreSQL để biết thêm nội dung và hướng dẫn.


Tags:

Các tin liên quan

Cách xây dựng API REST với Prisma và PostgreSQL
2020-08-31
Cách cài đặt PostgreSQL trên Ubuntu 20.04 [Quickstart]
2020-05-27
Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 20.04
2020-05-27
Cách cài đặt và sử dụng PostgreSQL trên CentOS 8
2020-04-03
Cách cài đặt và sử dụng PostgreSQL trên CentOS 7
2020-01-08
Cách giám sát database PostgreSQL được quản lý của bạn bằng Nagios Core trên Ubuntu 18.04
2019-08-15
Cách phân tích thống kê database PostgreSQL được quản lý bằng elastic trên Ubuntu 18.04
2019-08-14
Cách sử dụng PostgreSQL với ứng dụng Ruby on Rails của bạn trên macOS
2019-07-30
Cách sử dụng PostgreSQL với ứng dụng Ruby on Rails của bạn trên Ubuntu 18.04
2019-06-28
Cách kiểm tra database PostgreSQL với InSpec trên Ubuntu 18.04
2019-04-02