Barman安裝及備份PostgreSQL


barman特點

  1. 零數據丟失備份。保證用戶在只有一台備份服務器的情況下達到零數據丟失。

  2. 與備份服務器合作。允許備份服務器在與主服務器的流式復制不可用時,從barman獲取wal文件。

  3. 可靠的監控集成。用於監控和創建有關Barman配置狀態的報告。

  4. 可並行的備份和恢復。以更快的速度執行拷貝,加快了整個備份和恢復過程。

  5. 備份目錄。允許用戶在同一界面中列出、保留、刪除、存檔和恢復多個完整備份。

  6. 支持多個服務器。允許您從同一位置管理多個服務器的備份和恢復。

  7. 存儲備份數據。存儲來自多個PostgreSQL實例的備份數據,支持不同的版本。

  8. 完全熱備份。從其他服務器執行PostgreSQL服務器的完全熱備份,專門為備份和災難恢復而設計。

  9. 增量備份和恢復。針對新的和修改過的數據生成不同的備份,從而加快處理速度。

  10. 保留策略。配置自定義備份保留策略以滿足組織的需要。

  11. 遠程恢復。執行PostgreSQL服務器備份的遠程恢復。

  12. Wal文件壓縮。自定義歸檔和壓縮WAL文件和備份。

  13. 備份信息。生成所有備份的常規和磁盤使用信息。

  14. 地理冗余。給DBA和系統管理員為PostgreSQL數據庫的災難恢復解決方案增加另一層保障。

barman安裝

192.168.2.2 pg (postgresql server服務器)

192.168.2.3 barman (barman備份服務器)

postgresql版本11.2

barman版本2.9.1

yum安裝postgresql

yum install -y https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7.6-x86_64/pgdg-centos11-11-2.noarch.rpm yum install -y postgresql11-server-11.2 postgresql11-contrib-11.2 /usr/pgsql-11/bin/postgresql-11-setup initdb #執行數據庫初始化 

修改postgres.conf配置

listen_addresses = '*' port = 5432 wal_level = replica #11版本后改為replica archive_mode = on archive_command = 'cp %p /var/lib/pgsql/11/data/pg_archive/%f' max_wal_senders = 10 #建議大於等於3 wal_keep_segments = 64 synchronous_standby_names = '*' hot_standby = on log_filename = 'postgresql-%Y%m%d_%H%M.log' 

修改pg_hba.conf配置

local   all             all                                       trust
host    all             all               0.0.0.0/0               md5
host    all             all               ::1/128                 trust
host    replication     barman            0.0.0.0/0               md5
host    replication     streaming_barman  0.0.0.0/0               md5

創建pg_archive,並設置用戶組

mkdir /var/lib/pgsql/11/data/pg_archive chown postgres:postgres /var/lib/pgsql/11/data/pg_archive -R 

啟動postgresql

systemctl enable postgresql-11 systemctl start postgresql-11 

創建barman和barman_streaming用戶

su postgres createuser -s -P barman #設置密碼123456 createuser -P --replication streaming_barman #設置密碼123456 #創建.pgpass touch ~/.pgpass #添加 pg:5432:*:streaming_barman:123456 pg:5432:*:barman:123456 #更改權限 chmod 600 ~/.pgpass #驗證 psql -c 'SELECT version()' -U barman -h pg postgres 

yum安裝barman

由於barman是python寫的,且有些功能需要使用postgresql的工具,安裝時會有些依賴

yum install -y https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7.6-x86_64/postgresql11-libs-11.2-1PGDG.rhel7.x86_64.rpm yum install -y https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7.6-x86_64/python2-psycopg2-2.8.2-1.rhel7.x86_64.rpm yum install -y https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7.6-x86_64/barman-2.9-1.rhel7.noarch.rpm yum install -y https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7.6-x86_64/barman-cli-2.9-1.rhel7.noarch.rpm 

修改barman的公共配置

vi /etc/barman.conf #修改以下配置 parallel_jobs = 2 #並發數 immediate_checkpoint = true #在執行back時是否會自動執行checkpoint network_compression = true #網絡傳輸壓縮 

