blob: 34f7709c16c3d20ea5bdb3a3a6aed0422ccb0001 [file] [log] [blame] [view]
# Gerrit multi-site plugin
This plugin allows to deploy a distributed cluster of multiple Gerrit masters
each using a separate site without sharing any storage. The alignment between
the masters happens using the replication plugin and an external message broker.
Requirements for the Gerrit masters are:
- Gerrit v2.16.5 or later
- Migrated to NoteDb
- Connected to the same message broker
- Accessible via a load balancer (e.g. HAProxy)
**NOTE**: The multi-site plugin will not start if Gerrit is not yet migrated
to NoteDb.
Supports multiple read/write masters across multiple sites across different
geographic locations. The Gerrit nodes are kept synchronized
between each other using the replication plugin and a global ref-database in
order to detect and prevent split-brains.
For more details on the overall multi-site design and roadmap, please refer
to the [multi-site plugin DESIGN.md document](DESIGN.md)
## License
This plugin is released under the same Apache 2.0 license and copyright holders
as of the Gerrit Code Review project.
## How to build
The multi-site plugin can only be built in tree mode, by cloning
Gerrit and the multi-site plugin code, and checking them out on the desired branch.
Example of cloning Gerrit and multi-site for a stable-2.16 build:
```
git clone -b stable-2.16 https://gerrit.googlesource.com/gerrit
git clone -b stable-2.16 https://gerrit.googlesource.com/plugins/multi-site
cd gerrit/plugins
ln -s ../../multi-site .
rm external_plugin_deps.bzl
ln -s multi-site/external_plugin_deps.bzl .
```
Example of building the multi-site plugin:
```
cd gerrit
bazel build plugins/multi-site
```
The multi-site.jar plugin is generated to `bazel-bin/plugins/multi-site/multi-site.jar`.
Example of testing the multi-site plugin:
```
cd gerrit
bazel test plugins/multi-site:multi_site_tests
```
**NOTE**: The multi-site tests include also the use of Docker containers for
instantiating and using a Kafka/Zookeeper broker. Make sure you have a Docker
daemon running (/var/run/docker.sock accessible) or a DOCKER_HOST pointing to
a Docker server.
## How to configure
Install the multi-site plugin into the `$GERRIT_SITE/lib` directory of all
the Gerrit servers that are part of the multi-site cluster.
Create a symbolic link from `$GERRIT_SITE/lib/multi-site.jar` into the
`$GERRIT_SITE/plugins`.
Add the multi-site module to `$GERRIT_SITE/etc/gerrit.config` as follows:
```
[gerrit]
installDbModule = com.googlesource.gerrit.plugins.multisite.GitModule
installModule = com.googlesource.gerrit.plugins.multisite.Module
```
For more details on the configuration settings, please refer to the
[multi-site configuration documentation](src/main/resources/Documentation/config.md).
You also need to setup the Git-level replication between nodes, for more details
please refer to the
[replication plugin documentation](https://gerrit.googlesource.com/plugins/replication/+/refs/heads/master/src/main/resources/Documentation/config.md).