Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 8a75e2c

Browse files
kvapkelvich
authored andcommitted
Update the mmts README.
1 parent b7ad327 commit 8a75e2c

File tree

1 file changed

+51
-50
lines changed

1 file changed

+51
-50
lines changed

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)