Bạn có biết rằng ngoài giao diện người dùng web ClusterControl, bạn cũng có thể sử dụng giao diện dòng lệnh để quản lý các phiên bản PostgreSQL của mình không?
ClusterControl hỗ trợ sao chép luồng PostgreSQL (cả sao chép không đồng bộ và đồng bộ) cũng như bản sao PostgreSQL độc lập. Chúng tôi đã nỗ lực hết sức để làm cho giao diện dòng lệnh gần với giao diện người dùng về mặt chức năng.
Tại sao bạn muốn sử dụng CLI?
Nó cho phép bạn triển khai toàn bộ thiết lập sao chép trong một lệnh hoặc thực hiện chuyển đổi dự phòng hoặc thêm các nút mới vào thiết lập. Điều này tích hợp rất tốt với mã tự động hóa cơ sở hạ tầng hiện có của bạn được viết bằng Ansible, Chef hoặc Puppet.
Bài đăng trên blog này cung cấp hướng dẫn về cách quản lý cụm sao chép luồng PostgreSQL bằng ClusterControl CLI hoặc s9s.
Lưu ý rằng hầu hết các chức năng được hiển thị trong bài đăng blog này yêu cầu bạn phải cài đặt và chạy ClusterControl với đăng ký hợp lệ, giấy phép thương mại hoặc giấy phép dùng thử miễn phí (có giá trị trong vòng 30 ngày sau khi cài đặt ClusterControl).
Triển khai và nhập cụm
Triển khai một cụm mới
Trước khi triển khai một cụm mới hoặc nhập một cụm PostgreSQL hiện có vào ClusterControl, hãy đảm bảo SSH không có mật khẩu từ nút ClusterControl đến tất cả các nút cơ sở dữ liệu đã được định cấu hình trước. Giả sử chúng tôi muốn triển khai một bản sao phát trực tuyến PostgreSQL ba nút mới, hãy chạy các lệnh sau trên nút ClusterControl:
$ whoami
root
$ ssh-keygen -t rsa # if you haven't generated SSH key
$ ssh-copy-id 192.168.0.91 # PostgreSQL1
$ ssh-copy-id 192.168.0.92 # PostgreSQL2
$ ssh-copy-id 192.168.0.93 # PostgreSQL3
Trên nút ClusterControl, hãy xác minh xem bạn có thể thực hiện lệnh sau mà không cần mật khẩu:
$ ssh 192.168.0.91 "ls /root"
Nếu bạn có thể nhìn thấy nội dung thư mục, bạn đang ở trong tình trạng tốt. Tiếp theo, sử dụng ClusterControl CLI với cờ --create để triển khai cụm:
$ s9s cluster \
--create \
--cluster-type=postgresql \
--nodes="192.168.0.91?master;192.168.0.92?slave;192.168.0.93?slave" \
--provider-version='11' \
--db-admin='postgres' \
--db-admin-passwd='s3cr3tP455' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name='PostgreSQL 11 Streaming Replication' \
--wait
Creating PostgreSQL Cluster
\ Job 259 RUNNING [█▋ ] 15% Installing helper packages
Chúng tôi đã chỉ định nút đầu tiên, 192.168.0.91 là nút chính và các nút còn lại là nô lệ. Vì chúng tôi đã định cấu hình SSH không cần mật khẩu thông qua người dùng root, chúng tôi đã chỉ định người dùng OS là "root" cùng với tệp khóa SSH tương ứng bằng cờ --os-key-file. Cờ --wait có nghĩa là công việc sẽ đợi và báo cáo tiến trình cho đến khi hoàn thành.
Bạn cũng có thể theo dõi tiến trình triển khai từ Giao diện người dùng ClusterControl trong Hoạt động> Công việc> Tạo Cụm PostgreSQL :
Khi quá trình triển khai hoàn tất, chúng ta có thể xem tóm tắt của cụm đang chạy bằng cách sử dụng cờ --stat:
$ s9s cluster --stat
Nhập một cụm hiện có
Nếu giả sử bạn đã có một cụm sao chép luồng PostgreSQL được triển khai theo cách thủ công, bạn có thể nhập nó vào ClusterControl bằng cách sử dụng cờ --register như được hiển thị trong lệnh sau:
$ s9s cluster \
--register \
--cluster-type=postgresql \
--nodes="192.168.0.91;192.168.0.92;192.168.0.93" \
--provider-version='11' \
--db-admin='postgres' \
--db-admin-passwd='s3cr3tP455' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name="PostgreSQL 11" \
--wait
Register PostgreSQL
- Job 263 RUNNING [ █ ] ---% Importing Cluster
Sau đó, ClusterControl sẽ kết nối với các nút được chỉ định, khám phá cấu trúc liên kết và đăng ký cụm vào ClusterControl. Bạn có thể xác minh bằng lệnh 's9s cluster --stat' như được hiển thị ở trên.
Quản lý nút và cụm
Kiểm soát dịch vụ
Để thực hiện khởi động lại liên tục một cụm, hãy chỉ định ID cụm và sử dụng cờ --rolling-restart:
$ s9s cluster --rolling-restart --cluster-id=8 --wait
Rolling Restart
- Job 264 RUNNING [██▊ ] 27% Waiting for 192.168.0.91
Sử dụng cờ --stop cho "cụm" thành phần để dừng một cụm. Để xem kết quả công việc thay vì thanh tiến trình, chúng ta có thể sử dụng cờ --log thay thế:
$ s9s cluster --stop --cluster-id=8 --log
This is an RPC V2 job (a job created through RPC V2).
The job owner is 'admin'.
Accessing '/.runtime/jobs/jobExecutor' to execute...
Access ok.
Setting cluster to 'SHUTTING_DOWN' state.
192.168.0.91:5432: Stopping PostgreSQL service.
192.168.0.91:5432: Waiting PostgreSQL top stop.
192.168.0.92:5432: Stopping PostgreSQL service.
192.168.0.92:5432: Waiting PostgreSQL top stop.
192.168.0.93:5432: Stopping PostgreSQL service.
192.168.0.93:5432: Waiting PostgreSQL top stop.
Setting cluster to 'STOPPED' state.
Nó sẽ báo cáo các thông báo công việc giống như giao diện người dùng web. Tương tự như trên, để bắt đầu một cụm, chỉ cần sử dụng cờ --start (chúng tôi sử dụng cờ --wait thay thế để xem tiến trình thay vì nhật ký công việc):
$ s9s cluster --start --cluster-id=8 --wait
Starting Cluster
\ Job 272 RUNNING [ █ ] ---% Start Cluster
Để khởi động lại dịch vụ PostgreSQL trên một nút cơ sở dữ liệu, chúng tôi sử dụng thành phần "nút" và cờ --restart:
$ s9s node \
--restart \
--cluster-id=8 \
--nodes=192.168.0.92 \
--log
Preparing to restart host.
192.168.0.92:5432: Stopping PostgreSQL service.
192.168.0.92:5432: Waiting to stop.
192.168.0.92:5432: Starting PostgreSQL.
192.168.0.92:5432: The postgresql service was started.
192.168.0.92:5432: Waiting to start.
Để dừng và bắt đầu một nút PostgreSQL, chỉ cần áp dụng cùng một lệnh với cờ --stop hoặc --start, như được hiển thị bên dưới:
$ s9s node --stop --cluster-id=8 --nodes=192.168.0.92
$ s9s node --start --cluster-id=8 --nodes=192.168.0.92
Lưu ý rằng những hành động đó sẽ không khởi động lại hệ thống.
Nút chia tỷ lệ
Để xóa một nút khỏi một cụm, hãy sử dụng cờ --remove-node:
$ s9s cluster \
--remove-node \
--nodes=192.168.0.93 \
--cluster-id=8 \
--log
Removing node 192.168.0.93: checking job parameters.
192.168.0.93:5432: Stopping PostgreSQL service.
192.168.0.93:5432: Waiting to stop.
192.168.0.93:5432: removed PostgreSQL Server
Updating load balancers.
Việc thêm một nút mới cũng hoạt động tương tự, nhưng trước đó bạn phải đảm bảo rằng nút đó có thể truy cập được thông qua SSH không cần mật khẩu. Định cấu hình nó trước rồi thêm nút bằng cờ --add-node:
$ s9s cluster \
--add-node \
--nodes=192.168.0.93 \
--cluster-id=8 \
--log
addNode: Verifying job parameters.
Found a master candidate: 192.168.0.91:5432, adding 192.168.0.93:5432 as a slave.
Verifying job parameters.
192.168.0.93:5432: Disabling SELinux/Apparmor.
192.168.0.93: Checking firewall.
192.168.0.93: Disabling firewalld.
192.168.0.93: Flushing iptables.
192.168.0.93:5432: Installing new node.
192.168.0.93:5432: Using the master's data directory '/var/lib/pgsql/11/data'.
192.168.0.91: Checking size of '/var/lib/pgsql/11/data'.
192.168.0.91: /var/lib/pgsql/11/data size is 103.00 MiB.
192.168.0.93: Checking free space in '/var/lib/pgsql/11/data'.
192.168.0.93: /var/lib/pgsql/11/data has 34.19 GiB free space.
192.168.0.93:5432: Setting SELinux in permissive mode.
192.168.0.93:5432: Disabling firewall.
192.168.0.93:5432: Tuning OS parameters.
192.168.0.93:5432: Setting vm.swappiness = 1.
192.168.0.93:5432: Installing helper packages.
192.168.0.93: Upgrading nss.
192.168.0.93: Upgrading ca-certificates.
192.168.0.93: Installing net-tools.
192.168.0.93: Installing netcat.
192.168.0.93: Installing nc.
192.168.0.93: Installing socat.
192.168.0.93: Installing perl-Data-Dumper.
192.168.0.93: Installing which.
192.168.0.93: Installing perl-Data-Dumper-Names.
192.168.0.93: Installing psmisc.
192.168.0.93: Installing rsync.
192.168.0.93: Installing libaio.
192.168.0.93: Installing libevent.
192.168.0.93: Installing wget.
192.168.0.93: Installing curl.
192.168.0.93: Installing gnupg2.
192.168.0.93: Installing pigz.
192.168.0.93: Installing bzip2.
192.168.0.93: Installing iproute2.
192.168.0.93: Installing tar.
192.168.0.93: Installing openssl.
192.168.0.93: Upgrading openssl openssl-libs.
192.168.0.93: Finished with helper packages.
192.168.0.93:5432: Using External repositories.
192.168.0.93:5432: Setting up PostgreSQL repositories.
192.168.0.93:5432: Uninstalling old PostgreSQL packages.
192.168.0.93:5432: Installing PostgreSQL 11 packages (centos-7).
192.168.0.93:5432: PostgreSQL installed, init-name: postgresql-11.
192.168.0.93: Updating PostgreSQL port (5432) and directory.
192.168.0.93:5432: Granting remote access to PostgreSQL server.
192.168.0.93:5432: Granting controller (10.0.2.15,192.168.0.19).
192.168.0.93:5432: Updating configuration.
192.168.0.93:5432: Enabling stat_statements plugin.
192.168.0.93:5432: Setting wal options.
192.168.0.93:5432: Performance tuning.
192.168.0.93:5432: Selected workload type: mixed
Detected system memory: 991.18 MiB
Using the following fine-tuning options:
checkpoint_completion_target: 0.9
effective_cache_size: 761229kB
maintenance_work_mem: 63435kB
max_connections: 100
shared_buffers: 253743kB
wal_keep_segments: 32
work_mem: 5074kB
Writing file '192.168.0.93:/var/lib/pgsql/11/data/postgresql.conf'.
192.168.0.93:5432: Restarting PostgreSQL service
192.168.0.93:5432: Testing connection (attempt #1).
192.168.0.93:5432: Connected ok.
192.168.0.93:5432: Using the master's data directory '/var/lib/pgsql/11/data'.
192.168.0.91:5432(master): Verifying PostgreSQL version.
Setting up replication 192.168.0.91:5432->192.168.0.93:5432
Collecting server variables.
192.168.0.91:5432: Using the pg_hba.conf contents for the slave.
192.168.0.93:5432: Updating slave configuration.
Writing file '192.168.0.93:/var/lib/pgsql/11/data/postgresql.conf'.
192.168.0.93:5432: GRANT new node on members to do pg_basebackup.
192.168.0.91:5432: granting 192.168.0.93:5432.
192.168.0.93:5432: Stopping slave.
192.168.0.93:5432: Cleaning up slave data directory: /var/lib/pgsql/11/data
192.168.0.93:5432: detected version: 11.1
192.168.0.93:5432: Doing initial sync (pg_basebackup) from 192.168.0.91:5432.
192.168.0.93:5432: Synchronizing pg_hba.conf from master.
Writing file '192.168.0.93:/var/lib/pgsql/11/data/postgresql.conf'.
192.168.0.93:5432: Creating '/var/lib/pgsql/11/data/recovery.conf': Setting 192.168.0.91:5432 as master.
192.168.0.93:5432: Successfully created '/var/lib/pgsql/11/data/recovery.conf'.
192.168.0.93:5432: Restarting PostgreSQL
192.168.0.93:5432: Grant cluster members on the new node (for failover).
Grant connect access for new host in cluster.
Adding grant on 192.168.0.91:5432.
Adding grant on 192.168.0.92:5432.
192.168.0.93:5432: Waiting until service starts.
192.168.0.93:5432: Registering node.
192.168.0.93:5432: Verifying configuration.
192.168.0.93:5432: Checking 'listen_addresses'.
192.168.0.93:5432: Checking variables.
192.168.0.93:5432: Detected PostgreSQL 11.1.
192.168.0.93:5432: Registering host with host manager.
192.168.0.93:5432: Added host to cluster.
Replication slave job finished.
192.168.0.93: Installing cronie.
192.168.0.91:5432: [postgres] Pulling '/var/lib/pgsql/11/data/postgresql.conf'.
192.168.0.92:5432: [postgres] Pulling '/var/lib/pgsql/11/data/postgresql.conf'.
192.168.0.93:5432: [postgres] Pulling '/var/lib/pgsql/11/data/postgresql.conf'.
Từ nhật ký công việc, chúng ta có thể thấy rằng vì cluster đã có một master đang chạy (192.168.0.91), nên nút mới sẽ được triển khai như một nô lệ cho master. Sau đó, ClusterControl sẽ thực hiện tất cả các hành động cần thiết và chuẩn bị cho nút mới với vai trò đã cho tương ứng.
Chuyển sang một Master mới
Để thực hiện chuyển đổi, hãy chọn một trong các máy chủ để trở thành máy chủ mới với cờ --promote-slave:
$ s9s cluster \
--promote-slave \
--nodes=192.168.0.92 \
--cluster-id=8 \
--log
192.168.0.92:5432: Promoting server to master.
192.168.0.92:5432: Current master is 192.168.0.91:5432.
SERVER HOST_STATUS STATUS ROLE RECEIVE/REPLAY
192.168.0.91 CmonHostOnline NODE_CONNECTED master 0/9000EF0; 0/9000EF0
192.168.0.92 CmonHostOnline NODE_CONNECTED slave 0/9000EF0; 0/9000EF0
192.168.0.93 CmonHostOnline NODE_CONNECTED slave 0/9000EF0; 0/9000EF0
Switching over to 192.168.0.92:5432 (previous master is 192.168.0.91:5432)
192.168.0.91:5432: Stopping the current master.
192.168.0.91:5432: Stopping PostgreSQL service.
192.168.0.91:5432: Waiting to stop.
192.168.0.92:5432: Failover, using file.
192.168.0.92:5432: Waiting to become a master.
192.168.0.92:5432: Became master, ok.
Switching slaves to the new master.
192.168.0.93:5432: Stopping PostgreSQL service.
192.168.0.93:5432: Waiting to stop.
192.168.0.92:5432: Granting host (192.168.0.93:5432).
Running /usr/pgsql-11/bin/pg_rewind --target-pgdata=/var/lib/pgsql/11/data --source-server="host=192.168.0.92 port=5432 user=cmon password=***** dbname=postgres"
192.168.0.93: servers diverged at WAL location 0/9000F60 on timeline 1
no rewind required
192.168.0.93:5432: Creating '/var/lib/pgsql/11/data/recovery.conf': Setting 192.168.0.92:5432 as master.
192.168.0.93:5432: Successfully created '/var/lib/pgsql/11/data/recovery.conf'.
192.168.0.93:5432: Starting PostgreSQL.
192.168.0.93:5432: The postgresql service was started.
192.168.0.93:5432: Waiting to start.
192.168.0.93:5432: Restarted with new master.
192.168.0.91:5432: Stopping PostgreSQL service.
192.168.0.91:5432: Waiting to stop.
192.168.0.92:5432: Granting host (192.168.0.91:5432).
Running /usr/pgsql-11/bin/pg_rewind --target-pgdata=/var/lib/pgsql/11/data --source-server="host=192.168.0.92 port=5432 user=cmon password=***** dbname=postgres"
192.168.0.91: servers diverged at WAL location 0/9000F60 on timeline 1
no rewind required
192.168.0.91:5432: Creating '/var/lib/pgsql/11/data/recovery.conf': Setting 192.168.0.92:5432 as master.
192.168.0.91:5432: Successfully created '/var/lib/pgsql/11/data/recovery.conf'.
192.168.0.91:5432: Starting PostgreSQL.
192.168.0.91:5432: The postgresql service was started.
192.168.0.91:5432: Waiting to start.
192.168.0.91:5432: Restarted with new master.
Servers after promote:
SERVER HOST_STATUS STATUS ROLE RECEIVE/REPLAY
192.168.0.91 CmonHostOnline NODE_CONNECTED slave 0/9001F90; 0/9001F90
192.168.0.92 CmonHostOnline NODE_CONNECTED master 0/9001F90; 0/9001F90
192.168.0.93 CmonHostOnline NODE_CONNECTED slave 0/9001F90; 0/9001F90
192.168.0.92:5432: promote finished (this is the new master).
Successfully promoted a new master.
Các thông báo công việc cho thấy rằng ClusterControl trước tiên sẽ khám phá cấu trúc liên kết hiện tại và dừng tất cả các nút trong cụm. Sau đó, nó cấu hình cái chính mới và nhận các nút khác để sao chép từ nó. Nó cũng sẽ cố gắng chạy pg_rewind để đồng bộ hóa lại PGDATA của bản chính đã bị hạ cấp với bản sao lưu cơ sở mới. Khi kết thúc công việc, ClusterControl báo cáo cấu trúc liên kết hiện tại và trạng thái của quảng cáo.
Sau đó, chúng tôi có thể xác minh bằng cách liệt kê tất cả các nút cho ID cụm 8:
$ s9s node --list --cluster-id=8 --long
STAT VERSION CID CLUSTER HOST PORT COMMENT
coC- 1.7.1.2985 8 PostgreSQL 11 192.168.0.19 9500 Up and running.
poS- 11.1 8 PostgreSQL 11 192.168.0.91 5432 Up and running.
poM- 11.1 8 PostgreSQL 11 192.168.0.92 5432 Up and running.
poS- 11.1 8 PostgreSQL 11 192.168.0.93 5432 Up and running.
Trạng thái "poM-" ở cột ngoài cùng bên trái mang ý nghĩa sau:
- p - Nút PostgreSQL
- o - trực tuyến
- M - bậc thầy
Quản lý cơ sở dữ liệu
Để liệt kê tất cả các cơ sở dữ liệu được tìm thấy trên cụm, hãy sử dụng cờ --list-database trên cụm thành phần:
$ s9s cluster \
--list-database \
--long \
--cluster-id=8
SIZE #TBL #ROWS OWNER GROUP CLUSTER DATABASE
7340032 0 0 system admins PostgreSQL Streaming Replication postgres
7340032 0 0 system admins PostgreSQL Streaming Replication template1
7340032 0 0 system admins PostgreSQL Streaming Replication template0
382730240 12 1156642 system admins PostgreSQL Streaming Replication sbtest
Lưu ý rằng nếu cụm có nhiều cơ sở dữ liệu, tùy chọn này có thể không hiển thị một số cơ sở dữ liệu trong số đó. Việc lấy mẫu một số lượng lớn cơ sở dữ liệu sẽ tạo ra tải cao và do đó, bộ điều khiển có giới hạn trên được tích hợp sẵn.
Nếu bạn muốn tạo một cơ sở dữ liệu mới cho cụm, chỉ cần thực hiện:
$ s9s cluster \
--create-database \
--cluster-id=8 \
--db-name=my_shopping_db
Để tạo một người dùng cơ sở dữ liệu mới, cùng với một cơ sở dữ liệu được liên kết với nó (sử dụng cùng một tên cơ sở dữ liệu), hãy sử dụng cờ --create-account with --with-database:
$ s9s cluster \
--create-account \
--cluster-id=1 \
--account=mysystem:[email protected] \
--with-database
Account 'mysystem' created.
192.168.0.91:5432: Allowing connections from 192.168.0.15.
192.168.0.92:5432: Allowing connections from 192.168.0.15.
192.168.0.93:5432: Allowing connections from 192.168.0.15.
Database 'mysystem' created.
Access for 'mysystem' to 'mysystem' granted.
ClusterControl sẽ thực hiện các hành động cần thiết để tạo cơ sở dữ liệu và tài khoản người dùng với các đặc quyền thích hợp và cho phép nó trên tất cả các nút cơ sở dữ liệu.
Quản lý sao lưu
ClusterControl hỗ trợ hai phương pháp sao lưu cho PostgreSQL:
- pgdump - Bí danh của pg_dumpall, một tiện ích để ghi tất cả cơ sở dữ liệu PostgreSQL của một cụm vào một tệp kịch bản.
- pg_basebackup - Một tiện ích để tạo bản sao lưu toàn bộ, cấp hệ thống tệp cho cơ sở dữ liệu PostgreSQL.
Tạo bản sao lưu
Để tạo bản sao lưu mới bằng pg_dumpall, hãy chọn một nút cơ sở dữ liệu và chỉ định "pgdump" trong cờ --backup-method:
$ s9s backup \
--create \
--backup-method=pgdump \
--cluster-id=8 \
--nodes=192.168.0.92 \
--backup-directory=/storage/backups \
--on-controller
Cờ --on-controller chỉ ra rằng chúng ta muốn bản sao lưu đã tạo được lưu trữ trong thư mục / storage / backups trên nút ClusterControl. Bỏ qua cờ nếu bạn muốn lưu trữ nó trên chính nút cơ sở dữ liệu. Lệnh tương tự có thể được áp dụng để tạo bản sao lưu pg_basebackup. Chỉ cần thay thế "pgdump" bằng "pg_basebackup" là được.
Để liệt kê bản sao lưu, chỉ cần sử dụng cờ --list và --cluster-id:
$ s9s backup --list --long --cluster-id=8
ID PI CID V I STATE OWNER HOSTNAME CREATED SIZE TITLE
8 - 8 - F COMPLETED admin 192.168.0.92 08:42:47 1204 Untitled Backup Record
9 - 8 - F COMPLETED admin 192.168.0.92 08:45:52 3865462 Untitled Backup Record
Lập lịch sao lưu
Lập lịch sao lưu tương tự như lệnh chúng ta đã sử dụng để tạo bản sao lưu, với cờ --recency bổ sung:
$ s9s backup \
--create \
--backup-method=pg_basebackup \
--cluster-id=8 \
--nodes=192.168.0.92 \
--backup-directory=/storage/backups \
--on-controller \
--recurrence='30 0 * * *'
Giá trị của sự lặp lại phải được kèm theo dấu ngoặc kép và ở định dạng crontab.
Khôi phục bản sao lưu
Để khôi phục bản sao lưu vào một cụm, hãy sử dụng cờ --restore và chỉ ra ID sao lưu mà bạn muốn sử dụng:
$ s9s backup \
--restore \
--cluster-id=8 \
--backup-id=9 \
--log
192.168.0.19: Checking 'socat' availability.
Stop slaves as restoring offline backup to master.
192.168.0.91:5432: Stopping PostgreSQL service.
192.168.0.91:5432: Waiting to stop.
192.168.0.93:5432: Stopping PostgreSQL service.
192.168.0.93:5432: Waiting to stop.
192.168.0.92:5432: Stopping node for restoring a base-backup.
192.168.0.92:5432: Stopping PostgreSQL service.
192.168.0.92:5432: Waiting to stop.
192.168.0.92:5432: Backing up the current datadir.
192.168.0.92: Mount point of '/var/lib/pgsql/11/data': '/'
192.168.0.92: Creating copy of datadir (using 'mv'): /var/lib/pgsql/11/data_bak
192.168.0.92: Checking 'socat' availability.
192.168.0.92: Starting: su - postgres -c 'socat -u tcp-listen:9999,reuseaddr stdout | tar -C/var/lib/pgsql/11/data -xzf-' 2>&1 > /tmp/netcat.pg.log
192.168.0.92: socat/nc is started.
192.168.0.92: Restoring from '192.168.0.19':'/storage/backups/BACKUP-9/base.tar.gz'
192.168.0.92:5432: Starting node after restored a base-backup.
192.168.0.92:5432: Starting PostgreSQL.
192.168.0.92:5432: The postgresql service was started.
192.168.0.92:5432: Waiting to start.
You may now rebuild your slaves.
Finished restoring.
Checking the cluster.
Setting cluster to 'STARTING' state.
192.168.0.91:5432: Starting PostgreSQL.
192.168.0.91:5432: The postgresql service was started.
192.168.0.93:5432: Starting PostgreSQL.
192.168.0.93:5432: The postgresql service was started.
Cluster is successfully started.
Cluster status is STARTED.
Lưu ý rằng đối với bản sao lưu của pg_basebackup, hoạt động khôi phục yêu cầu thời gian chết của cơ sở dữ liệu. Tất cả các nút PostgreSQL sẽ bị dừng trước khi khôi phục và quá trình khôi phục diễn ra trên tổng thể cuối cùng đã biết. Trang chủ này sẽ được hiển thị đầu tiên (tiếp theo là tất cả các nô lệ) sau khi quá trình khôi phục hoàn tất.
Xác minh bản sao lưu
Để khôi phục và xác minh bản sao lưu, hãy sử dụng cờ --verify và chỉ định máy chủ đích bằng cờ --test-server:
$ s9s backup \
--verify \
--cluster-id=8 \
--backup-id=9 \
--test-server=192.168.0.99 \
--log
Máy chủ thử nghiệm không được là một phần của cụm và phải có thể truy cập được qua SSH không cần mật khẩu từ nút ClusterControl. ClusterControl trước tiên sẽ cài đặt máy chủ đích có cùng phiên bản PostgreSQL, phát trực tuyến và khôi phục bản sao lưu trên nút đó. Xác minh sao lưu tìm kiếm mã thoát cuối cùng sau khi khôi phục. Nếu bản sao lưu có thể khôi phục được, ClusterControl sau đó sẽ dừng máy chủ thử nghiệm và xóa nó khỏi ClusterControl (nhưng ClusterControl sẽ không tắt nó). Bạn sẽ thấy thông tin sau khi công việc hoàn thành:
Backup 9 was successfully verified.
Tạo cụm từ sao lưu
ClusterControl đã giới thiệu một tính năng mới trong v1.7.1, nơi người ta có thể tạo một cụm mới dựa trên bản sao lưu được lấy bởi một cụm hiện có. Điều này có thể rất hữu ích để kiểm tra cơ sở dữ liệu của bạn trên một nền tảng hoặc phiên bản cơ sở dữ liệu khác. Trong ví dụ này, chúng tôi muốn triển khai một cụm PostgreSQL 9.6 hai nút dựa trên ID dự phòng 214:
$ s9s cluster \
--create \
--cluster-type=postgresql \
--nodes="192.168.0.101?master;192.168.0.102?slave" \
--provider-version=9.6 \
--db-admin=postgres \
--db-admin-passwd='s3cr3tP455' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name="PostgreSQL 9.6 - Test"
--backup-id=214 \
--wait
Lưu ý rằng mật khẩu người dùng quản trị viên cho cụm mới phải giống với mật khẩu quản trị viên PostgreSQL như được bao gồm trong bản sao lưu. Về cơ bản, ClusterControl thực hiện công việc triển khai dựa trên thứ tự sau:
- Cài đặt các phần mềm và phụ thuộc cần thiết trên tất cả các nút PostgreSQL.
- Bắt đầu nút đầu tiên.
- Phát trực tiếp và khôi phục bản sao lưu trên nút đầu tiên (có cờ tự động khởi động lại).
- Định cấu hình và thêm phần còn lại của các nút.
Sau đó, bạn có thể xác minh danh sách cụm bằng cách sử dụng lệnh sau:
$ s9s cluster --stat
Quản lý cấu hình
Để liệt kê cấu hình PostgreSQL của một nút, hãy sử dụng cờ --list-config:
$ s9s node --list-config --cluster-id=8 --nodes=192.168.0.92
GROUP OPTION NAME VALUE
- data_directory '/var/lib/pgsql/11/data'
- listen_addresses '*'
- port 5432
- max_connections 100
- shared_buffers 253743kB
- work_mem 5074kB
- maintenance_work_mem 63435kB
- dynamic_shared_memory_type posix
- wal_level hot_standby
- full_page_writes on
- wal_log_hints on
- max_wal_size 1GB
- min_wal_size 80MB
- checkpoint_completion_target 0.9
- max_wal_senders 16
- wal_keep_segments 32
- hot_standby on
- effective_cache_size 761229kB
- log_destination 'stderr'
- logging_collector on
- log_directory 'log'
- log_filename 'postgresql-%a.log'
- log_truncate_on_rotation on
- log_rotation_age 1d
- log_rotation_size 0
- log_line_prefix '%m [%p] '
- log_timezone 'UTC'
- track_activity_query_size 2048
- datestyle 'iso, mdy'
- timezone 'UTC'
- lc_messages 'en_US.UTF-8'
- lc_monetary 'en_US.UTF-8'
- lc_numeric 'en_US.UTF-8'
- lc_time 'en_US.UTF-8'
- default_text_search_config 'pg_catalog.english'
- shared_preload_libraries 'pg_stat_statements'
- pg_stat_statements.track all
ClusterControl trả về kết quả của TÊN TÙY CHỌN và GIÁ TRỊ tương ứng. Cột NHÓM không áp dụng được trong PostgreSQL, do đó bạn sẽ thấy giá trị '-'.
Để thay đổi tùy chọn cấu hình, hãy sử dụng cờ --change-config và chỉ định tham số và giá trị bằng cách sử dụng --opt-name và --opt-value tương ứng:
$ s9s node \
--change-config \
--nodes=192.168.0.92 \
--opt-name=min_wal_size \
--opt-value='100MB'
192.168.0.92:5432: Changed a read-only parameter. Node restart is required for change to take effect.
Bạn sẽ thấy ClusterControl trả về trạng thái sửa đổi cấu hình và tư vấn quy trình tiếp theo để đảm bảo thay đổi cấu hình có ảnh hưởng. Sau đó, bạn có thể sử dụng lệnh "s9s node --restart" để khởi động lại nút cụ thể.
Lời kết
ClusterControl cung cấp tính linh hoạt cao khi quản lý và giám sát cụm cơ sở dữ liệu PostgreSQL của bạn. Bạn có thể lựa chọn giao diện người dùng web, giao diện này khá đơn giản và dễ hiểu cùng với giao diện dòng lệnh, cho phép bạn đạt được tự động hóa toàn bộ cơ sở dữ liệu thông qua tập lệnh. Chúc bạn quản lý vui vẻ!