An implementation of synchronous multi-master replication based on logical decoding and xtm.
- Install
contrib/raftable
andcontrib/mmts
on each instance. - Add these required options to the
postgresql.conf
of each instance in the cluster.max_prepared_transactions = 200 # should be > 0, because all # transactions are implicitly two-phase max_connections = 200 max_worker_processes = 100 # at least (2 * n + p + 1) # this figure is calculated as: # 1 raftable worker # n-1 receiver # n-1 sender # 1 mtm-sender # 1 mtm-receiver # p workers in the pool max_parallel_degree = 0 wal_level = logical # multimaster is build on top of # logical replication and will not work otherwise max_wal_senders = 10 # at least the number of nodes wal_sender_timeout = 0 default_transaction_isolation = 'repeatable read' max_replication_slots = 10 # at least the number of nodes shared_preload_libraries = 'raftable,multimaster' multimaster.workers = 10 multimaster.queue_size = 10485760 # 10mb multimaster.node_id = 1 # the 1-based index of the node in the cluster multimaster.conn_strings = 'dbname=... host=....0.0.1 port=... raftport=..., ...' # comma-separated list of connection strings multimaster.use_raftable = true multimaster.heartbeat_recv_timeout = 1000 multimaster.heartbeat_send_timeout = 250 multimaster.ignore_tables_without_pk = true multimaster.twopc_min_timeout = 2000
- Allow replication in
pg_hba.conf
.
create extension mmts;
to gain access to these functions:
mtm.get_nodes_state()
-- show status of nodes on clustermtm.get_cluster_state()
-- show whole cluster statusmtm.get_cluster_info()
-- print some debug infomtm.make_table_local(relation regclass)
-- stop replication for a given table
make -C contrib/mmts check
to run TAP-tests.make -C contrib/mmts xcheck
to run blockade tests. The blockade tests requiredocker
,blockade
, and some other packages installed, see requirements.txt for the list.