Question: How do you configure replication in PostgreSQL?
Answer
PostgreSQL offers several methods for database replication, allowing a primary server to replicate its data to one or more secondary servers. Among the most common replication methods are Streaming Replication and Logical Replication. This guide focuses on setting up Streaming Replication.
Prerequisites
- Two or more PostgreSQL servers (a primary and at least one standby).
- Same version of PostgreSQL installed on all servers.
- Network connectivity between all participating servers.
- A dedicated replication user on the primary server.
1. Configure the Primary Server
On the primary server, you need to make changes to two main configuration files: postgresql.conf
and pg_hba.conf
.
Edit postgresql.conf
listen_addresses = '*' # listen on all interfaces wal_level = replica # minimum for streaming replication max_wal_senders = 5 # max number of walsender processes archive_mode = on # enables archiving; off if not needed archive_command = 'cp %p /path/to/archive/%f' # local archive command; adjust as necessary
Edit pg_hba.conf
Add the following line to allow the standby server to connect:
host replication replicator <standby_IP_address>/32 md5
Replace <standby_IP_address>
with the actual IP address of your standby server and replicator
with the name of your replication user.
After making these changes, restart the PostgreSQL service to apply them.
2. Prepare the Standby Server
Before setting up the standby server, ensure that the primary server is correctly configured and running.
Create a Base Backup
You can use the pg_basebackup
tool to create a base backup of the primary server.
pg_basebackup -h <primary_IP_address> -D /var/lib/postgresql/12/main -U replicator -v -P --wal-method=stream
Replace <primary_IP_address>
with the IP address of your primary server. Adjust the path (/var/lib/postgresql/12/main
) according to your PostgreSQL version and installation.
Create standby.signal
On the standby server, create an empty file named standby.signal
in the PostgreSQL data directory to indicate that this server should start in standby mode.
Edit postgresql.conf
on the Standby
Ensure the following settings are adjusted in your postgresql.conf
on the standby server:
hot_standby = on # allows connections and queries during recovery
3. Start the Standby Server
With the standby.signal
file in place and configurations adjusted, start the PostgreSQL service on the standby server. It should connect to the primary and begin replicating.
4. Monitoring Replication Status
To monitor the replication status, you can use the pg_stat_replication
view on the primary server:
SELECT * FROM pg_stat_replication;
This basic setup gets you started with PostgreSQL streaming replication. There are many other options and configurations available depending on your specific needs, including synchronous replication, multiple standbys, and using replication slots.
Was this content helpful?
Other Common PostgreSQL Questions (and Answers)
- How do you manage Postgres replication lag?
- How can I limit the number of rows updated in a PostgreSQL query?
- What is PostgreSQL replication and how does it work?
- How does sharding work in PostgreSQL?
- What is partitioning in PostgreSQL?
- How do you limit the number of rows deleted in PostgreSQL?
- How do you use the PARTITION OVER clause in PostgreSQL?
- How do you use the PARTITION BY clause in PostgreSQL?
- What are PostgreSQL replication slots and how do they work?
- How can you partition an existing table in PostgreSQL?
- How do you set up replication in PostgreSQL?
- What is PostgreSQL replication streaming?
Free System Design on AWS E-Book
Download this early release of O'Reilly's latest cloud infrastructure e-book: System Design on AWS.
Start building today
Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.