修改barman對postgresql server的私有配置

cd /etc/barman.d/ cp streaming-server.conf-template pg.conf #將pg.conf中的[streaming]修改為[pg] 

將192.168.2.2 pg添加到/etc/hosts中

barman使用

1.創建復制槽

barman receive-wal --create-slot pg

2.barman check

[root@25ff7df1b128 pg]# barman check pg Server pg: PostgreSQL: OK is_superuser: OK PostgreSQL streaming: OK wal_level: OK replication slot: 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: FAILED (have 0 backups, expected at least 1) pg_basebackup: OK pg_basebackup compatible: OK pg_basebackup supports tablespaces mapping: OK pg_receivexlog: OK pg_receivexlog compatible: OK receive-wal running: OK archiver errors: OK 

其中minimum redundancy requirements: FAILED可忽略,首次配置后還沒有全備,執行全備會變為OK

[root@25ff7df1b128 pg]# barman backup pg Starting backup using postgres method for server pg in /var/lib/barman/pg/base/20190821T171724 Backup start at LSN: 0/90000D0 (000000010000000000000009, 000000D0) Starting backup copy via pg_basebackup for 20190821T171724 Copy done (time: 2 seconds) Finalising the backup. This is the first backup for server pg WAL segments preceding the current backup have been found: 000000010000000000000008 from server pg has been removed Backup size: 166.6 MiB Backup end at LSN: 0/B000060 (00000001000000000000000B, 00000060) Backup completed (start time: 2019-08-21 17:17:24.956763, elapsed time: 2 seconds) Processing xlog segments from streaming for pg 000000010000000000000009 00000001000000000000000A 

首次配置完會產生minimum redundancy requirements: FAILED、receive-wal running:FAILED,執行barman cron即可變為OK,barman會執行如下過程

[root@25ff7df1b128 pg]# barman cron Starting WAL archiving for server pg Starting streaming archiver for server pg Starting check-backup for backup 20190821T172217 of server pg #正常流復制時的進程 [root@25ff7df1b128 pg]# ps -ef|grep barman root 1278 1 0 17:30 ? 00:00:00 /usr/bin/python2 /usr/bin/barman -c /etc/barman.conf -q receive-wal pg root 1281 1278 0 17:30 ? 00:00:00 /usr/pgsql-11/bin/pg_receivewal --dbname=dbname=replication host=pg options=-cdatestyle=iso replication=true user=streaming_barman application_name=barman_receive_wal --verbose --no-loop --no-password --directory=/var/lib/barman/pg/streaming --slot=barman --synchronous #執行全備時的進程 [root@25ff7df1b128 ~]# ps -ef|grep barman root 1325 1 1 17:33 ? 00:00:00 /usr/bin/python2 /usr/bin/barman -c /etc/barman.conf -q receive-wal pg root 1327 1325 0 17:33 ? 00:00:00 /usr/pgsql-11/bin/pg_receivewal --dbname=dbname=replication host=pg options=-cdatestyle=iso replication=true user=streaming_barman application_name=barman_receive_wal --verbose --no-loop --no-password --directory=/var/lib/barman/pg/streaming --slot=barman --synchronous root 1331 1035 12 17:33 pts/0 00:00:00 /usr/bin/python2 /usr/bin/barman backup pg root 1334 1331 0 17:33 pts/0 00:00:00 /usr/pgsql-11/bin/pg_basebackup --dbname=dbname=replication host=pg options=-cdatestyle=iso replication=true user=streaming_barman application_name=barman_streaming_backup -v --no-password --pgdata=/var/lib/barman/pg/base/20190821T173331/data --no-slot --wal-method=none --checkpoint=fast 

所以barman的全備是利用pg_basebackup實現,增量是利用pg_receivewal實現。

barman優點

1.可以與postgresql的master和slaver分離部署,但是barman服務器需要安裝postgresql的一些工具,如pg_basebackuppg_receivewal

2.通過流復制可以同步拉取wal,如果postgresql當前的wal還沒close,barman會產生一個.partial文件實時同步,若在恢復時使用該文件需要將擴展后綴去掉

