Qiitaに移植しました
Barman(PostgreSQL バックアップツール)
やったこと
- DBサーバからslaveよりバックアップを取得
- postgresql 11.4
- PG-REX 11
- barman 2.8
参考サイト
大体この4つのサイトを見れば分かる
- 公式ドキュメントBarman Manual
- TOPページはhttpsになっている。
- PostgreSQL DBのバックアップを一元化しよう
- Barman(PostgreSQL PITR 補助ツール)
- バックアップユーティリティ barman 2.0 の新機能について
ハマったこと
- レプリケーションスロットの作成or削除が上手くいかない
- ステータス諸々の確認方法
- 夜間のバックアップが上手くいかない
- 1分置きのwalの取得諸々
レプリケーションスロットの作成or削除の確認
前提条件
プロファイル名:streaming-server-002
※フェールオーバーを想定して「streaming-server-001」も作成。
その際は手動でレプリケーションスロットの再作成&削除が必要。
行わない場合アーカイブログでディスクが溢れる。。。
DBサーバ名:db-001,bk-002
バックアップサーバ名:bk-001
正常時
作成 ※barmanユーザで実施
-bash-4.2$ barman receive-wal --create-slot streaming-server-002
Creating physical replication slot 'barman_slot' on server 'streaming-server-002'
Replication slot 'barman_slot' created
上手くいくと、少々経った後にチェックが通り「replication slot: OK」となる
-bash-4.2$ barman check streaming-server-002
Server streaming-server-002:
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: OK (have 0 backups, expected at least 0)
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
[uesr@streaming-server-002 ~]$ netstat | grep postgres
tcp 0 0 nws-dbg-302:postgres nws-nfs-301:60730 ESTABLISHED
[nwcsadm@nws-dbg-202 ~]$ ps -ef | grep wal
postgres 7148 7121 0 8月23 ? 00:01:52 postgres: walreceiver streaming 1C/53000000
postgres 24596 7121 0 10:55 ? 00:00:00 postgres: walsender barman 10.250.73.23(60730) idle
nwcsadm 26360 23784 0 10:56 pts/0 00:00:00 grep --color=auto wal
-bash-4.2$ psql -x -p 5432 -c "SELECT * FROM pg_stat_replication"
-[ RECORD 1 ]----+-----------------------------
pid | 24596
usesysid | 24579
usename | barman
application_name | barman_receive_wal
client_addr | 10.250.73.23
client_hostname |
client_port | 60730
backend_start | 2019-08-26 10:55:23.77812+09
backend_xmin |
state | streaming
sent_lsn | 1C/53000000
write_lsn | 1C/53000000
flush_lsn | 1C/53000000
replay_lsn |
write_lag | 00:00:00.000171
flush_lag | 00:00:00.000171
replay_lag | 00:02:20.071599
sync_priority | 0
sync_state | async
[root@nws-nfs-201 log]# ps -ef | grep wal
barman 5508 1 0 8月23 ? 00:00:02 /usr/bin/python2 /usr/bin/barman -c /etc/barman.conf -q receive-wal streaming-nws-dbz-301
barman 5522 5508 0 8月23 ? 00:01:18 /usr/pgsql-11/bin/pg_receivewal --dbname=dbname=replication host=nws-dbz-301 options=-cdatestyle=iso replication=true user=barman application_name=barman_receive_wal --verbose --no-loop --no-password --directory=/backup/dbbackup/streaming-nws-dbz-301/streaming --slot=barman_slot
barman 6049 1 0 10:55 ? 00:00:00 /usr/bin/python2 /usr/bin/barman -c /etc/barman.conf -q receive-wal streaming-nws-dbg-302
barman 6063 6049 0 10:55 ? 00:00:00 /usr/pgsql-11/bin/pg_receivewal --dbname=dbname=replication host=nws-dbg-302 options=-cdatestyle=iso replication=true user=barman application_name=barman_receive_wal --verbose --no-loop --no-password --directory=/backup/dbbackup/streaming-nws-dbg-302/streaming --slot=barman_slot
root 6224 5057 0 11:01 pts/0 00:00:00 grep --color=auto wal
cronの設定 -bash-4.2$ crontab -l 00 02 * * * /nw_home/sh/dbbackup.sh streaming-server-002 > /dev/null 2>&1
対処法
- レプリケーションスロットの削除
- barman receive-wal –drop-slot streaming-server-002
- レプリケーションスロットのリセット
- barman receive-wal –reset streaming-server-002
- レプリケーションスロットの作成
- barman receive-wal –create-slot streaming-server-002
- ベースバックアップを取得する(DBが動いていないと失敗する)
- barman backup –immediate-checkpoint streaming-server-002
- 夜間バックアップを手動で実行
- /home/sh/dbbackup.sh streaming-server-002
- 結果確認
- barman list-backup streaming-server-002
- DBが動いていないと失敗することもあるが、接続ができていればOK
- それでもだめな場合は保存先フォルダを削除する
- 中途半端なwalがあると失敗するケースがある