BDR (Bi-Directional Replication)¶
Overview¶
BDR is a PostgreSQL extension providing multi-master replication and datadistribution with advanced conflict management, data-loss protection, andthroughput up to 5X faster than native logical replication, and enablesdistributed PostgreSQL clusters with high availability up to five 9s.
Detailed overview about how BDR works is described in theArchitectural Overview chapter.
Supported PostgreSQL database servers¶
BDR is compatible with PostgresSQL, EDB Postgres Extended and EDB PostgresAdvanced flavors of PostgresSQL database servers and can be deployed as astandard PG extension. Full compatibility matrix is as follows.
BDR Version |
PostgreSQL |
EDB Postgres Extended |
EDB Postgres Advanced |
|---|---|---|---|
4.0.0 |
14.1 |
14.1 |
14.1 |
4.0.0 |
13.5 |
13.5r1.1.7 |
13.5 |
4.0.0 |
12.9 |
12.9r1.1.9 |
12.9 |
3.7.13.1 |
13.5 |
13.5r1.1.7 |
13.5 |
3.7.13.1 |
12.9 |
12.9r1.1.9 |
12.9 |
3.7.13.1 |
11.14 |
11.14r2.1.9 |
11.14 |
It is important to note that some key BDR features depend on certain corecapabilities being available within the targeted PostgresSQL database server.Therefore, it is essential for the BDR customers to also adopt the PostgresSQLdatabase server flavor that is best suited to their business needs. Forexample, if having the BDR feature “Commit At Most Once (CAMO)” is missioncritical to a BDR customer’s use case, they should not adopt the communityPostgreSQL flavor for it does not have the core capability required to handleCAMO. The full feature matrix compatibility can be found inFeature Compatibility appendix.
BDR offers close to native PostgreSQL compatibility. However, some accesspatterns don’t necessarily work as well in multi-node setup as they do onsingle instance. There are also some limitations in what can be safelyreplicated in multi-node setting. The chapter Application Usagegoes into detail on how BDR behaves from application development perspective.
- Architectural Overview
- Application Usage
- Application Behavior
- Non-replicated statements
- DML and DDL Replication
- Replicating between different release levels
- Replicating between nodes with differences
- Comparison between nodes with differences
- General Rules for Applications
- Timing Considerations and Synchronous Replication
- Application Testing
- Performance Testing & Tuning
- Assessing Suitability
- PostgreSQL Configuration for BDR
- PostgreSQL Settings for BDR
- EDB PG Extended and EDB PG Advanced Settings for BDR
- BDR Specific Settings
- Conflict Handling
- Global Sequence Parameters
- DDL Handling
- Global Locking
- Node Management
- Generic Replication
bdr.standby_slot_namesbdr.standby_slots_min_confirmedbdr.writer_input_queue_sizebdr.writer_output_queue_sizebdr.min_worker_backoff_delay- CRDTs
- Max Prepared Transactions
- Eager Replication
- Commit at Most Once
- Transaction streaming
- Timestamp-based Snapshots
- Monitoring and Logging
- Internals
- Node Management
- DDL Replication
- Security and Roles
- Conflicts
- Sequences
- Column-Level Conflict Detection
- Conflict-free Replicated Data Types
- Transaction streaming
- Durability & Performance Options
- Eager Replication
- CAMO
- AutoPartition
- Timestamp-Based Snapshots
- Replication Sets
- Stream Triggers
- Backup and Recovery
- Application Schema Upgrades
- Explicit Two-Phase Commit (2PC)
- Catalogs and Views
- User-Visible Catalogs and Views
bdr.conflict_historybdr.conflict_history_summarybdr.consensus_kv_databdr.camo_decision_journalbdr.crdt_handlersbdr.ddl_replicationbdr.dependbdr.global_consensus_journalbdr.global_consensus_journal_detailsbdr.global_consensus_response_journalbdr.global_lockbdr.global_locksbdr.local_consensus_snapshotbdr.local_consensus_statebdr.local_nodebdr.local_node_summarybdr.local_sync_statusbdr.network_path_infobdr.nodebdr.node_catchup_infobdr.node_conflict_resolversbdr.node_groupbdr.node_group_replication_setsbdr.node_local_infobdr.node_locationbdr.node_log_configbdr.node_peer_progressbdr.node_pre_commitbdr.node_replication_ratesbdr.node_slotsbdr.node_summarybdr.queuebdr.replication_setbdr.replication_set_tablebdr.replication_set_ddlbdr.replication_setsbdr.schema_changesbdr.sequence_allocbdr.schema_changesbdr.sequence_allocbdr.sequencesbdr.stat_activitybdr.stat_relationbdr.stat_subscriptionbdr.subscriptionbdr.subscription_summarybdr.replication_statusbdr.tablesbdr.triggerbdr.triggersbdr.workersbdr.worker_errorsbdr.writersbdr.worker_tasksbdr.autopartition_work_queuebdr.autopartition_workitem_statusbdr.autopartition_local_work_queuebdr.autopartition_local_workitem_statusbdr.group_camo_detailsbdr.camo_pairsbdr.group_raft_detailsbdr.group_replslots_detailsbdr.group_subscription_summarybdr.group_versions_details
- Internal Catalogs and Views
- User-Visible Catalogs and Views
- Monitoring
- Monitoring Overview
- Monitoring Node Join and Removal
- Monitoring Replication Peers
- Monitoring BDR Replication Workers
- Monitoring BDR Writers
- Monitoring Global Locks
- Monitoring Conflicts
- External Monitoring
- Apply Statistics
- Standard PostgreSQL Statistics Views
- Monitoring BDR Versions
- Monitoring Raft Consensus
- Monitoring Replication Slots
- Monitoring Transaction COMMITs
- BDR System Functions
- Credits and Licence
- ’Appendix A
- ’Appendix B
- ’Appendix C
- ’Appendix D
- ’Appendix E
- CAMO Clients