3.barman可以一台服務器管理多個postgresql server,提供本地及遠程恢復(遠程恢復需要配置ssh免密)

4.提供備份相關文件的檢測及詳細查詢

barman部分功能

1.查看當前復制狀態

[root@25ff7df1b128 ~]# barman replication-status pg Status of streaming clients for server 'pg': Current LSN on master: 0/130001A8 Number of streaming clients: 1 1. #1 Sync WAL streamer Application name: barman_receive_wal Sync stage : 3/3 Remote write Communication : TCP/IP IP Address : 192.168.2.3 / Port: 33256 / Host: - User name : streaming_barman Current state : streaming (sync) Replication slot: barman WAL sender PID : 1731 Started at : 2019-08-21 17:33:16.495522+08:00 Sent LSN : 0/130001A8 (diff: 0 B) Write LSN : 0/130001A8 (diff: 0 B) Flush LSN : 0/130001A8 (diff: 0 B) 

2.查看備份列表

[root@25ff7df1b128 ~]# barman list-backup pg pg 20190821T173331 - Wed Aug 21 17:33:35 2019 - Size: 294.6 MiB - WAL Size: 0 B - WAITING_FOR_WALS pg 20190821T172217 - Wed Aug 21 17:22:20 2019 - Size: 230.6 MiB - WAL Size: 64.0 MiB pg 20190821T171724 - Wed Aug 21 17:17:27 2019 - Size: 198.6 MiB - WAL Size: 32.0 MiB 

3.查看postgresql server

[root@25ff7df1b128 ~]# barman show-server pg Server pg: active: True archive_timeout: 3600 archiver: False archiver_batch_size: 0 backup_directory: /var/lib/barman/pg backup_method: postgres backup_options: BackupOptions(['concurrent_backup']) bandwidth_limit: None barman_home: /var/lib/barman barman_lock_directory: /var/lib/barman basebackup_retry_sleep: 30 basebackup_retry_times: 3 basebackups_directory: /var/lib/barman/pg/base check_timeout: 30 checkpoint_timeout: 300 compression: None config_file: /var/lib/pgsql/11/data/postgresql.conf connection_error: None conninfo: host=pg user=barman dbname=postgres current_size: 23808077 current_xlog: 000000010000000000000015 custom_compression_filter: None custom_decompression_filter: None data_checksums: off data_directory: /var/lib/pgsql/11/data description: Example of PostgreSQL Database (Streaming-Only) disabled: False errors_directory: /var/lib/barman/pg/errors hba_file: /var/lib/pgsql/11/data/pg_hba.conf hot_standby: on ident_file: /var/lib/pgsql/11/data/pg_ident.conf immediate_checkpoint: True incoming_wals_directory: /var/lib/barman/pg/incoming is_in_recovery: False is_superuser: True last_backup_maximum_age: None max_incoming_wals_queue: None max_replication_slots: 10 max_wal_senders: 10 minimum_redundancy: 1 msg_list: [] name: pg network_compression: False parallel_jobs: 1 passive_node: False path_prefix: /usr/pgsql-11/bin pg_basebackup_bwlimit: True pg_basebackup_compatible: True pg_basebackup_installed: True pg_basebackup_path: /usr/pgsql-11/bin/pg_basebackup pg_basebackup_tbls_mapping: True pg_basebackup_version: 11.2 pg_receivexlog_compatible: True pg_receivexlog_installed: True pg_receivexlog_path: /usr/pgsql-11/bin/pg_receivewal pg_receivexlog_supports_slots: True pg_receivexlog_synchronous: True pg_receivexlog_version: 11.2 pgespresso_installed: False post_archive_retry_script: None post_archive_script: None post_backup_retry_script: None post_backup_script: None post_delete_retry_script: None post_delete_script: None post_recovery_retry_script: None post_recovery_script: None post_wal_delete_retry_script: None post_wal_delete_script: None pre_archive_retry_script: None pre_archive_script: None pre_backup_retry_script: None pre_backup_script: None pre_delete_retry_script: None pre_delete_script: None pre_recovery_retry_script: None pre_recovery_script: None pre_wal_delete_retry_script: None pre_wal_delete_script: None primary_ssh_command: None recovery_options: RecoveryOptions([]) replication_slot: Record(slot_name='barman', active=True, restart_lsn='0/150000C8') replication_slot_support: True retention_policy: None retention_policy_mode: auto reuse_backup: None server_txt_version: 11.2 slot_name: barman ssh_command: None streaming: True streaming_archiver: True streaming_archiver_batch_size: 0 streaming_archiver_name: barman_receive_wal streaming_backup_name: barman_streaming_backup streaming_conninfo: host=pg user=streaming_barman streaming_supported: True streaming_wals_directory: /var/lib/barman/pg/streaming synchronous_standby_names: ['*'] systemid: 6727448561719488729 tablespace_bandwidth_limit: None timeline: 1 wal_compression: off wal_level: replica wal_retention_policy: main wals_directory: /var/lib/barman/pg/wals xlog_segment_size: 16777216 xlogpos: 0/150000C8 

