Như chúng tôi đã thông báo gần đây, ClusterControl 1.7.4 có một tính năng mới được gọi là Cluster-to-Cluster Replication. Nó cho phép bạn có một bản sao chạy giữa hai cụm tự trị. Để biết thêm thông tin chi tiết, vui lòng tham khảo thông báo nêu trên.
Chúng ta sẽ xem xét cách sử dụng tính năng mới này cho một cụm PostgreSQL hiện có. Đối với tác vụ này, chúng tôi sẽ giả sử bạn đã cài đặt ClusterControl và Master Cluster đã được triển khai bằng cách sử dụng nó.
Yêu cầu đối với Cụm chính
Có một số yêu cầu đối với Cụm chính để nó hoạt động:
- PostgreSQL 9.6 trở lên.
- Phải có một máy chủ PostgreSQL với vai trò ClusterControl 'Master'.
- Khi thiết lập Cụm nô lệ, thông tin đăng nhập của Quản trị viên phải giống với Cụm chính.
Chuẩn bị Cụm Chính
Cụm chính cần đáp ứng các yêu cầu được đề cập ở trên.
Về yêu cầu đầu tiên, hãy đảm bảo rằng bạn đang sử dụng đúng phiên bản PostgreSQL trong Master Cluster và đã chọn như vậy cho Slave Cluster.
$ psql
postgres=# select version();
PostgreSQL 11.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Nếu bạn cần gán vai trò chính cho một nút cụ thể, bạn có thể thực hiện việc đó từ giao diện người dùng ClusterControl. Vào ClusterControl -> Chọn Master Cluster -> Nodes -> Chọn Node -> Node Actions -> Thúc đẩy Slave.
Và cuối cùng, trong quá trình tạo Cụm nô lệ, bạn phải sử dụng cùng một quản trị viên thông tin đăng nhập mà bạn đang sử dụng hiện tại trong Cụm chính. Bạn sẽ thấy nơi cần thêm nó trong phần sau.
Tạo Cụm nô lệ từ Giao diện người dùng ClusterControl
Để tạo một Cụm nô lệ mới, hãy đi tới ClusterControl -> Chọn Cụm -> Hành động Cụm -> Tạo Cụm nô lệ.
Cụm Slave sẽ được tạo bằng cách truyền dữ liệu từ Cụm chính hiện tại.
Trong phần này, bạn cũng phải chọn nút chính của cụm hiện tại từ đó dữ liệu sẽ được sao chép.
Khi chuyển sang bước tiếp theo, bạn phải chỉ định Người dùng, Khóa hoặc Mật khẩu và cổng để kết nối bằng SSH với máy chủ của bạn. Bạn cũng cần có tên cho Cụm Slave của mình và nếu bạn muốn ClusterControl cài đặt phần mềm và cấu hình tương ứng cho bạn.
Sau khi thiết lập thông tin truy cập SSH, bạn phải xác định phiên bản cơ sở dữ liệu, datadir, cổng và thông tin đăng nhập quản trị viên. Vì nó sẽ sử dụng sao chép trực tuyến, hãy đảm bảo bạn sử dụng cùng một phiên bản cơ sở dữ liệu và như chúng tôi đã đề cập trước đó, thông tin đăng nhập phải giống nhau được sử dụng bởi Master Cluster. Bạn cũng có thể chỉ định kho lưu trữ nào sẽ sử dụng.
Trong bước này, bạn cần thêm máy chủ vào Cụm nô lệ mới . Đối với tác vụ này, bạn có thể nhập cả Địa chỉ IP hoặc Tên máy chủ của nút cơ sở dữ liệu.
Bạn có thể theo dõi trạng thái tạo Cụm nô lệ mới của mình từ Giám sát hoạt động ClusterControl. Sau khi tác vụ hoàn thành, bạn có thể thấy cụm trong màn hình ClusterControl chính.
Quản lý sao chép theo cụm-thành-cụm bằng giao diện người dùng ClusterControl
Bây giờ bạn đã thiết lập và chạy Bản sao theo cụm từ cụm thành cụm của mình, có các hành động khác nhau để thực hiện trên cấu trúc liên kết này bằng cách sử dụng ClusterControl.
Xây dựng lại Cụm nô lệ
Để xây dựng lại Cụm Slave, hãy đi tới ClusterControl -> Chọn Cụm Slave -> Nút -> Chọn Nút được kết nối với Cụm chính -> Hành động của Nút -> Xây dựng lại Slave Sao chép.
ClusterControl sẽ thực hiện các bước sau:
- Dừng Máy chủ PostgreSQL
- Xóa nội dung khỏi datadir của nó
- Truyền một bản sao lưu từ Master đến Slave bằng pg_basebackup
- Khởi động Slave
Dừng / Bắt đầu Nô lệ sao chép
Việc dừng và bắt đầu sao chép trong PostgreSQL có nghĩa là tạm dừng và tiếp tục lại, nhưng chúng tôi sử dụng các điều khoản này để phù hợp với các công nghệ cơ sở dữ liệu khác mà chúng tôi hỗ trợ.
Chức năng này sẽ sớm có sẵn để sử dụng từ giao diện người dùng ClusterControl. Hành động này sẽ sử dụng các hàm pg_wal_replay_pause và pg_wal_replay_resume PostgreSQL để thực hiện tác vụ này.
Trong khi đó, bạn có thể sử dụng một giải pháp thay thế để dừng và bắt đầu sao chép nô lệ dừng và khởi động nút cơ sở dữ liệu một cách dễ dàng bằng cách sử dụng ClusterControl.
Đi tới ClusterControl -> Chọn Cụm nô lệ -> Nút -> Chọn Node -> Node Actions -> Stop Node / Start Node. Hành động này sẽ trực tiếp dừng / khởi động dịch vụ cơ sở dữ liệu.
Quản lý sao chép cụm-thành-cụm bằng CLI ClusterControl
Trong phần trước, bạn đã có thể xem cách quản lý Nhân bản theo cụm-thành-cụm bằng giao diện người dùng ClusterControl. Bây giờ, hãy xem cách thực hiện bằng cách sử dụng dòng lệnh.
Lưu ý:Như chúng tôi đã đề cập ở phần đầu của blog này, chúng tôi sẽ cho rằng bạn đã cài đặt ClusterControl và Master Cluster đã được triển khai bằng cách sử dụng nó.
Tạo Cụm nô lệ
Trước tiên, hãy xem một lệnh ví dụ để tạo một Cụm nô lệ bằng cách sử dụng ClusterControl CLI:
$ s9s cluster --create --cluster-name=PostgreSQL1rep --cluster-type=postgresql --provider-version=11 --nodes="192.168.100.133" --os-user=root --os-key-file=/root/.ssh/id_rsa --db-admin=admin --db-admin-passwd=********* --vendor=postgres --remote-cluster-id=21 --log
Bây giờ bạn đã chạy quá trình tạo nô lệ của mình, hãy xem từng tham số đã sử dụng:
- Cụm:Để liệt kê và thao tác các cụm.
- Tạo:Tạo và cài đặt một cụm mới.
- Cluster-name:Tên của Cụm nô lệ mới.
- Cluster-type:Loại cụm để cài đặt.
- Phiên bản nhà cung cấp:Phiên bản phần mềm.
- Nút:Danh sách các nút mới trong Cụm nô lệ.
- Os-user:Tên người dùng cho các lệnh SSH.
- Os-key-file:Tệp khóa để sử dụng cho kết nối SSH.
- Db-admin:Tên người dùng quản trị cơ sở dữ liệu.
- Db-admin-passwd:Mật khẩu dành cho quản trị viên cơ sở dữ liệu.
- Remote-cluster-id:Master Cluster ID cho bản sao Cluster-to-Cluster.
- Nhật ký:Chờ và theo dõi thông báo công việc.
Sử dụng cờ --log, bạn sẽ có thể xem nhật ký trong thời gian thực:
Verifying job parameters.
192.168.100.133: Checking ssh/sudo.
192.168.100.133: Checking if host already exists in another cluster.
Checking job arguments.
Found top level master node: 192.168.100.133
Verifying nodes.
Checking nodes that those aren't in another cluster.
Checking SSH connectivity and sudo.
192.168.100.133: Checking ssh/sudo.
Checking OS system tools.
Installing software.
Detected centos (core 7.5.1804).
Data directory was not specified. Using directory '/var/lib/pgsql/11/data'.
192.168.100.133:5432: Configuring host and installing packages if neccessary.
...
Cluster 26 is running.
Generated & set RPC authentication token.
Xây dựng lại Cụm nô lệ
Bạn có thể xây dựng lại Cụm nô lệ bằng lệnh sau:
$ s9s replication --stage --master="192.168.100.125" --slave="192.168.100.133" --cluster-id=26 --remote-cluster-id=21 --log
Các tham số là:
- Sao chép:Để theo dõi và kiểm soát việc sao chép dữ liệu.
- Giai đoạn:Giai đoạn / Xây dựng lại một Slave nhân bản.
- Master:Bản sao chính trong cụm chính.
- Slave:Nô lệ sao chép trong cụm nô lệ.
- Cluster-id:ID cụm nô lệ.
- Remote-cluster-id:ID cụm chính.
- Nhật ký:Chờ và theo dõi thông báo công việc.
Nhật ký công việc phải tương tự như sau:
Rebuild replication slave 192.168.100.133:5432 from master 192.168.100.125:5432.
Remote cluster id = 21
192.168.100.125: Checking size of '/var/lib/pgsql/11/data'.
192.168.100.125: /var/lib/pgsql/11/data size is 201.13 MiB.
192.168.100.133: Checking free space in '/var/lib/pgsql/11/data'.
192.168.100.133: /var/lib/pgsql/11/data has 28.78 GiB free space.
192.168.100.125:5432(master): Verifying PostgreSQL version.
192.168.100.125: Verifying the timescaledb-postgresql-11 installation.
192.168.100.125: Package timescaledb-postgresql-11 is not installed.
Setting up replication 192.168.100.125:5432->192.168.100.133:5432
Collecting server variables.
192.168.100.125:5432: Using the pg_hba.conf contents for the slave.
192.168.100.125:5432: Will copy the postmaster.opts to the slave.
192.168.100.133:5432: Updating slave configuration.
Writing file '192.168.100.133:/var/lib/pgsql/11/data/postgresql.conf'.
192.168.100.133:5432: GRANT new node on members to do pg_basebackup.
192.168.100.125:5432: granting 192.168.100.133:5432.
192.168.100.133:5432: Stopping slave.
192.168.100.133:5432: Stopping PostgreSQL node.
192.168.100.133: waiting for server to shut down.... done
server stopped
…
192.168.100.133: waiting for server to start....2019-11-12 15:51:11.767 UTC [8005] LOG: listening on IPv4 address "0.0.0.0", port 5432
2019-11-12 15:51:11.767 UTC [8005] LOG: listening on IPv6 address "::", port 5432
2019-11-12 15:51:11.769 UTC [8005] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2019-11-12 15:51:11.774 UTC [8005] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2019-11-12 15:51:11.798 UTC [8005] LOG: redirecting log output to logging collector process
2019-11-12 15:51:11.798 UTC [8005] HINT: Future log output will appear in directory "log".
done
server started
192.168.100.133:5432: Grant cluster members on the new node (for failover).
Grant connect access for new host in cluster.
Adding grant on 192.168.100.125:5432.
192.168.100.133:5432: Waiting until the service is started.
Replication slave job finished.
Dừng / Bắt đầu Nô lệ sao chép
Như chúng tôi đã đề cập trong phần Giao diện người dùng, dừng và bắt đầu sao chép trong PostgreSQL có nghĩa là tạm dừng và tiếp tục nó, nhưng chúng tôi sử dụng các điều khoản này để giữ sự song song với các công nghệ khác.
Bạn có thể dừng để sao chép dữ liệu từ Cụm chính theo cách này:
$ s9s replication --stop --slave="192.168.100.133" --cluster-id=26 --log
Bạn sẽ thấy điều này:
192.168.100.133:5432: Pausing recovery of the slave.
192.168.100.133:5432: Successfully paused recovery on the slave using select pg_wal_replay_pause().
Và bây giờ, bạn có thể bắt đầu lại:
$ s9s replication --start --slave="192.168.100.133" --cluster-id=26 --log
Vì vậy, bạn sẽ thấy:
192.168.100.133:5432: Resuming recovery on the slave.
192.168.100.133:5432: Collecting replication statistics.
192.168.100.133:5432: Slave resumed recovery successfully using select pg_wal_replay_resume().
Bây giờ, hãy kiểm tra các thông số đã sử dụng.
- Sao chép:Để theo dõi và kiểm soát việc sao chép dữ liệu.
- Dừng / Bắt đầu:Để làm cho máy phụ dừng / bắt đầu sao chép.
- Slave:Nút nô lệ nhân bản.
- Cluster-id:ID của cụm chứa nút phụ.
- Nhật ký:Chờ và theo dõi thông báo công việc.
Kết luận
Tính năng ClusterControl mới này sẽ cho phép bạn nhanh chóng thiết lập sao chép giữa các cụm PostgreSQL khác nhau và quản lý thiết lập một cách dễ dàng và thân thiện. Nhóm nhà phát triển của Somenines đang làm việc để cải tiến tính năng này, vì vậy mọi ý tưởng hoặc đề xuất đều rất được hoan nghênh.