Bucardo is a replication system for Postgres that supports any number of sources and targets (aka masters and slaves). It is asynchronous and trigger based.
Production Version 5.4.1
|Scalability||Master-slave: high with cascading slaves. Multi-master: two or more|
|Write scaling||yes (with multimaster); no/slight inverse (master/slave only)|
|Failover/High Availability||Not automatic|
|PostgreSQL core modifications required||No|
|Programming languages||Perl, Pl/PgSQL, Pl/PerlU|
|Complete clustering solution||Yes|
|PostgreSQL versions||8.1 to 9.6|
Asynchronous cascading master-slave replication, row-based, using triggers and queueing in the database AND Asynchronous master-master replication, row-based, using triggers and customized conflict resolution
General model: Asynchronous cascading master-slave and/or master-master. Row-based, uses triggers and LISTEN/NOTIFY.
Bucardo requires a dedicated database and runs as a Perl daemon that communicates with this database and all other databases involved in the replication. It can run as multimaster or multislave.
Multimaster replication uses two or more databases, with conflict resolution (either standard choices or custom subroutines) to handle the same update on both sides.
Master-slave replication involves one or more sources going to one or more targets. The source must be PostgreSQL, but the targets can be PostgreSQL, MySQL, Redis, Oracle, MariaDB, SQLite, or MongoDB.
- Load balancing via slaves
- Data warehousing via slaves
- Slaves are not constrained and can be written to
- Upgrading from one Postgres version to another
- Many hooks allow for data to be changed on the fly during replication, and ease of things like cache invalidation.
- Partial replication
- Replication on demand (changes can be pushed automatically or when desired)
- Will handle replication of TRUNCATE for Postgres version 8.4 or greater.
- Slaves can be "pre-warmed" for quick setup
- Cannot handle DDL (Postgres has no triggers on system tables)
- Cannot handle large objects (same reason)
- Cannot incrementally replicate tables without a unique key (it can "fullcopy" them)
- Will not work on versions older than Postgres 8
Commercial support is available from End Point Corporation. Non-commercial support is available from the the bucardo-general mailing list, and the #bucardo channel on irc.freenode.net.