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

Alternatif pghoard - Manajemen Pencadangan PostgreSQL dengan ClusterControl

Mengelola cadangan bisa menjadi tugas yang rumit dan berisiko untuk dilakukan secara manual. Anda harus tahu bahwa cadangan berfungsi sesuai dengan kebijakan pencadangan Anda karena Anda tidak ingin berada dalam situasi di mana Anda memerlukan cadangan dan tidak berfungsi atau tidak ada. Itu pasti akan menjadi masalah besar. Jadi, yang terbaik di sini adalah menggunakan aplikasi manajemen cadangan yang telah teruji, untuk menghindari masalah apa pun jika terjadi kegagalan.

PGHoard adalah daemon pencadangan dan pemulihan PostgreSQL yang menyimpan data cadangan di penyimpanan objek cloud. Ini mendukung PostgreSQL 9.3 atau yang lebih baru, hingga PostgreSQL 11, versi terbaru yang didukung saat ini. Versi PGHoard saat ini adalah 2.1.0, dirilis pada Mei 2019 (1 tahun lalu).

ClusterControl adalah perangkat lunak manajemen dan otomatisasi tanpa agen untuk cluster database. Ini membantu menyebarkan, memantau, mengelola, dan menskalakan server/cluster database Anda langsung dari ClusterControl UI atau menggunakan ClusterControl CLI. Ini mencakup fitur manajemen cadangan dan mendukung versi PostgreSQL 9.6, 10, 11, dan 12. Versi ClusterControl saat ini adalah 1.7.6, dirilis bulan lalu, pada April 2020.

Di blog ini, kami akan membandingkan PGHoard dengan fitur Manajemen Cadangan ClusterControl dan kami akan melihat cara menginstal dan menggunakan kedua sistem. Untuk ini, kami akan menggunakan server Ubuntu 18.04 dan PostgreSQL11 (karena ini adalah versi terbaru yang didukung untuk menggunakan PGHoard). Kami akan menginstal PGHoard di server database yang sama, dan mengimpornya ke ClusterControl.

Perbandingan Fitur Manajemen Pencadangan

PGHoard

