PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara Mengelola Database PostgreSQL Anda Dari ClusterControl CLI

Tahukah Anda bahwa selain UI web ClusterControl, Anda juga dapat menggunakan antarmuka baris perintah untuk mengelola instance PostgreSQL Anda?

ClusterControl mendukung replikasi streaming PostgreSQL (replikasi asinkron dan sinkron) serta instance PostgreSQL mandiri. Kami telah berupaya sebaik mungkin untuk membuat antarmuka baris perintah menjadi dekat dengan UI dalam hal fungsionalitas yang tersedia.

Mengapa Anda ingin menggunakan CLI?

Ini memungkinkan Anda untuk menerapkan seluruh pengaturan replikasi dalam satu perintah, atau melakukan failover, atau menambahkan node baru ke pengaturan. Ini terintegrasi dengan sangat baik dengan kode otomatisasi infrastruktur Anda yang ada yang ditulis dalam Ansible, Chef, atau Puppet.

Postingan blog ini memberikan panduan tentang cara mengelola cluster replikasi streaming PostgreSQL menggunakan ClusterControl CLI, atau s9s.

Perhatikan bahwa sebagian besar fungsi yang ditampilkan dalam posting blog ini mengharuskan Anda untuk menginstal dan menjalankan ClusterControl dengan langganan yang valid, baik lisensi komersial atau lisensi percobaan gratis (berlaku hingga 30 hari setelah instalasi ClusterControl).

Penerapan dan Impor Cluster

Menerapkan Cluster baru

Sebelum men-deploy cluster baru, atau mengimpor cluster PostgreSQL yang ada ke ClusterControl, pastikan SSH tanpa kata sandi dari node ClusterControl ke semua node database telah dikonfigurasi sebelumnya. Jika kita ingin menerapkan replikasi streaming PostgreSQL tiga simpul baru, jalankan perintah berikut pada simpul 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

Pada node ClusterControl, verifikasi apakah Anda dapat menjalankan perintah berikut tanpa kata sandi:

$ ssh 192.168.0.91 "ls /root"

Jika Anda dapat melihat konten direktori, Anda berada dalam kondisi yang baik. Selanjutnya, gunakan ClusterControl CLI dengan --create flag untuk menerapkan cluster:

$ 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

Kami menentukan node pertama, 192.168.0.91 sebagai master dan sisanya adalah slave. Karena kami telah mengonfigurasi SSH tanpa kata sandi melalui pengguna root, kami menetapkan pengguna OS sebagai "root" bersama dengan file kunci SSH yang sesuai menggunakan flag --os-key-file. Tanda --wait berarti pekerjaan akan menunggu dan melaporkan kemajuan sampai selesai.

Anda juga dapat memantau kemajuan penerapan dari ClusterControl UI di bawah Aktivitas> Pekerjaan> Membuat Cluster PostgreSQL :

Setelah penerapan selesai, kita dapat melihat ringkasan cluster yang sedang berjalan dengan menggunakan flag --stat:

$ s9s cluster --stat

Mengimpor Cluster yang Ada

Jika katakanlah Anda sudah memiliki cluster replikasi streaming PostgreSQL yang disebarkan secara manual, Anda dapat mengimpornya ke ClusterControl menggunakan flag --register seperti yang ditunjukkan pada perintah berikut:

$ 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

ClusterControl kemudian akan terhubung ke node yang ditentukan, menemukan topologi dan mendaftarkan cluster ke ClusterControl. Anda dapat memverifikasi dengan perintah 's9s cluster --stat' seperti yang ditunjukkan di atas.

Manajemen Node dan Cluster

Kontrol Layanan

Untuk melakukan restart klaster secara bergulir, tentukan ID klaster dan gunakan tanda --rolling-restart:

$ s9s cluster --rolling-restart --cluster-id=8 --wait
Rolling Restart
- Job 264 RUNNING    [██▊       ]  27% Waiting for 192.168.0.91

Gunakan flag --stop untuk komponen "cluster" untuk menghentikan sebuah cluster. Untuk melihat keluaran tugas alih-alih bilah kemajuan, kita dapat menggunakan --log flag sebagai gantinya:

$ 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.

Ini akan melaporkan pesan pekerjaan yang sama dengan UI web. Mirip dengan yang di atas, untuk memulai sebuah cluster, cukup gunakan flag --start (kami menggunakan flag --wait sebagai gantinya untuk melihat progres alih-alih log pekerjaan):

$ s9s cluster --start --cluster-id=8 --wait
Starting Cluster
\ Job 272 RUNNING    [     █    ] ---% Start Cluster

