blob: 246df883b6a2d4fc0b2ee4655ebb69432a0b4f18 [file] [log] [blame] [view]
This plugin allows having multiple Gerrit masters to be deployed across
various sites without having to share any storage. The alignment between
the masters happens using the replication plugin and an external message
broker.
This plugin allows Gerrit to publish and to consume events over a Kafka
message broker for aligning with the other masters over different sites.
The masters must be:
* migrated to NoteDb
* connected to the same message broker
* behind a load balancer (e.g., HAProxy)
Currently, the mode supported is one primary read/write master and multiple
read-only masters but eventually the plan is to support `n` read/write masters.
The read/write master is handling any traffic while the
read-only masters are serving the Gerrit GUI assets, the HTTP GET REST API and
the git-upload-packs. They read-only masters are kept updated to be always
ready to become a read/write master.
The areas of alignment between the masters are:
1. caches
2. secondary indexes
3. stream-events
4. web sessions
This plugin is focussing on only the points 1. to 3., while other plugins can be
used to manage the replication of 4. across sites.
This plugin needs to be installed in all the masters, and it will take care of
keeping 1., 2. and 3. aligned across all the nodes.
#### Caches
Every time a cache eviction occurs in one of the masters, the eviction will be
published to the message broker so that other masters can consume the message
and evict the potential stale entries.
#### Secondary indexes
Every time the secondary index is modified in one of the masters, e.g., a change
is added, updated or removed from the index, an indexing event is published to the
message broker so that the other masters can consume the message and keep their indexes
updated accordingly. This way, all indexes across masters across sites are kept synchronized.
#### Stream events
Every time a stream event occurs in one of the masters (see [more events info]
(https://gerrit-review.googlesource.com/Documentation/cmd-stream-events.html#events)),
the event is published to the message broker so that other masters can consume it and
re-play it for all the connected SSH sessions that are listening to stream events.
This way, the output of the stream-events command is the same, no matter which masters a client
is connected to.
## Setup
Prerequisites:
* Kafka message broker deployed in a multi-master setup across all the sites
For the masters:
* Install and configure @PLUGIN@ plugin
Here is an example of minimal @PLUGIN@.config:
For all the masters on all the sites:
```
[kafka]
bootstrapServers = kafka-1:9092,kafka-2:9092,kafka-3:9092
eventTopic = gerrit_index
[kafka "publisher"]
enable = true
indexEventTopic = gerrit_index
streamEventTopic = gerrit_stream
[kafka "subscriber"]
enable = true
pollingIntervalMs = 1000
autoCommitIntervalMs = 1000
```
For further information and supported options, refer to [config](config.md)
documentation.