4.遠程執行switch-wal

[root@25ff7df1b128 ~]# barman switch-wal pg The WAL file 000000010000000000000015 has been closed on server 'pg' 

5.檢查backupid

[root@25ff7df1b128 ~]# barman list-backup pg pg 20190821T174304 - Wed Aug 21 17:43:08 2019 - Size: 326.6 MiB - WAL Size: 0 B - WAITING_FOR_WALS pg 20190821T173331 - Wed Aug 21 17:33:35 2019 - Size: 310.6 MiB - WAL Size: 16.0 MiB - WAITING_FOR_WALS pg 20190821T172217 - Wed Aug 21 17:22:20 2019 - Size: 230.6 MiB - WAL Size: 80.0 MiB pg 20190821T171724 - Wed Aug 21 17:17:27 2019 - Size: 198.6 MiB - WAL Size: 32.0 MiB [root@25ff7df1b128 ~]# barman check-backup pg 20190821T171724 [root@25ff7df1b128 ~]# barman check-backup pg 20190821T171724s ERROR: Unknown backup '20190821T171724s' for server 'pg' 

6.查看文件

–target參數包括:

data:列出data目錄的所有文件

standalone:列出全備和需要的wal文件

wal:列出全備開始到當前時間的wal文件

full:等於data + wal

[root@25ff7df1b128 ~]# barman list-files --target wal pg 20190821T173331 /var/lib/barman/pg/wals/0000000100000000/000000010000000000000012 /var/lib/barman/pg/wals/0000000100000000/000000010000000000000013 

7.備份恢復

#備份恢復 barman recover <server_name> <backup_id> <postgres server data path> #時間點恢復 barman recover <server_name> <backup_id> <postgres server data path> --target-time TARGET_TIME 

還提供:--target-xid TARGET_XID--target-lsn TARGET_LSN--target-name TARGET_NAME--target-immediate

8.查看備份詳情

[root@25ff7df1b128 ~]# barman show-backup pg 20190821T173331 Backup 20190821T173331: Server Name : pg Status : WAITING_FOR_WALS PostgreSQL Version : 110002 PGDATA directory : /var/lib/pgsql/11/data Base backup information: Disk usage : 294.6 MiB (310.6 MiB with WALs) Incremental size : 294.6 MiB (-0.00%) Timeline : 1 Begin WAL : 000000010000000000000012 End WAL : 000000010000000000000012 WAL number : 1 Begin time : 2019-08-21 17:33:31+08:00 End time : 2019-08-21 17:33:35.321271+08:00 Copy time : 3 seconds Estimated throughput : 75.6 MiB/s Begin Offset : 96 End Offset : 0 Begin LSN : 0/12000060 End LSN : 0/13000000 WAL information: No of files : 1 Disk usage : 16.0 MiB WAL rate : 12.58/hour Last available : 000000010000000000000013 Catalog information: Retention Policy : not enforced Previous Backup : 20190821T172217 Next Backup : 20190821T174304 

參考:

  1. https://severalnines.com/blog/using-barman-backup-postgresql-overview
  2. http://docs.pgbarman.org/release/2.9/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM