tutorial postgresql 9.6 pada centos 7 part 3 (incremental backup with barman)
halo sobat sekolahlinux kali ini pada part3 saya akan membahas tentang bagaimana cara backup incrementar db postgresql, pada tutorial ini saya menggunakan barman dan juga centos 7 dan postgresql 9.6 untuk implementasinya, cara ini sudah saya terapkan pada client saya dan sejauh ini berjalan dengan baik, apa saja yang di perlukan untuk mengikuti tutorial kali ini bisa kalian lihat dibawah
- node1 (master): 192.168.10.10
- node2 (barman): 192.168.10.20
- node3 (restoredb): 192.168.10.30
sebelumnya saya ingin menjelaskan kepada kalian kalau barman tidak bisa membackup db yang dalam keadaan standby/slave jadi kita harus membackup db atau node master, dan untuk restorenya pun kalian harus memiliki node terpisah, dan pada tutorial kali ini saya beranggapan kalau node1 kalian sudah terinstall postgresql dan sudah berjalan dengan baik, oke langsung saja tutorial ini kita mulai
install repo epel-release pada semua node
yum -y install epel-release
selanjutnya install repo postgresql 9.6 pada node2 dan node3
rpm -ivh https://yum.postgresql.org/9.6/redhat/rhel-7Server-x86_64/pgdg-centos96-9.6-3.noarch.rpm
selanjutnya install postgresql pada node3 yang nantinya akan kita gunakan sebagai wadah untuk restore hasil backup
yum install postgresql96-server postgresql96 -y
lalu jalankan perintah dibawah untuk generate db postgresql diawal
/usr/pgsql-9.6/bin/postgresql96-setup initdb
selanjutnya install barman pada node2
yum -y install barman
selanjutnya install rsync pada semua node (node1, node2, node3)
yum install rsync -y
lalu selanjutnya implementasikan ssh-key auth untuk akses ssh pada node1, node2, node3 kurang lebih nantinya akan seperti dibawah.
- node1 user: postgres= ssh barman@node2_barman_ip
- node2 user: barman= ssh postgres@node1_master_ip
- node2 user: barman= ssh postgres@node3_restoredb_ip
- node3 user: postgres= ssh barman@node3_barman_ip
untuk turorial implementasi ssh-key bisa mengunjungi link dibawah
BACKUP
selanjutnya pada node1 masuk sebagai user postgres dan buka file pg_hba.conf
vim /var/lib/pgsql/9.6/data/pg_hba.conf
pada node1 masukkan ip address node2 pada pg_hba.conf, kira2 menjadi seperti dibawah ini
host all all 192.168.10.20/32 trust
selanjutnya pada node2 barman buka file barman.conf
vim /etc/barman.conf
tambahkan baris dibawah ini atau pastikan paramaternya dan valuenya sudah aktif dan benar seperti dibawah
[barman] barman_user = barman configuration_files_directory = /etc/barman.d barman_home = /var/lib/barman log_file = /var/log/barman/barman.log log_level = INFO compression = gzip [sekolahlinux] description = "barman on sekolahlinux" ssh_command = ssh postgres@192.168.10.10 conninfo = host=192.168.10.10 user=barman dbname=postgres backup_method = rsync reuse_backup = link archiver = on
selanjutnya pada node2 masuk kedalam mode user barman, dan jalankan perintah dibawah
barman show-server sekolahlinux | grep incoming_wals_directory
maka hasilnya akan seperti dibawah
incoming_wals_directory: /var/lib/barman/sekolahlinux/incoming
lalu selanjutnya masih didalam mode user barman pada node2 buat folder berdasarkan hasil diatas
mkdir -p /var/lib/barman/sekolahlinux/incoming
selanjutnya pada node1 masuk kedalam mode user postgres dan buka file postgresql.conf
vim /var/lib/pgsql/9.6/data/postgresql.conf
lalu pastikan parameter didalam ini sudah sama seperti dibawah value nya (untuk archive command jika didalamnya sudah ada perintah lainnya kalian bisa menambahkan “&&” lalu command selanjutnya
archive_mode = on archive_command = 'rsync -a %p barman@192.168.10.20:/var/lib/barman/sekolahlinux/incoming/%f'
masih di node1, masuk kedalam mode user postgres dan buat user barman, dengan command seperti dibawah
createuser -s -W barman
jika sudah save dan restart service postgresql pada node1
service postgresql-9.6 restart
jalankan perintah dibawah dalam mode user barman pada node2
barman switch-xlog --force --archive sekolahlinux
nanti hasilnya akan seperti dibawah
The xlog file 00000001000000000000003D has been closed on server 'sekolahlinux' Waiting for the xlog file 00000001000000000000003D from server 'sekolahlinux' (max: 30 seconds) Processing xlog segments from file archival for sekolahlinux 00000001000000000000003D
untuk check selanjutnya coba jalankan perintah dibawah ini pada node2 dalam mode user barman
barman check sekolahlinux
maka hasilnya akan seperti dibawah
Server sekolahlinux: PostgreSQL: OK superuser: OK wal_level: OK directories: OK retention policy settings: OK backup maximum age: OK (no last_backup_maximum_age provided) compression settings: OK failed backups: OK (there are 0 failed backups) minimum redundancy requirements: OK (have 0 backups, expected at least 0) ssh: OK (PostgreSQL server) not in recovery: OK archive_mode: OK archive_command: OK continuous archiving: OK archiver errors: OK
setelah itu jalankan perintah dibawah pada node2 untuk memulai backup db nya
barman backup sekolahlinux
maka hasilnya akan seperti dibawah
barman backup sekolahlinux Starting backup using rsync-exclusive method for server sekolahlinux in /var/lib/barman/sekolahlinux/base/20170607T022911 Backup start at xlog location: 0/58000028 (000000010000000000000058, 00000028) This is the first backup for server sekolahlinux WAL segments preceding the current backup have been found: 00000001000000000000003C from server sekolahlinux has been removed 00000001000000000000003D from server sekolahlinux has been removed 00000001000000000000003E from server sekolahlinux has been removed 00000001000000000000003F from server sekolahlinux has been removed 000000010000000000000040 from server sekolahlinux has been removed 000000010000000000000041 from server sekolahlinux has been removed 000000010000000000000042 from server sekolahlinux has been removed 000000010000000000000043 from server sekolahlinux has been removed 000000010000000000000044 from server sekolahlinux has been removed 000000010000000000000045 from server sekolahlinux has been removed 000000010000000000000046 from server sekolahlinux has been removed 000000010000000000000047 from server sekolahlinux has been removed 000000010000000000000048 from server sekolahlinux has been removed 000000010000000000000049 from server sekolahlinux has been removed 00000001000000000000004A from server sekolahlinux has been removed 00000001000000000000004B from server sekolahlinux has been removed 00000001000000000000004C from server sekolahlinux has been removed 00000001000000000000004D from server sekolahlinux has been removed 00000001000000000000004E from server sekolahlinux has been removed 00000001000000000000004F from server sekolahlinux has been removed 000000010000000000000050 from server sekolahlinux has been removed 000000010000000000000051 from server sekolahlinux has been removed 000000010000000000000052 from server sekolahlinux has been removed 000000010000000000000053 from server sekolahlinux has been removed 000000010000000000000054 from server sekolahlinux has been removed 000000010000000000000055 from server sekolahlinux has been removed 000000010000000000000056 from server sekolahlinux has been removed Copying files. Copy done. This is the first backup for server sekolahlinux Asking PostgreSQL server to finalize the backup. Backup size: 36.2 MiB. Actual size on disk: 36.2 MiB (-0.00% deduplication ratio). Backup end at xlog location: 0/58000130 (000000010000000000000058, 00000130) Backup completed Processing xlog segments from file archival for sekolahlinux 000000010000000000000057 000000010000000000000058 000000010000000000000058.00000028.backup
untuk melihat list hasil backup incremental kalian bisa menjalankan perintah dibawah pada node2
barman list-backup sekolahlinux
maka hasilnya akan seperti dibawah
sekolahlinux 20170607T022911 - Wed Jun 7 02:29:15 2017 - Size: 36.2 MiB - WAL Size: 318.3 KiB
berikut ini penjelasan dari hasil diatas
- sekolahlinux : nama dari db postgres server yang didaftarkan di barman / server name
- 20170607T022911 : backup id
- Wed Jun 7 02:29:15 2017 : waktu dan tanggal backup dilaksanakan
- Size: 36.2 MiB : base backup size
- WAL Size: 318.3 KiB : size wall archive backup
untuk melihat detail hasil backup kalian bisa menggunakan command dibawah ini
barman show-backup sekolahlinux 20170607T022911
maka hasilnya akan seperti dibawah
Backup 20170607T022911: Server Name : sekolahlinux Status : DONE PostgreSQL Version : 90603 PGDATA directory : /var/lib/pgsql/9.6/data Base backup information: Disk usage : 36.2 MiB (36.2 MiB with WALs) Incremental size : 36.2 MiB (-0.00%) Timeline : 1 Begin WAL : 000000010000000000000058 End WAL : 000000010000000000000058 WAL number : 1 WAL compression ratio: 99.84% Begin time : 2017-06-07 02:29:11.626667-04:00 End time : 2017-06-07 02:29:15.500310-04:00 Begin Offset : 40 End Offset : 304 Begin XLOG : 0/58000028 End XLOG : 0/58000130 WAL information: No of files : 51 Disk usage : 1.3 MiB WAL rate : 36.65/hour Compression ratio : 99.84% Last available : 00000001000000000000008B Catalog information: Retention Policy : not enforced Previous Backup : - (this is the oldest base backup) Next Backup : - (this is the latest base backup)
untuk melihat db postgresql server apa saja yg terdaftar di barman bisa dengan perintah dibawah
barman list-server
maka outputnya akan seperti dibawah
sekolahlinux - barman on sekolahlinux
selanjutnya jika kalian ingin melakukan backup rutin kalian bisa menggunakan cron didalam mode user barman, contohnya seperti dibawah
crontab -e
contoh schedule seperti dibawah
1 10 * * * /bin/barman backup sekolahlinux * * * * * /bin/barman cron
RESTORE
sekarang kita akan melakukan proses restore, pertama coba jalankan perintah dibawah pada node2 pada mode user barman untuk melihat detail backup terakhir
barman show-backup sekolahlinux latest
hasilnya akan seperti dibawah
Backup 20170607T022911: Server Name : sekolahlinux Status : DONE PostgreSQL Version : 90603 PGDATA directory : /var/lib/pgsql/9.6/data Base backup information: Disk usage : 36.2 MiB (36.2 MiB with WALs) Incremental size : 36.2 MiB (-0.00%) Timeline : 1 Begin WAL : 000000010000000000000058 End WAL : 000000010000000000000058 WAL number : 1 WAL compression ratio: 99.84% Begin time : 2017-06-07 02:29:11.626667-04:00 End time : 2017-06-07 02:29:15.500310-04:00 Begin Offset : 40 End Offset : 304 Begin XLOG : 0/58000028 End XLOG : 0/58000130 WAL information: No of files : 90 Disk usage : 2.3 MiB WAL rate : 36.35/hour Compression ratio : 99.84% Last available : 0000000100000000000000B2 Catalog information: Retention Policy : not enforced Previous Backup : - (this is the oldest base backup) Next Backup : - (this is the latest base backup)
pada hasil diatas ada beberapa yang perlu kita cermati dan nantinya berguna untuk kita gunakan dalam proses restore diantaranya yaitu
- Begin time : 2017-06-07 02:29:11.626667-04:00
- Backup id : 20170607T022911
- Server Name : sekolahlinux
sebelum menjalankan proses restore pastikan service postgresql pada node3 dalam keadaan stop atau mati, jika belum makan jalankan perintah dibawah
service postgresql-9.6 stop
selanjutnya pada node2 pada mode user barman, kita akan restore hasil backup incremental ke node3 dengan command dibawah ini
- barman recover –target-time “Begin time” –remote-ssh-command “ssh postgres@ip_address_node3” server_name backup_id /var/lib/pgsql/9.6/data
contohnya seperti dibawah
barman recover --target-time "2017-06-07 02:29:11.626667-04:00" --remote-ssh-command "ssh postgres@192.168.10.30" sekolahlinux 20170607T022911 /var/lib/pgsql/9.6/data
maka hasilnya akan seperti dibawah
The authenticity of host '192.168.10.30 (192.168.10.30)' can't be established. ECDSA key fingerprint is 5e:ba:a4:3f:4b:1c:c7:ea:11:45:14:c8:e7:80:51:61. Are you sure you want to continue connecting (yes/no)? yes Starting remote restore for server sekolahlinux using backup 20170607T022911 Destination directory: /var/lib/pgsql/9.6/data Doing PITR. Recovery target time: '2017-06-07 02:29:11.626667-04:00' Copying the base backup. Copying required WAL segments. Generating recovery.conf Identify dangerous settings in destination directory. IMPORTANT These settings have been modified to prevent data losses postgresql.conf line 215: archive_command = false Your PostgreSQL server has been successfully prepared for recovery!
sekarang pada node3 jalankan kembali service postgresql yang tadi kita stop atau berhentikan
service postgresql-9.6 start
jika sudah maka hasil backup dari node1 akan ada di node3, untuk bisa dikembalikan ke node1 maka kalian perlu dump db manual dari node3, lalu hasil dump di transfer dengan scp ke node1 untuk kemudian direstore manual
sekian tutorial postgres kali ini semoga bermanfaat 🙂
untuk detail dan jika kalian ingin mengoprek lebih jauh soal barman ini kalian bisa mengunjudi docs barmannya dibawah
Tidak ada komentar:
Posting Komentar