Skip to content

Widhian Bramantya

coding is an art form

Menu
  • About Me
Menu
postgresql

PostgreSQL Replication Deep Dive: From High Availability to Multi-Master Clusters

Posted on October 8, 2025October 8, 2025 by admin

Synchronous vs Asynchronous Replication

Replication can be asynchronous or synchronous depending on how it waits for confirmation.

Asynchronous

  • The primary doesn’t wait for the replica.
  • Faster writes, but risk of data loss if the primary crashes.

Synchronous

  • The primary waits until the replica confirms it received the data.
  • No data loss, but slightly slower writes.

Example:

synchronous_standby_names = 'replica1'

Master–Replica Internals

A typical master–replica setup has:

  • One primary server (handles all writes)
  • One or more replicas (read-only)
flowchart TB
    A[Clients] --> B[Primary - Writable]
    B -- WAL Stream --> C[Replica 1 - Read-only]
    B -- WAL Stream --> D[Replica 2 - Standby]
    D -. Failover .-> B

The replica has a background process called WAL receiver, and the primary has WAL sender. They communicate continuously to keep data in sync.

You can check replication status:

SELECT application_name, state, write_lag, replay_lag
FROM pg_stat_replication;

Multi-Master Architecture (Active–Active)

Sometimes, you want multiple servers that can all accept writes, for example, a global application with servers in different regions. This setup is called multi-master replication or active–active replication.

PostgreSQL doesn’t support multi-master by default, but it can be achieved using BDR (Bi-Directional Replication) or other tools like pglogical.

How BDR Works

  • Each node is both a publisher and a subscriber.
  • WAL is decoded logically and sent both ways.
  • Conflict resolution rules are applied to avoid data clashes.

Example:

Node A (Asia)  ←→  Node B (Europe)

If both nodes insert the same primary key, BDR resolves the conflict using:

  • last-update-wins
  • origin priority
  • or custom conflict handlers.

Advantages:

  • Writes possible on multiple nodes
  • Geographical redundancy

Challenges:

  • Conflict management
  • Higher latency
  • Complex setup
See also  Smart Automation in PostgreSQL: Managing Time-Based Data with pg_partman and pg_cron

Related posts:

PostgreSQL Write-Ahead Log (WAL): Durability, Performance Tuning, and Recovery Explained

Smart Automation in PostgreSQL: Managing Time-Based Data with pg_partman and pg_cron

Understanding PostgreSQL WAL, Slot, Publication, LSN, and Replication Lag

Pages: 1 2 3 4
Category: PostgreSQL

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Linkedin

Widhian Bramantya

Recent Posts

  • Smart Automation in PostgreSQL: Managing Time-Based Data with pg_partman and pg_cron
  • Understanding PostgreSQL WAL, Slot, Publication, LSN, and Replication Lag
  • PostgreSQL Write-Ahead Log (WAL): Durability, Performance Tuning, and Recovery Explained
  • PostgreSQL Replication Deep Dive: From High Availability to Multi-Master Clusters
  • Finding Nearby Merchants in a Ride-Hailing App Using Elasticsearch Polygon Search
  • Advanced Text Search in Elasticsearch: N-Gram, Reverse, Fuzzy, and Search-as-you-type
  • Understanding and Customizing Analyzers in Elasticsearch
  • Log Management at Scale: Integrating Elasticsearch with Beats, Logstash, and Kibana
  • Index Lifecycle Management (ILM) in Elasticsearch: Automatic Data Control Made Simple
  • Blue-Green Deployment in Elasticsearch: Safe Reindexing and Zero-Downtime Upgrades
  • Maintaining Super Large Datasets in Elasticsearch
  • Elasticsearch Best Practices for Beginners
  • Implementing the Outbox Pattern with Debezium
  • Production-Grade Debezium Connector with Kafka (Postgres Outbox Example – E-Commerce Orders)
  • Connecting Debezium with Kafka for Real-Time Streaming
  • Debezium Architecture – How It Works and Core Components
  • What is Debezium? – An Introduction to Change Data Capture
  • Offset Management and Consumer Groups in Kafka
  • Partitions, Replication, and Fault Tolerance in Kafka
  • Delivery Semantics in Kafka: At Most Once, At Least Once, Exactly Once

Recent Comments

No comments to show.

Archives

  • October 2025
  • September 2025
  • August 2025
  • November 2021
  • October 2021
  • August 2021
  • July 2021
  • June 2021
  • March 2021
  • January 2021

Categories

  • Debezium
  • Devops
  • ElasticSearch
  • Golang
  • Kafka
  • Lua
  • NATS
  • PostgreSQL
  • Programming
  • RabbitMQ
  • Redis
  • VPC
© 2026 Widhian Bramantya | Powered by Minimalist Blog WordPress Theme