Beberapa fitur PGHoard yang paling penting adalah:

  • Pencadangan basis berkala otomatis
  • Cadangan log transaksi otomatis
  • Dukungan Hot Backup Mandiri
  • Dukungan penyimpanan objek cloud (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
  • Pemulihan cadangan langsung dari penyimpanan objek, dikompresi dan dienkripsi
  • Pemulihan titik-dalam-waktu (PITR)
  • Menginisialisasi standby baru dari backup penyimpanan objek, secara otomatis dikonfigurasi sebagai replikasi hot-standby
  • Kompresi dan enkripsi paralel

Salah satu cara untuk menggunakannya adalah dengan memiliki mesin backup terpisah, sehingga PGHoard dapat terhubung dengan pg_receivexlog untuk menerima file WAL dari database. Mode lainnya adalah menggunakan pghoard_postgres_command sebagai arsip_perintah PostgreSQL. Dalam kedua kasus, PGHoard membuat pencadangan basis berkala menggunakan pg_basebackup.

ClusterControl

Mari kita lihat juga beberapa fitur terpenting dari sistem ini:

  • UI yang mudah digunakan
  • Backup dan Restore (dalam node yang sama atau terpisah)
  • Jadwalkan Pencadangan
  • Buat cluster dari Cadangan
  • Verifikasi Pencadangan Otomatis
  • Kompresi
  • Enkripsi
  • Upload Cloud Otomatis
  • Pemulihan titik-dalam-waktu (PITR)
  • Metode pencadangan yang berbeda (Logical, Physical, Full, Incremental, dll)
  • Laporan Operasional Cadangan

Karena ini bukan hanya sistem Manajemen Pencadangan, kami juga akan menyebutkan berbagai fitur penting tidak hanya yang terkait Pencadangan:

  • Menyebarkan/Mengimpor database:Mandiri, Cluster/Replikasi, Load Balancer
  • Penskalaan:Tambah/Hapus Node, Baca Replika, Kloning Cluster, Replikasi Cluster-ke-Cluster
  • Pemantauan:Dasbor Khusus, Deteksi Kesalahan, Monitor Kueri, Penasihat Kinerja, Alarm dan Pemberitahuan, Kembangkan Penasihat Khusus
  • Pemulihan Otomatis:Pemulihan Node dan Cluster, Failover, Lingkungan Ketersediaan Tinggi
  • Manajemen:Manajemen Konfigurasi, Peningkatan Patch Database, Manajemen Pengguna Database, Integrasi Cloud, Laporan Operasi, Manajemen ProxySQL
  • Keamanan:Manajemen Kunci, Kontrol Akses Berbasis Peran, Otentikasi menggunakan LDAP/Active Directory, Enkripsi SSL

Topologi yang disarankan adalah memiliki node terpisah untuk menjalankan ClusterControl, untuk memastikan bahwa, jika terjadi kegagalan, Anda dapat memanfaatkan fitur pemulihan otomatis dan failover ClusterControl (di antara fitur berguna lainnya) .

Persyaratan Sistem

PGHoard

Menurut dokumentasi, PGHoard dapat mencadangkan dan memulihkan PostgreSQL versi 9.3 ke atas. Daemon diimplementasikan dengan Python dan bekerja dengan CPython versi 3.5 atau yang lebih baru. Modul Python berikut mungkin diperlukan tergantung pada persyaratan:

  • psycopg2 untuk mencari metadata log transaksi
  • permintaan untuk arsitektur client-server internal
  • azure untuk penyimpanan objek Microsoft Azure
  • botocore untuk penyimpanan objek AWS S3 (atau Ceph-S3)
  • google-api-client untuk penyimpanan objek Google Cloud
  • kriptografi untuk enkripsi dan dekripsi cadangan (diperlukan versi 0.8 atau lebih baru)
  • snappy untuk kompresi dan dekompresi Snappy
  • zstandard untuk kompresi dan dekompresi Zstandard (zstd)
  • systemd untuk integrasi systemd
  • swiftclient untuk penyimpanan objek OpenStack Swift
  • paramiko untuk penyimpanan objek sftp

Tidak disebutkan Sistem Operasi yang didukung, tetapi dikatakan bahwa itu diuji pada sistem Linux x86-64 modern, tetapi harus bekerja pada platform lain yang menyediakan modul yang diperlukan.

ClusterControl

Perangkat lunak berikut diperlukan oleh server ClusterControl:

  • server/klien MySQL
  • Server web Apache (atau nginx)
  • mod_rewrite
  • mod_ssl
  • izinkan penggantian .htaccess
  • PHP (5.4 atau lebih baru)
  • RHEL:php, php-mysql, php-gd, php-ldap, php-curl
  • Debian:php5-common, php5-mysql, php5-gd, php5-ldap, php5-curl, php5-json
  • Linux Kernel Security (SElinux atau AppArmor) - harus dinonaktifkan atau disetel ke mode permisif
  • server/klien OpenSSH
  • BASH (disarankan:versi 4 atau lebih baru)
  • Server NTP - Semua waktu server harus disinkronkan dalam satu zona waktu
  • socat atau netcat - untuk streaming backup

Dan mendukung sistem operasi yang berbeda:

  • Red Hat Enterprise Linux 6.x/7.x/8.x
  • CentOS 6.x/7.x/8.x
  • Ubuntu 12.04/14.04/16.04/18.04 LTS
  • Debian 7.x/8.x/9.x/10.x

Jika ClusterControl diinstal melalui skrip instalasi (install-cc) atau manajer paket (yum/apt), semua dependensi akan otomatis terpenuhi.

Untuk PostgreSQL, mendukung versi 9.6/10.x/11.x/12.x. Anda dapat menemukan daftar lengkap database yang didukung dalam dokumentasi.

Itu hanya memerlukan akses SSH Tanpa Kata Sandi ke node basis data (menggunakan kunci pribadi dan publik) dan pengguna OS yang memiliki hak istimewa (bisa berupa pengguna root atau sudo).

Proses Instalasi

Proses Instalasi PGHoard

Kami akan menganggap Anda telah mengaktifkan dan menjalankan database PostgreSQL, jadi mari instal paket yang tersisa. PGHoard adalah paket Python, jadi setelah Anda menginstal paket yang diperlukan, Anda dapat menginstalnya menggunakan perintah pip:

$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy

$ pip3 install pghoard

Sebagai bagian dari proses penginstalan ini, Anda perlu menyiapkan instance PostgreSQL untuk bekerja dengan alat ini. Untuk ini, Anda harus mengedit postgresql.conf untuk mengizinkan arsip WAL dan meningkatkan max_wal_senders:

wal_level = logical

max_wal_senders = 4

archive_mode = on

archive_command = pghoard_postgres_command --mode archive --site default --xlog %f

Perubahan ini akan memerlukan restart database:

$ service postgresql restart

Sekarang, mari kita buat pengguna database untuk PGHoard:

$ psql

CREATE USER pghoard PASSWORD 'Password' REPLICATION;

Dan tambahkan baris berikut di file pg_hba.conf:

host    replication  pghoard  127.0.0.1/32/32  md5

Muat ulang layanan basis data:

$ service postgresql reload

Untuk membuatnya berfungsi, Anda harus membuat file konfigurasi JSON untuk PGHoard. Kita akan melihat ini di bagian “Penggunaan” berikutnya.

Proses Instalasi ClusterControl

Ada beberapa metode penginstalan yang berbeda seperti yang disebutkan dalam dokumentasi. Dalam kasus penginstalan manual, paket yang diperlukan ditentukan dalam dokumentasi yang sama, dan ada panduan langkah demi langkah untuk semua proses.

Mari kita lihat contoh menggunakan skrip instalasi otomatis.

$ wget http://www.severalnines.com/downloads/cmon/install-cc

$ chmod +x install-cc

$ sudo ./install-cc   # omit sudo if you run as root

Skrip penginstalan akan mencoba mengotomatiskan tugas-tugas berikut:

  • Instal dan konfigurasikan server MySQL lokal (digunakan oleh ClusterControl untuk menyimpan data pemantauan)
  • Instal dan konfigurasikan paket pengontrol ClusterControl melalui manajer paket
  • Instal dependensi ClusterControl melalui manajer paket
  • Konfigurasi Apache dan SSL
  • Konfigurasikan URL dan token ClusterControl API
  • Konfigurasi ClusterControl Controller dengan opsi konfigurasi minimal
  • Aktifkan layanan CMON saat boot dan mulai

Menjalankan skrip yang disebutkan, Anda akan menerima pertanyaan tentang pengiriman data diagnostik:

$ sudo ./install-cc

!!

Only RHEL/Centos 6.x|7.x|8.x, Debian 7.x|8.x|9.x|10.x, Ubuntu 14.04.x|16.04.x|18.04.x LTS versions are supported

Minimum system requirements: 2GB+ RAM, 2+ CPU cores

Server Memory: 1024M total, 922M free

MySQL innodb_buffer_pool_size set to 512M

Severalnines would like your help improving our installation process.

Information such as OS, memory and install success helps us improve how we onboard our users.

None of the collected information identifies you personally.

!!

=> Would you like to help us by sending diagnostics data for the installation? (Y/n):

Kemudian, itu akan mulai menginstal paket yang diperlukan. Pertanyaan selanjutnya adalah tentang hostname yang akan digunakan:

=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):

Saat database lokal diinstal, penginstal akan mengamankannya dengan membuat kata sandi root yang harus Anda masukkan:

=> Starting database. This may take a couple of minutes. Do NOT press any key.

Redirecting to /bin/systemctl start mariadb.service

=> Securing the MySQL Server ...

=> !! In order to complete the installation you need to set a MySQL root password !!

=> Supported special password characters: [email protected]#$%^&*()_+{}<>?

=> Press any key to proceed ...

Dan kata sandi pengguna CMON, yang akan digunakan oleh ClusterControl:

=> Set a password for ClusterControl's MySQL user (cmon) [cmon]

=> Supported special characters: [email protected]#$%^&*()_+{}<>?

=> Enter a CMON user password:

Itu dia. Dengan cara ini, Anda akan memiliki semuanya tanpa menginstal atau mengonfigurasi apa pun secara manual.

=> ClusterControl installation completed!

Open your web browser to http://192.168.100.116/clustercontrol and enter an email address and new password for the default Admin User.

Determining network interfaces. This may take a couple of minutes. Do NOT press any key.

Public/external IP => http://10.10.10.10/clustercontrol

Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.

Saat pertama kali mengakses UI, Anda harus mendaftar untuk periode uji coba gratis 30 hari.

Setelah uji coba gratis 30 hari Anda berakhir, penginstalan Anda akan otomatis dikonversi ke edisi komunitas kecuali Anda memiliki lisensi komersial.

Penggunaan Manajemen Cadangan

Penggunaan PGHoard

Setelah alat ini terinstal, Anda perlu membuat file JSON (pghoard.json) dengan konfigurasi PGHoard. Ini contohnya:

{

"backup_location": "/var/lib/pghoard",

"backup_sites": {

"default": {

"nodes": [

{

"host": "127.0.0.1",

"password": "Password",

"port": 5432,

"user": "pghoard"

}

],

"object_storage": {

"storage_type": "local",

"directory": "./backups"

},

"pg_data_directory": "/var/lib/postgresql/11/main/"

}

}

}

Dalam contoh ini, kami akan mengambil cadangan dan menyimpannya secara lokal, tetapi Anda juga dapat mengonfigurasi akun cloud dan menyimpannya di sana:

"object_storage": {

"aws_access_key_id": "AKIAQTUN************",

"aws_secret_access_key": "La8YZBvN********************************",

"bucket_name": "pghoard",

"region": "us-east-1",

"storage_type": "s3"

},

Anda dapat menemukan detail lebih lanjut tentang konfigurasi di dokumentasi.

Sekarang, jalankan backup menggunakan file JSON ini:

$ pghoard --short-log --config pghoard.json

INFO pghoard initialized, own_hostname: 'pg1', cwd: '/root'

INFO Creating a new basebackup for 'default' because there are currently none

INFO Started: ['/usr/lib/postgresql/11/bin/pg_receivewal', '--status-interval', '1', '--verbose', '--directory', '/var/lib/pghoard/default/xlog_incoming', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19057

INFO Started: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19059, basebackup_location: '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar'

INFO Compressed 83 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003.history' to 76 bytes (92%), took: 0.001s

INFO 'UPLOAD' transfer of key: 'default/timeline/00000003.history', size: 76, origin: 'pg1' took 0.001s

INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/000000030000000000000009' to 799625 bytes (5%), took: 0.175s

INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.002s

127.0.0.1 - - [21/May/2020 13:13:31] "PUT /default/archive/000000030000000000000009 HTTP/1.1" 201 -

INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/000000030000000000000009' to 799625 bytes (5%), took: 0.190s

INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.028s

INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003000000000000000A' to 789927 bytes (5%), took: 0.109s

INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s

INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/00000003000000000000000A' to 789927 bytes (5%), took: 0.114s

INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s

127.0.0.1 - - [21/May/2020 13:13:32] "PUT /default/archive/00000003000000000000000A HTTP/1.1" 201 -

INFO Ran: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], took: 1.940s to run, returncode: 0

INFO Compressed 24337408 byte open file '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar' to 4892408 bytes (20%), took: 0.117s

INFO 'UPLOAD' transfer of key: 'default/basebackup/2020-05-21_13-13_0', size: 4892408, origin: 'pg1' took 0.008s

Dalam direktori “backup_location” (dalam hal ini /var/lib/pghoard), Anda akan menemukan file pghoard_state.json dengan status saat ini:

$ ls -l /var/lib/pghoard

total 48

drwxr-xr-x 6 root root  4096 May 21 13:13 default

-rw------- 1 root root 42385 May 21 15:25 pghoard_state.json

Dan direktori situs (dalam hal ini disebut "default/") dengan cadangan:

$ ls -l /var/lib/pghoard/default/

total 16

drwxr-xr-x 2 root root 4096 May 21 13:13 basebackup

drwxr-xr-x 3 root root 4096 May 21 13:13 basebackup_incoming

drwxr-xr-x 2 root root 4096 May 21 13:13 xlog

drwxr-xr-x 2 root root 4096 May 21 13:13 xlog_incoming

Anda dapat memeriksa daftar cadangan menggunakan perintah follogin:

