w3resource

Understanding PostgreSQL Replication for High Availability


PostgreSQL Replication: High Availability and Scalability

Replication in PostgreSQL is a feature that enables copying data from one PostgreSQL database (primary) to one or more other databases (replicas). It is essential for improving data redundancy, ensuring high availability, load balancing, and scaling read operations across multiple nodes. PostgreSQL supports various replication methods, including streaming replication, logical replication, and physical replication, each catering to different use cases and performance needs.

Types of PostgreSQL Replication:

1. Streaming Replication:

A built-in PostgreSQL feature that replicates changes continuously from the primary server to replicas. It's highly suited for real-time failover and disaster recovery.

2. Logical Replication:

Allows more granular control over replication, enabling selective data synchronization at a table or row level rather than the entire database. Useful for data migrations or multi-master replication setups.

3. Physical Replication:

The entire database file is copied, including the physical structure. Ideal for maintaining exact copies of the database in other servers.

Basic Syntax for Setting Up Streaming Replication

The setup involves two main configurations: enabling replication on the primary server and configuring standby settings on the replica(s).

Primary Server Setup:

-- Edit postgresql.conf file on primary
listen_addresses = '*'
wal_level = replica               -- Set Write-Ahead Logging level to 'replica'
max_wal_senders = 5               -- Maximum replication connections

Replica Server Setup:

-- Standby configuration (pg_basebackup or WAL files required)
standby_mode = 'on'               -- Enable standby mode
primary_conninfo = 'host=primary_host user=replica_user password=your_password' 

Example: Setting Up Streaming Replication

Step 1: Configure the primary server to enable replication.

Step 2: Create a replication user with necessary permissions.

Code:

--- Create a user for replication
CREATE ROLE replica_user WITH REPLICATION PASSWORD 'your_password' LOGIN;

Step 3: Configure pg_hba.conf to allow connections from replica servers.

Step 4: Initialize the standby server using pg_basebackup to copy the primary data directory.

Code:

pg_basebackup -h primary_host -D /path/to/standby/data -U replica_user -P --wal-method=stream
Step 5: Start the replica server.

Explanation of Configuration:

  • wal_level: Determines the level of Write-Ahead Logging; replica enables replication.
  • max_wal_senders: Specifies the maximum number of connections for WAL (Write-Ahead Logging) replication.
  • pg_basebackup: A utility to create a backup of the primary database for replication purposes.
  • standby_mode: Enables the replica to stay in sync with the primary.

Additional Considerations for PostgreSQL Replication

  • Failover: In case of primary server failure, you can promote a standby server to primary by running pg_ctl promote.
  • Synchronous vs. Asynchronous Replication: Synchronous replication waits for acknowledgment from the replica, offering higher data integrity, while asynchronous replication prioritizes performance over immediate data consistency.

Benefits of PostgreSQL Replication

  • High Availability: Ensures that a standby server is ready to take over if the primary server fails.
  • Load Balancing: Offloads read operations to replicas, improving performance on the primary.
  • Disaster Recovery: Allows quick restoration of services by switching to a standby server.

Summary:

Replication in PostgreSQL is crucial for creating high-availability environments, enhancing data redundancy, and improving scalability. Streaming and logical replication options provide flexibility in achieving data consistency and disaster recovery strategies.

All PostgreSQL Questions, Answers, and Code Snippets Collection.



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/PostgreSQL/snippets/postgresql-replication.php