Untuk me-restart layanan PostgreSQL pada node database, kita menggunakan komponen "node" dan flag --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.

Untuk menghentikan dan memulai node PostgreSQL, cukup terapkan perintah yang sama dengan flag --stop atau --start, seperti yang ditunjukkan di bawah ini:

$ s9s node --stop --cluster-id=8 --nodes=192.168.0.92
$ s9s node --start --cluster-id=8 --nodes=192.168.0.92

Perhatikan bahwa tindakan tersebut tidak akan mem-boot ulang sistem.

Menskalakan Node

Untuk menghapus sebuah node dari sebuah cluster, gunakan flag --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.

Menambahkan node baru bekerja dengan cara yang sama, tetapi Anda harus memastikan node dapat diakses melalui SSH tanpa kata sandi terlebih dahulu. Konfigurasikan terlebih dahulu lalu tambahkan node menggunakan flag --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'.

Dari log pekerjaan, kita dapat melihat bahwa karena cluster sudah menjalankan master (192.168.0.91), node baru akan di-deploy sebagai budak dari master. ClusterControl kemudian akan melakukan semua tindakan yang diperlukan dan menyiapkan node baru sebagai peran yang diberikan.

Beralih ke Master baru

Untuk melakukan peralihan, pilih salah satu budak untuk menjadi master baru dengan flag --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.

Pesan pekerjaan menunjukkan bahwa ClusterControl pertama-tama akan menemukan topologi saat ini dan menghentikan semua node dalam cluster. Kemudian, ia mengonfigurasi master baru dan membuat node lain mereplikasi darinya. Itu juga akan mencoba menjalankan pg_rewind untuk menyinkronkan ulang PGDATA dari master yang diturunkan versinya dengan cadangan dasar yang baru. Di akhir pekerjaan, ClusterControl melaporkan topologi saat ini dan status promosi.

Kami kemudian dapat memverifikasi dengan mencantumkan semua node untuk ID cluster 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.

Status "poM-" pada kolom paling kiri memiliki arti sebagai berikut:

  • p - simpul PostgreSQL
  • o - daring
  • M - tuan

Pengelolaan Basis Data

Untuk membuat daftar semua database yang ditemukan di kluster, gunakan tanda --list-database di kluster komponen:

$ 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

Perhatikan bahwa jika cluster memiliki banyak database, opsi ini mungkin tidak menampilkan beberapa di antaranya. Pengambilan sampel database dalam jumlah besar akan menghasilkan beban tinggi sehingga pengontrol memiliki batas atas yang terpasang di dalamnya.

Jika Anda ingin membuat database baru untuk cluster, cukup lakukan:

$ s9s cluster \
--create-database \
--cluster-id=8 \
--db-name=my_shopping_db

Untuk membuat pengguna database baru, bersama dengan database yang terkait dengannya (menggunakan nama database yang sama), gunakan tanda --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 akan melakukan tindakan yang diperlukan untuk membuat database dan akun pengguna dengan hak istimewa yang tepat dan mengizinkannya di semua node database.

Manajemen Cadangan

ClusterControl mendukung dua metode pencadangan untuk PostgreSQL:

  • pgdump - Alias ​​​​ke pg_dumpall, sebuah utilitas untuk menulis semua database PostgreSQL dari sebuah cluster ke dalam satu file skrip.
  • pg_basebackup - Utilitas untuk membuat cadangan lengkap tingkat sistem file dari database PostgreSQL.

Membuat Cadangan

Untuk membuat cadangan baru menggunakan pg_dumpall, pilih satu node database dan tentukan "pgdump" di flag --backup-method:

$ s9s backup \
--create \
--backup-method=pgdump \
--cluster-id=8 \
--nodes=192.168.0.92 \
--backup-directory=/storage/backups \
    --on-controller

Bendera --on-controller menunjukkan bahwa kita ingin cadangan yang dibuat disimpan di bawah direktori /storage/backups pada node ClusterControl. Hilangkan tanda jika Anda ingin menyimpannya di node database itu sendiri. Perintah yang sama dapat diterapkan untuk membuat cadangan pg_basebackup. Ganti saja "pgdump" dengan "pg_basebackup".

Untuk membuat daftar cadangan, cukup gunakan flag --list dan --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

Menjadwalkan Pencadangan

Menjadwalkan pencadangan mirip dengan perintah yang kami gunakan untuk membuat cadangan, dengan tanda --recurrence tambahan:

$ s9s backup \
--create \
--backup-method=pg_basebackup \
--cluster-id=8 \
--nodes=192.168.0.92 \
--backup-directory=/storage/backups \
--on-controller \
--recurrence='30 0 * * *'

Nilai perulangan harus diapit dengan kutipan dan dalam format crontab.

Memulihkan cadangan

Untuk memulihkan cadangan ke cluster, gunakan tanda --restore dan tunjukkan ID cadangan yang ingin Anda gunakan:

$ 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.

Perhatikan bahwa untuk pencadangan pg_basebackup, operasi pemulihan memerlukan waktu henti basis data. Semua node PostgreSQL akan dihentikan sebelum pemulihan dan pemulihan dilakukan pada master terakhir yang diketahui. Master ini akan dimunculkan terlebih dahulu (diikuti oleh semua budak) setelah restorasi selesai.

Memverifikasi Cadangan

Untuk memulihkan dan memverifikasi cadangan, gunakan tanda --verify dan tentukan server tujuan menggunakan tanda --test-server:

$ s9s backup \
--verify \
--cluster-id=8 \
--backup-id=9 \
--test-server=192.168.0.99 \
--log

Server pengujian tidak boleh menjadi bagian dari cluster dan harus dapat diakses melalui SSH tanpa kata sandi dari node ClusterControl. ClusterControl pertama-tama akan menginstal server target dengan versi PostgreSQL yang sama, mengalirkan dan memulihkan cadangan pada node itu. Verifikasi cadangan mencari kode keluar terakhir setelah pemulihan. Jika cadangan dapat dipulihkan, ClusterControl kemudian akan menghentikan server pengujian dan menghapusnya dari ClusterControl (tetapi ClusterControl tidak akan mematikannya). Anda akan melihat yang berikut ini setelah pekerjaan selesai:

Backup 9 was successfully verified.

Buat Cluster dari Cadangan

ClusterControl memperkenalkan fitur baru di v1.7.1, di mana seseorang dapat membuat cluster baru berdasarkan cadangan yang diambil oleh cluster yang ada. Ini bisa sangat berguna untuk menguji database Anda pada platform atau versi database yang berbeda. Dalam contoh ini, kami ingin menerapkan cluster PostgreSQL 9.6 dua simpul berdasarkan ID cadangan 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

Perhatikan bahwa kata sandi pengguna admin untuk cluster baru harus sama dengan kata sandi admin PostgreSQL seperti yang disertakan dalam cadangan. Pada dasarnya, ClusterControl melakukan tugas penerapan berdasarkan urutan berikut:

  1. Instal perangkat lunak dan dependensi yang diperlukan pada semua node PostgreSQL.
  2. Mulai simpul pertama.
  3. Streaming dan pulihkan cadangan pada node pertama (dengan tanda mulai ulang otomatis).
  4. Konfigurasikan dan tambahkan node lainnya.

Anda kemudian dapat memverifikasi daftar cluster dengan menggunakan perintah berikut:

$ s9s cluster --stat

Manajemen Konfigurasi

Untuk membuat daftar konfigurasi PostgreSQL dari sebuah node, gunakan flag --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 mengembalikan output dari OPTION NAME dan VALUE yang sesuai. Kolom GROUP tidak berlaku di PostgreSQL sehingga Anda akan melihat nilai '-'.

Untuk mengubah opsi konfigurasi, gunakan tanda --change-config dan tentukan parameter dan nilai masing-masing menggunakan --opt-name dan --opt-value:

$ 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.

Anda akan melihat ClusterControl mengembalikan status modifikasi konfigurasi dan menyarankan prosedur tindak lanjut untuk memastikan perubahan konfigurasi berpengaruh. Anda kemudian dapat menggunakan perintah "s9s node --restart" untuk memulai ulang node tertentu.

Pemikiran Akhir

ClusterControl menawarkan fleksibilitas luar biasa dalam hal mengelola dan memantau klaster database PostgreSQL Anda. Anda memiliki pilihan web UI, yang cukup sederhana dan mudah ditambah antarmuka baris perintah, yang memberdayakan Anda untuk mencapai otomatisasi database penuh melalui scripting. Selamat mengelola!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat urutan partisi PostgreSQL?

  2. Persimpangan beberapa array di PostgreSQL

  3. Apakah ada cara untuk mengeksekusi kueri di dalam nilai string (seperti eval) di PostgreSQL?

  4. pgadmin4 :server aplikasi postgresql tidak dapat dihubungi.

  5. Dialek perlu diberikan secara eksplisit pada v4.0.0