debian-mirror-gitlab/doc/administration/geo/replication/configuration.md

406 lines
16 KiB
Markdown
Raw Normal View History

2020-06-23 00:09:42 +05:30
---
2022-07-23 23:45:48 +05:30
stage: Systems
2020-06-23 00:09:42 +05:30
group: Geo
2022-11-25 23:54:43 +05:30
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
2020-06-23 00:09:42 +05:30
type: howto
---
2021-03-11 19:13:27 +05:30
# Geo configuration **(PREMIUM SELF)**
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
## Configuring a new **secondary** site
2019-07-31 22:56:46 +05:30
2021-02-22 17:27:13 +05:30
NOTE:
2021-10-27 15:23:28 +05:30
This is the final step in setting up a **secondary** Geo site. Stages of the
2019-07-31 22:56:46 +05:30
setup process must be completed in the documented order.
2023-01-13 00:05:48 +05:30
If not, [complete all prior stages](../setup/index.md#using-omnibus-gitlab) before proceeding.
2022-08-13 15:12:31 +05:30
Make sure you [set up the database replication](../setup/database.md), and [configured fast lookup of authorized SSH keys](../../operations/fast_ssh_key_lookup.md) in **both primary and secondary sites**.
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
The basic steps of configuring a **secondary** site are to:
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
- Replicate required configurations between the **primary** site and the **secondary** sites.
- Configure a tracking database on each **secondary** site.
- Start GitLab on each **secondary** site.
2019-07-31 22:56:46 +05:30
You are encouraged to first read through all the steps before executing them
in your testing/production environment.
2021-02-22 17:27:13 +05:30
NOTE:
2021-10-27 15:23:28 +05:30
**Do not** set up any custom authentication for the **secondary** sites. This is handled by the **primary** site.
2019-09-30 21:07:59 +05:30
Any change that requires access to the **Admin Area** needs to be done in the
2021-10-27 15:23:28 +05:30
**primary** site because the **secondary** site is a read-only replica.
2019-07-31 22:56:46 +05:30
### Step 1. Manually replicate secret GitLab values
GitLab stores a number of secret values in the `/etc/gitlab/gitlab-secrets.json`
2021-10-27 15:23:28 +05:30
file which *must* be the same on all of a site's nodes. Until there is
a means of automatically replicating these between sites (see [issue #3789](https://gitlab.com/gitlab-org/gitlab/-/issues/3789)),
they must be manually replicated to **all nodes of the secondary site**.
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. SSH into a **Rails node on your primary** site, and execute the command below:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
sudo cat /etc/gitlab/gitlab-secrets.json
```
2019-07-31 22:56:46 +05:30
2021-06-08 01:23:25 +05:30
This displays the secrets that need to be replicated, in JSON format.
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. SSH **into each node on your secondary Geo site** and login as the `root` user:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
sudo -i
```
2019-07-31 22:56:46 +05:30
1. Make a backup of any existing secrets:
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
mv /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.`date +%F`
```
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. Copy `/etc/gitlab/gitlab-secrets.json` from the **Rails node on your primary** site to **each node on your secondary** site, or
2019-07-31 22:56:46 +05:30
copy-and-paste the file contents between nodes:
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
sudo editor /etc/gitlab/gitlab-secrets.json
2019-07-31 22:56:46 +05:30
2019-09-30 21:07:59 +05:30
# paste the output of the `cat` command you ran on the primary
# save and exit
```
2019-07-31 22:56:46 +05:30
1. Ensure the file permissions are correct:
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
chown root:root /etc/gitlab/gitlab-secrets.json
chmod 0600 /etc/gitlab/gitlab-secrets.json
```
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. Reconfigure **each Rails, Sidekiq and Gitaly nodes on your secondary** site for the change to take effect:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
gitlab-ctl reconfigure
gitlab-ctl restart
```
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
### Step 2. Manually replicate the **primary** site's SSH host keys
2019-07-31 22:56:46 +05:30
GitLab integrates with the system-installed SSH daemon, designating a user
2019-12-21 20:55:43 +05:30
(typically named `git`) through which all access requests are handled.
2019-07-31 22:56:46 +05:30
2020-04-22 19:07:51 +05:30
In a [Disaster Recovery](../disaster_recovery/index.md) situation, GitLab system
2021-10-27 15:23:28 +05:30
administrators promote a **secondary** site to the **primary** site. DNS records for the
**primary** domain should also be updated to point to the new **primary** site
(previously a **secondary** site). Doing so avoids the need to update Git remotes and API URLs.
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
This causes all SSH requests to the newly promoted **primary** site to
2019-07-31 22:56:46 +05:30
fail due to SSH host key mismatch. To prevent this, the primary SSH host
2021-10-27 15:23:28 +05:30
keys must be manually replicated to the **secondary** site.
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. SSH into **each node on your secondary** site and login as the `root` user:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
sudo -i
```
2019-07-31 22:56:46 +05:30
1. Make a backup of any existing SSH host keys:
2020-03-13 15:44:24 +05:30
```shell
2023-03-17 16:20:25 +05:30
find /etc/ssh -iname 'ssh_host_*' -exec cp {} {}.backup.`date +%F` \;
2019-09-30 21:07:59 +05:30
```
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. Copy OpenSSH host keys from the **primary** site:
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
If you can access one of the **nodes on your primary** site serving SSH traffic (usually, the main GitLab Rails application nodes) using the **root** user:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2021-10-27 15:23:28 +05:30
# Run this from the secondary site, change `<primary_site_fqdn>` for the IP or FQDN of the server
2019-09-30 21:07:59 +05:30
scp root@<primary_node_fqdn>:/etc/ssh/ssh_host_*_key* /etc/ssh
```
2019-07-31 22:56:46 +05:30
2020-04-08 14:13:33 +05:30
If you only have access through a user with `sudo` privileges:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2021-10-27 15:23:28 +05:30
# Run this from the node on your primary site:
2019-09-30 21:07:59 +05:30
sudo tar --transform 's/.*\///g' -zcvf ~/geo-host-key.tar.gz /etc/ssh/ssh_host_*_key*
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
# Run this on each node on your secondary site:
scp <user_with_sudo>@<primary_site_fqdn>:geo-host-key.tar.gz .
2019-09-30 21:07:59 +05:30
tar zxvf ~/geo-host-key.tar.gz -C /etc/ssh
```
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. On **each node on your secondary** site, ensure the file permissions are correct:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
chown root:root /etc/ssh/ssh_host_*_key*
2022-07-16 23:28:13 +05:30
chmod 0600 /etc/ssh/ssh_host_*_key
2019-09-30 21:07:59 +05:30
```
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. To verify key fingerprint matches, execute the following command on both primary and secondary nodes on each site:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
for file in /etc/ssh/ssh_host_*_key; do ssh-keygen -lf $file; done
```
2019-07-31 22:56:46 +05:30
2019-09-30 21:07:59 +05:30
You should get an output similar to this one and they should be identical on both nodes:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
1024 SHA256:FEZX2jQa2bcsd/fn/uxBzxhKdx4Imc4raXrHwsbtP0M root@serverhostname (DSA)
256 SHA256:uw98R35Uf+fYEQ/UnJD9Br4NXUFPv7JAUln5uHlgSeY root@serverhostname (ECDSA)
256 SHA256:sqOUWcraZQKd89y/QQv/iynPTOGQxcOTIXU/LsoPmnM root@serverhostname (ED25519)
2048 SHA256:qwa+rgir2Oy86QI+PZi/QVR+MSmrdrpsuH7YyKknC+s root@serverhostname (RSA)
```
2019-07-31 22:56:46 +05:30
1. Verify that you have the correct public keys for the existing private keys:
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
# This will print the fingerprint for private keys:
for file in /etc/ssh/ssh_host_*_key; do ssh-keygen -lf $file; done
2019-07-31 22:56:46 +05:30
2019-09-30 21:07:59 +05:30
# This will print the fingerprint for public keys:
for file in /etc/ssh/ssh_host_*_key.pub; do ssh-keygen -lf $file; done
```
2019-07-31 22:56:46 +05:30
2021-02-22 17:27:13 +05:30
NOTE:
2019-09-30 21:07:59 +05:30
The output for private keys and public keys command should generate the same fingerprint.
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. Restart `sshd` on **each node on your secondary** site:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
# Debian or Ubuntu installations
sudo service ssh reload
2019-07-31 22:56:46 +05:30
2019-09-30 21:07:59 +05:30
# CentOS installations
sudo service sshd reload
```
2019-07-31 22:56:46 +05:30
2021-03-08 18:12:59 +05:30
1. Verify SSH is still functional.
SSH into your GitLab **secondary** server in a new terminal. If you are unable to connect,
verify the permissions are correct according to the previous steps.
2021-10-27 15:23:28 +05:30
### Step 3. Add the **secondary** site
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. SSH into **each Rails and Sidekiq node on your secondary** site and login as root:
2019-12-21 20:55:43 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-12-21 20:55:43 +05:30
sudo -i
```
2021-10-27 15:23:28 +05:30
1. Edit `/etc/gitlab/gitlab.rb` and add a **unique** name for your site. You need this in the next steps:
2019-12-21 20:55:43 +05:30
```ruby
2021-10-27 15:23:28 +05:30
##
## The unique identifier for the Geo site. See
## https://docs.gitlab.com/ee/user/admin_area/geo_nodes.html#common-settings
##
gitlab_rails['geo_node_name'] = '<site_name_here>'
2019-12-21 20:55:43 +05:30
```
2021-10-27 15:23:28 +05:30
1. Reconfigure **each Rails and Sidekiq node on your secondary** site for the change to take effect:
2019-12-21 20:55:43 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-12-21 20:55:43 +05:30
gitlab-ctl reconfigure
```
2022-03-02 08:16:31 +05:30
1. Navigate to the Primary Node GitLab Instance:
2022-10-11 01:57:18 +05:30
1. On the top bar, select **Main menu > Admin**.
2022-03-02 08:16:31 +05:30
1. On the left sidebar, select **Geo > Sites**.
1. Select **Add site**.
2023-05-27 22:25:52 +05:30
![Add secondary site](img/adding_a_secondary_v15_8.png)
1. In **Name**, enter the value for `gitlab_rails['geo_node_name']` in
`/etc/gitlab/gitlab.rb`. These values must always match **exactly**, character
2019-12-26 22:10:19 +05:30
for character.
2023-05-27 22:25:52 +05:30
1. In **External URL**, enter the value for `external_url` in `/etc/gitlab/gitlab.rb`. These
2019-12-26 22:10:19 +05:30
values must always match, but it doesn't matter if one ends with a `/` and
the other doesn't.
2023-05-27 22:25:52 +05:30
1. Optional. In **Internal URL (optional)**, enter an internal URL for the primary site.
1. Optional. Select which groups or storage shards should be replicated by the
**secondary** site. Leave blank to replicate all. For more information, see
2019-07-31 22:56:46 +05:30
[selective synchronization](#selective-synchronization).
2022-03-02 08:16:31 +05:30
1. Select **Save changes** to add the **secondary** site.
2021-10-27 15:23:28 +05:30
1. SSH into **each Rails, and Sidekiq node on your secondary** site and restart the services:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
gitlab-ctl restart
```
2019-07-31 22:56:46 +05:30
2022-10-11 01:57:18 +05:30
Check if there are any common issues with your Geo setup by running:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
gitlab-rake gitlab:geo:check
```
2019-07-31 22:56:46 +05:30
2022-10-11 01:57:18 +05:30
If any of the checks fail, check the [troubleshooting documentation](troubleshooting.md).
2021-10-27 15:23:28 +05:30
1. SSH into a **Rails or Sidekiq server on your primary** site and login as root to verify the
2022-10-11 01:57:18 +05:30
**secondary** site is reachable or there are any common issues with your Geo setup:
2019-07-31 22:56:46 +05:30
2020-03-13 15:44:24 +05:30
```shell
2019-09-30 21:07:59 +05:30
gitlab-rake gitlab:geo:check
```
2019-07-31 22:56:46 +05:30
2022-10-11 01:57:18 +05:30
If any of the checks fail, check the [troubleshooting documentation](troubleshooting.md).
2023-01-13 00:05:48 +05:30
After the **secondary** site is added to the Geo administration page and restarted,
the site automatically starts replicating missing data from the **primary** site
in a process known as **backfill**.
2021-10-27 15:23:28 +05:30
Meanwhile, the **primary** site starts to notify each **secondary** site of any changes, so
that the **secondary** site can act on those notifications immediately.
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
Be sure the _secondary_ site is running and accessible. You can sign in to the
_secondary_ site with the same credentials as were used with the _primary_ site.
2019-07-31 22:56:46 +05:30
2022-07-16 23:28:13 +05:30
### Step 4. (Optional) Using custom certificates
2019-07-31 22:56:46 +05:30
2022-07-16 23:28:13 +05:30
You can safely skip this step if:
2019-07-31 22:56:46 +05:30
2022-07-16 23:28:13 +05:30
- Your **primary** site uses a public CA-issued HTTPS certificate.
- Your **primary** site only connects to external services with CA-issued (not self-signed) HTTPS certificates.
#### Custom or self-signed certificate for inbound connections
If your GitLab Geo **primary** site uses a custom or [self-signed certificate to secure inbound HTTPS connections](https://docs.gitlab.com/omnibus/settings/ssl.html#install-custom-public-certificates), this certificate can either be single-domain certificate or multi-domain.
Install the correct certificate based on your certificate type:
- **Multi-domain certificate** that includes both primary and secondary site domains: Install the certificate at `/etc/gitlab/ssl` on all **Rails, Sidekiq, and Gitaly** nodes in the **secondary** site.
- **Single-domain certificate** where the certificates are specific to each Geo site domain: Generate a valid certificate for your **secondary** site's domain and install it at `/etc/gitlab/ssl` per [these instructions](https://docs.gitlab.com/omnibus/settings/ssl.html#install-custom-public-certificates) on all **Rails, Sidekiq, and Gitaly** nodes in the **secondary** site.
2023-03-04 22:38:38 +05:30
#### Connecting to external services that use custom certificates
2022-07-16 23:28:13 +05:30
A copy of the self-signed certificate for the external service needs to be added to the trust store on all the **primary** site's nodes that require access to the service.
For the **secondary** site to be able to access the same external services, these certificates *must* be added to the **secondary** site's trust store.
If your **primary** site is using a [custom or self-signed certificate for inbound HTTPS connections](#custom-or-self-signed-certificate-for-inbound-connections), the **primary** site's certificate needs to be added to the **secondary** site's trust store:
1. SSH into each **Rails, Sidekiq, and Gitaly node on your secondary** site and login as root:
```shell
sudo -i
```
1. Copy the trusted certs from the **primary** site:
If you can access one of the nodes on your **primary** site serving SSH traffic using the root user:
```shell
scp root@<primary_site_node_fqdn>:/etc/gitlab/trusted-certs/* /etc/gitlab/trusted-certs
```
If you only have access through a user with sudo privileges:
```shell
# Run this from the node on your primary site:
sudo tar --transform 's/.*\///g' -zcvf ~/geo-trusted-certs.tar.gz /etc/gitlab/trusted-certs/*
# Run this on each node on your secondary site:
scp <user_with_sudo>@<primary_site_node_fqdn>:geo-trusted-certs.tar.gz .
tar zxvf ~/geo-trusted-certs.tar.gz -C /etc/gitlab/trusted-certs
```
1. Reconfigure each updated **Rails, Sidekiq, and Gitaly node in your secondary** site:
```shell
sudo gitlab-ctl reconfigure
```
2019-07-31 22:56:46 +05:30
2023-06-20 00:43:36 +05:30
### Step 5. Enable Git access over HTTP/HTTPS and SSH
2019-07-31 22:56:46 +05:30
Geo synchronizes repositories over HTTP/HTTPS, and therefore requires this clone
2021-10-27 15:23:28 +05:30
method to be enabled. This is enabled by default, but if converting an existing site to Geo it should be checked:
2021-01-29 00:20:46 +05:30
2021-10-27 15:23:28 +05:30
On the **primary** site:
2021-09-04 01:27:46 +05:30
2022-10-11 01:57:18 +05:30
1. On the top bar, select **Main menu > Admin**.
2021-09-04 01:27:46 +05:30
1. On the left sidebar, select **Settings > General**.
1. Expand **Visibility and access controls**.
2023-06-20 00:43:36 +05:30
1. If using Git over SSH, then:
1. Ensure "Enabled Git access protocols" is set to "Both SSH and HTTP(S)".
1. Follow [Fast lookup of authorized SSH keys in the database](../../operations/fast_ssh_key_lookup.md) on both primary and secondary sites.
1. If not using Git over SSH, then set "Enabled Git access protocols" to "Only HTTP(S)".
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
### Step 6. Verify proper functioning of the **secondary** site
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
You can sign in to the **secondary** site with the same credentials you used with
the **primary** site. After you sign in:
2019-07-31 22:56:46 +05:30
2022-10-11 01:57:18 +05:30
1. On the top bar, select **Main menu > Admin**.
2021-10-27 15:23:28 +05:30
1. On the left sidebar, select **Geo > Sites**.
1. Verify that it's correctly identified as a **secondary** Geo site, and that
2021-09-04 01:27:46 +05:30
Geo is enabled.
2019-07-31 22:56:46 +05:30
2022-08-13 15:12:31 +05:30
The initial replication may take some time. The status of the site or the backfill may still in progress. You
2021-10-27 15:23:28 +05:30
can monitor the synchronization process on each Geo site from the **primary**
site's **Geo Sites** dashboard in your browser.
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
![Geo dashboard](img/geo_dashboard_v14_0.png)
2019-07-31 22:56:46 +05:30
If your installation isn't working properly, check the
2019-10-12 21:52:04 +05:30
[troubleshooting document](troubleshooting.md).
2019-07-31 22:56:46 +05:30
The two most obvious issues that can become apparent in the dashboard are:
1. Database replication not working well.
1. Instance to instance notification not working. In that case, it can be
something of the following:
2019-09-30 21:07:59 +05:30
- You are using a custom certificate or custom CA (see the [troubleshooting document](troubleshooting.md)).
- The instance is firewalled (check your firewall rules).
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
Disabling a **secondary** site stops the synchronization process.
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
If `git_data_dirs` is customized on the **primary** site for multiple
repository shards you must duplicate the same configuration on each **secondary** site.
2019-07-31 22:56:46 +05:30
2021-06-08 01:23:25 +05:30
Point your users to the [Using a Geo Site guide](usage.md).
2019-07-31 22:56:46 +05:30
Currently, this is what is synced:
- Git repositories.
- Wikis.
- LFS objects.
- Issues, merge requests, snippets, and comment attachments.
- Users, groups, and project avatars.
## Selective synchronization
2021-03-11 19:13:27 +05:30
Geo supports selective synchronization, which allows administrators to choose
2021-10-27 15:23:28 +05:30
which projects should be synchronized by **secondary** sites.
2019-07-31 22:56:46 +05:30
A subset of projects can be chosen, either by group or by storage shard. The
former is ideal for replicating data belonging to a subset of users, while the
latter is more suited to progressively rolling out Geo to a large GitLab
instance.
2023-05-27 22:25:52 +05:30
NOTE:
Geo's synchronization logic is outlined in the [documentation](../index.md). Both the solution and the documentation is subject to change from time to time. You must independently determine your legal obligations in regard to privacy and cybersecurity laws, and applicable trade control law on an ongoing basis.
2023-04-23 21:23:45 +05:30
Selective synchronization:
2019-07-31 22:56:46 +05:30
2021-10-27 15:23:28 +05:30
1. Does not restrict permissions from **secondary** sites.
1. Does not hide project metadata from **secondary** sites.
2019-07-31 22:56:46 +05:30
- Since Geo currently relies on PostgreSQL replication, all project metadata
2021-10-27 15:23:28 +05:30
gets replicated to **secondary** sites, but repositories that have not been
2021-06-08 01:23:25 +05:30
selected are empty.
2019-07-31 22:56:46 +05:30
1. Does not reduce the number of events generated for the Geo event log.
2021-10-27 15:23:28 +05:30
- The **primary** site generates events as long as any **secondary** sites are present.
Selective synchronization restrictions are implemented on the **secondary** sites,
not the **primary** site.
2019-07-31 22:56:46 +05:30
2020-05-24 23:13:21 +05:30
### Git operations on unreplicated repositories
2020-04-22 19:07:51 +05:30
2020-05-24 23:13:21 +05:30
> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/2562) in GitLab 12.10 for HTTP(S) and in GitLab 13.0 for SSH.
2020-04-22 19:07:51 +05:30
2020-05-24 23:13:21 +05:30
Git clone, pull, and push operations over HTTP(S) and SSH are supported for repositories that
2021-10-27 15:23:28 +05:30
exist on the **primary** site but not on **secondary** sites. This situation can occur
2020-04-22 19:07:51 +05:30
when:
- Selective synchronization does not include the project attached to the repository.
- The repository is actively being replicated but has not completed yet.
2019-07-31 22:56:46 +05:30
## Upgrading Geo
2022-07-23 23:45:48 +05:30
See the [upgrading the Geo sites document](upgrading_the_geo_sites.md).
2019-07-31 22:56:46 +05:30
## Troubleshooting
See the [troubleshooting document](troubleshooting.md).