WAL archiving#
Barman also offers additional features regarding WAL archiving.
WAL compression#
Barman can compress WAL files as they enter the Barman’s WAL archive. This process is
handled automatically by barman cron
or when the barman archive-wal
command is
executed manually.
Compression is enabled via the compression
option in the configuration file.
The option can use one of the following values:
lz4
: for LZ4 compression (requires thelz4
library to be installed);xz
: for XZ compression (uses Python’s internal compression library);zstd
: for Zstandard compression (requires thezstandard
library to be installed);gzip
: for Gzip compression (requires thegzip
utility);pygzip
: for Gzip compression (uses Python’s internal compression library);pigz
: for Pigz compression (requires thepigz
utility);bzip2
: for Bzip2 compression (requires thebzip2
utility);pybzip2
: for Bzip2 compression (uses Python’s internal compression library);custom
: for custom compression, which requires you to set the following options as well:custom_compression_filter
,custom_decompression_filter
,custom_compression_magic
. Check Write-Ahead Logs (WAL) for details.
Note
When using options such as bzip2
, gzip
and pigz
Barman will fork a new
process for compression.
Synchronous WAL streaming#
Barman can also reduce the RPO to zero, by collecting the transaction WAL files like a synchronous standby server would.
To configure a scenario with RPO zero, the Barman server must be configured to archive WALs via a streaming connection and the receive-wal process has to be configured as a synchronous connection to the Postgres server.
First, you need to retrieve the application name of the Barman receive-wal process with the
show-servers
command:
barman show-servers pg | grep streaming_archiver_name
Output:
streaming_archiver_name: barman_receive_wal
Note
The application name Barman uses when starting the receive-wal process is configured
with the streaming_archiver_name
configuration option. The default value for this
option is barman_receive_wal
.
Then the application name should be added to the synchronous_standby_names
parameter in the postgresql.conf
file:
synchronous_standby_names = 'barman_receive_wal'
Important
Barman with RPO zero adds more security to your backups and gives you more recovery options. However, it should not be considered as a substitution of a real Postgres replica. Please read the official Postgres documentation about “Syncronous Replication” for more information on this topic.
The Postgres server configuration needs to be reloaded for the changes to take effect.
If the server has been configured correctly, the barman replication-status
command
should show the receive-wal process as a synchronous streaming client:
barman replication-status pg
Output:
Status of streaming clients for server 'pg':
Current xlog location on master: 0/9000098
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 : 139.59.135.32 / Port: 58262 / Host: -
User name : streaming_barman
Current state : streaming (sync)
Replication slot: barman
WAL sender PID : 2501
Started at : 2016-09-16 10:33:01.725883+00:00
Sent location : 0/9000098 (diff: 0 B)
Write location : 0/9000098 (diff: 0 B)
Flush location : 0/9000098 (diff: 0 B)