$ pghoard_restore list-basebackups --config pghoard.json

Available 'default' basebackups:

Basebackup                                Backup size    Orig size  Start time

----------------------------------------  -----------  -----------  --------------------

default/basebackup/2020-05-21_13-13_0            4 MB        23 MB  2020-05-21T13:13:31Z

Penggunaan Kontrol Cluster

Untuk ini, kami akan menganggap Anda memiliki cluster database PostgreSQL yang diimpor di ClusterControl atau Anda menerapkannya menggunakan sistem ini.

Di ClusterControl, pilih cluster Anda dan buka bagian "Cadangan", lalu pilih "Buat Cadangan".

Untuk contoh ini, kami akan menggunakan opsi “Jadwalkan Pencadangan”. Saat menjadwalkan pencadangan, selain memilih opsi umum seperti metode atau penyimpanan, Anda juga perlu menentukan jadwal/frekuensi.

Anda harus memilih satu metode, server dari mana cadangan akan diambil , dan di mana Anda ingin menyimpannya. Anda juga dapat mengunggah cadangan Anda ke cloud (AWS, Google, atau Azure) dengan mengaktifkan tombol yang sesuai.

Kemudian Anda perlu menentukan penggunaan kompresi, enkripsi, dan retensi dari cadangan Anda. Pada langkah ini, Anda juga dapat mengaktifkan fitur “Verifikasi Cadangan” yang memungkinkan Anda mengonfirmasi bahwa cadangan dapat digunakan dengan memulihkannya di node yang berbeda.

Jika Anda mengaktifkan "Unggah cadangan ke opsi awan", Anda akan lihat bagian untuk menentukan penyedia cloud dan kredensial. Jika Anda belum mengintegrasikan akun cloud Anda dengan ClusterControl, Anda harus membuka ClusterControl -> Integrations -> Cloud Providers untuk menambahkannya.

Pada bagian pencadangan, Anda dapat melihat kemajuan pencadangan, dan informasi seperti metode, ukuran, lokasi, dan lainnya.

Baris Perintah Kontrol Cluster (s9s)

Untuk skrip dan tugas otomatisasi, atau bahkan jika Anda lebih suka baris perintah, ClusterControl memiliki alat s9s. Ini adalah alat baris perintah untuk mengelola cluster database Anda. Mari kita lihat contoh cara membuat dan membuat daftar cadangan menggunakan alat ini:

$ s9s backup --list --cluster-id=40 --long --human-readable
$ s9s backup --create --backup-method=pg_basebackup --cluster-id=40 --nodes=192.168.100.125 --backup-directory=/tmp --wait

Anda dapat menemukan lebih banyak contoh dan informasi di bagian dokumentasi ClusterControl CLI.

Kesimpulan

Sebagai kesimpulan dari membandingkan sistem manajemen cadangan yang disebutkan ini, kita dapat mengatakan bahwa PGHoard adalah solusi gratis namun kompleks untuk tugas ini. Anda perlu waktu untuk memahami cara kerjanya dan cara mengonfigurasinya, karena dokumentasi resminya agak buruk. Juga, itu terlihat agak ketinggalan zaman, karena rilis terbaru adalah 1 tahun yang lalu. Selain itu, ClusterControl adalah sistem manajemen all-in-one dengan banyak fitur tidak hanya manajemen cadangan, dengan UI yang ramah pengguna dan mudah digunakan. Ini memiliki komunitas (dengan fitur terbatas yang tersedia) dan versi berbayar dengan masa percobaan gratis 30 hari. Dokumentasinya jelas dan lengkap, dengan contoh dan informasi mendetail.

Kami berharap blog ini membantu Anda membuat keputusan terbaik untuk menjaga keamanan data Anda.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PEMBARUAN Atom .. PILIH di Postgres

  2. Postgres:Berbeda tetapi hanya untuk satu kolom

  3. postgres pengguna meluncurkan proses yang menggunakan semua CPU 100% penggunaan

  4. Bagaimana cara saya mendapatkan dukungan LISTEN/NOTIFY asynchronous/even-driven di Java menggunakan database Postgres?

  5. Cara keluar dari string saat mencocokkan pola di PostgreSQL