Skip to content

Commit 03f0a1b

Browse files
committed
Update the mmts README.
1 parent 0cc01e3 commit 03f0a1b

File tree

1 file changed

+51
-50
lines changed

1 file changed

+51
-50
lines changed

contrib/mmts/README.md

Lines changed: 51 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,54 @@
1-
# Postgres Multimaster
1+
# `mmts`
2+
3+
An implementation of synchronous multi-master replication based on **logical decoding** and **xtm**.
4+
5+
## Usage
6+
7+
1. Install `contrib/raftable` and `contrib/mmts` on each instance.
8+
1. Add these required options to the `postgresql.conf` of each instance in the cluster.
9+
```sh
10+
max_prepared_transactions = 200 # should be > 0, because all
11+
# transactions are implicitly two-phase
12+
max_connections = 200
13+
max_worker_processes = 100 # at least (2 * n + p + 1)
14+
# this figure is calculated as:
15+
# 1 raftable worker
16+
# n-1 receiver
17+
# n-1 sender
18+
# 1 mtm-sender
19+
# 1 mtm-receiver
20+
# p workers in the pool
21+
max_parallel_degree = 0
22+
wal_level = logical # multimaster is build on top of
23+
# logical replication and will not work otherwise
24+
max_wal_senders = 10 # at least the number of nodes
25+
wal_sender_timeout = 0
26+
default_transaction_isolation = 'repeatable read'
27+
max_replication_slots = 10 # at least the number of nodes
28+
shared_preload_libraries = 'raftable,multimaster'
29+
multimaster.workers = 10
30+
multimaster.queue_size = 10485760 # 10mb
31+
multimaster.node_id = 1 # the 1-based index of the node in the cluster
32+
multimaster.conn_strings = 'dbname=... host=....0.0.1 port=... raftport=..., ...'
33+
# comma-separated list of connection strings
34+
multimaster.use_raftable = true
35+
multimaster.heartbeat_recv_timeout = 1000
36+
multimaster.heartbeat_send_timeout = 250
37+
multimaster.ignore_tables_without_pk = true
38+
multimaster.twopc_min_timeout = 2000
39+
```
40+
1. Allow replication in `pg_hba.conf`.
41+
42+
## Status functions
43+
44+
`create extension mmts;` to gain access to these functions:
45+
46+
* `mtm.get_nodes_state()` -- show status of nodes on cluster
47+
* `mtm.get_cluster_state()` -- show whole cluster status
48+
* `mtm.get_cluster_info()` -- print some debug info
49+
* `mtm.make_table_local(relation regclass)` -- stop replication for a given table
250

351
## Testing
452

5-
The testing process involves multiple modules that perform different tasks. The
6-
modules and their APIs are listed below.
7-
8-
### Modules
9-
10-
#### `combineaux`
11-
12-
Governs the whole testing process. Runs different workloads during different
13-
troubles.
14-
15-
#### `stresseaux`
16-
17-
Puts workloads against the database. Writes logs that are later used by
18-
`valideaux`.
19-
20-
* `start(id, workload, cluster)` - starts a `workload` against the `cluster`
21-
and call it `id`.
22-
* `stop(id)` - stops a previously started workload called `id`.
23-
24-
#### `starteaux`
25-
26-
Manages the database nodes.
27-
28-
* `deploy(driver, ...)` - deploys a cluster using the specified `driver` and
29-
other parameters specific to that driver. Returns a `cluster` instance that is
30-
used in other methods.
31-
* `cluster->up(id)` - adds a node named `id` to the `cluster`.
32-
* `cluster->down(id)` - removes a node named `id` from the `cluster`.
33-
* `cluster->drop(src, dst, ratio)` - drop `ratio` packets flowing from node
34-
`src` to node `dst`.
35-
* `cluster->delay(src, dst, msec)` - delay packets flowing from node `src` to
36-
node `dst` by `msec` milliseconds.
37-
38-
#### `troubleaux`
39-
40-
This is the troublemaker that messes with the network, nodes and time.
41-
42-
* `cause(cluster, trouble, ...)` - causes the specified `trouble` in the
43-
specified `cluster` with some trouble-specific parameters.
44-
* `fix(cluster)` - fixes all troubles caused in the `cluster`.
45-
46-
#### `valideaux`
47-
48-
Validates the logs of stresseaux.
49-
50-
#### `reporteaux`
51-
52-
Generates reports on the test results. This is usually a table that with
53-
`trouble` vs `workload` axes.
53+
* `make -C contrib/mmts check` to run TAP-tests.
54+
* `make -C contrib/mmts xcheck` to run blockade tests. The blockade tests require `docker`, `blockade`, and some other packages installed, see [requirements.txt](tests2/requirements.txt) for the list.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy