@@ -395,7 +415,7 @@ There is an [issue where support is being discussed](https://gitlab.com/gitlab-o
...
@@ -395,7 +415,7 @@ There is an [issue where support is being discussed](https://gitlab.com/gitlab-o
gitlab-ctl restart postgresql
gitlab-ctl restart postgresql
```
```
### Step 3. Initiate the replication process
#### Step 3. Initiate the replication process
Below we provide a script that connects the database on the **secondary** node to
Below we provide a script that connects the database on the **secondary** node to
the database on the **primary** node, replicates the database, and creates the
the database on the **primary** node, replicates the database, and creates the
...
@@ -461,37 +481,37 @@ data before running `pg_basebackup`.
...
@@ -461,37 +481,37 @@ data before running `pg_basebackup`.
The replication process is now complete.
The replication process is now complete.
## PgBouncer support (optional)
### PgBouncer support (optional)
[PgBouncer](https://www.pgbouncer.org/) may be used with GitLab Geo to pool
[PgBouncer](https://www.pgbouncer.org/) may be used with GitLab Geo to pool
PostgreSQL connections. We recommend using PgBouncer if you use GitLab in a
PostgreSQL connections, which can improve performance even when using in a
high-availability configuration with a cluster of nodes supporting a Geo
single instance installation.
**primary** site and two other clusters of nodes supporting a Geo **secondary** site.
One for the main database and the other for the tracking database. For more information,
We recommend using PgBouncer if you use GitLab in a highly available
configuration with a cluster of nodes supporting a Geo **primary** site and
two other clusters of nodes supporting a Geo **secondary** site. One for the
main database and the other for the tracking database. For more information,
see [High Availability with Omnibus GitLab](../../postgresql/replication_and_failover.md).
see [High Availability with Omnibus GitLab](../../postgresql/replication_and_failover.md).
## Patroni support
## Multi-node database replication
Support for Patroni is intended to replace `repmgr` as a
In GitLab 14.0, Patroni replaced `repmgr` as the supported
[highly available PostgreSQL solution](../../postgresql/replication_and_failover.md)
[highly available PostgreSQL solution](../../postgresql/replication_and_failover.md).
on the primary node, but it can also be used for PostgreSQL HA on a secondary
site. Similar to `repmgr`, using Patroni on a secondary node is optional.
Starting with GitLab 13.5, Patroni is available for _experimental_ use with Geo
NOTE:
primary and secondary sites. Due to its experimental nature, Patroni support is
If you still haven't [migrated from repmgr to Patroni](#migrating-from-repmgr-to-patroni) you're highly advised to do so.
subject to change without notice.
This experimental implementation has the following limitations:
### Patroni support
- Whenever `gitlab-ctl reconfigure` runs on a Patroni Leader instance, there's a
Patroni is the official replication management solution for Geo. It
chance of the node be demoted due to the required short-time restart. To
can be used to build a highly available cluster on the **primary** and a **secondary** Geo site.
avoid this, you can pause auto-failover by running `gitlab-ctl patroni pause`.
Using Patroni on a **secondary** site is optional and you don't have to use the same amount of
After a reconfigure, it resumes on its own.
nodes on each Geo site.
For instructions about how to set up Patroni on the primary site, see the
For instructions about how to set up Patroni on the primary site, see the
[PostgreSQL replication and failover with Omnibus GitLab](../../postgresql/replication_and_failover.md#patroni) page.
[PostgreSQL replication and failover with Omnibus GitLab](../../postgresql/replication_and_failover.md#patroni) page.
### Configuring Patroni cluster for a Geo secondary site
#### Configuring Patroni cluster for a Geo secondary site
In a Geo secondary site, the main PostgreSQL database is a read-only replica of the primary site’s PostgreSQL database.
In a Geo secondary site, the main PostgreSQL database is a read-only replica of the primary site’s PostgreSQL database.
...
@@ -503,7 +523,7 @@ configuration for the secondary site. The internal load balancer provides a sing
...
@@ -503,7 +523,7 @@ configuration for the secondary site. The internal load balancer provides a sing
endpoint for connecting to the Patroni cluster's leader whenever a new leader is
endpoint for connecting to the Patroni cluster's leader whenever a new leader is
elected. Be sure to use [password credentials](../../postgresql/replication_and_failover.md#database-authorization-for-patroni) and other database best practices.
elected. Be sure to use [password credentials](../../postgresql/replication_and_failover.md#database-authorization-for-patroni) and other database best practices.
#### Step 1. Configure Patroni permanent replication slot on the primary site
##### Step 1. Configure Patroni permanent replication slot on the primary site
To set up database replication with Patroni on a secondary node, we need to
To set up database replication with Patroni on a secondary node, we need to
configure a _permanent replication slot_ on the primary node's Patroni cluster,
configure a _permanent replication slot_ on the primary node's Patroni cluster,
patroni['postgresql']['max_wal_senders']=8# Use double of the amount of patroni/reserved slots (3 patronis + 1 reserved slot for a Geo secondary).
patroni['postgresql']['max_wal_senders']=8# Use double of the amount of patroni/reserved slots (3 patronis + 1 reserved slot for a Geo secondary).
patroni['postgresql']['max_replication_slots']=8# Use double of the amount of patroni/reserved slots (3 patronis + 1 reserved slot for a Geo secondary).
patroni['postgresql']['max_replication_slots']=8# Use double of the amount of patroni/reserved slots (3 patronis + 1 reserved slot for a Geo secondary).
'PATRONI_SECONDARY1_IP/32','PATRONI_SECONDARY2_IP/32','PATRONI_SECONDARY3_IP/32','PATRONI_SECONDARY_PGBOUNCER/32'# We list all secondary instances as they can all become a Standby Leader
postgresql['listen_address']='0.0.0.0'# You can use a public or VPC address here instead
```
```
1. Reconfigure GitLab for the changes to take effect.
1. Reconfigure GitLab for the changes to take effect.
...
@@ -708,28 +737,6 @@ For each Patroni instance on the secondary site:
...
@@ -708,28 +737,6 @@ For each Patroni instance on the secondary site:
gitlab-ctl reconfigure
gitlab-ctl reconfigure
```
```
1. Remove the PostgreSQL data directory:
WARNING:
If you are converting a secondary site to a Patroni Cluster, you must skip
this step on the PostgreSQL instance.
```shell
rm-rf /var/opt/gitlab/postgresql/data
```
1. Edit `/etc/gitlab/gitlab.rb` to enable Patroni:
```ruby
patroni['enable']=true
```
1. Reconfigure GitLab for the changes to take effect:
```shell
gitlab-ctl reconfigure
```
### Migrating from repmgr to Patroni
### Migrating from repmgr to Patroni
1. Before migrating, it is recommended that there is no replication lag between the primary and secondary sites and that replication is paused. In GitLab 13.2 and later, you can pause and resume replication with `gitlab-ctl geo-replication-pause` and `gitlab-ctl geo-replication-resume` on a Geo secondary database node.
1. Before migrating, it is recommended that there is no replication lag between the primary and secondary sites and that replication is paused. In GitLab 13.2 and later, you can pause and resume replication with `gitlab-ctl geo-replication-pause` and `gitlab-ctl geo-replication-resume` on a Geo secondary database node.