tutorial postgresql 9.6 pada centos 7 part 3 (incremental backup with barman)

6
1607

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

6 COMMENTS

  1. pak mau nanya nih, ini maksudnya apa ya?
    #####masih di node1, masuk kedalam mode user postgres dan buat user barman, dengan command seperti dibawah
    createuser -s -W barman ########

    saya coba buat di dalam su – postgres gk bisa pak, muncul notifikasi
    createuser: could not connect to database postgres

  2. Ini Error kenapa ya gan?
    Server server :
    WAL archive : FAILED (please make sure WAL shipping is setup)
    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