# Geo Frequently Asked Questions

> 原文：[https://docs.gitlab.com/ee/administration/geo/replication/faq.html](https://docs.gitlab.com/ee/administration/geo/replication/faq.html)

*   [What are the minimum requirements to run Geo?](#what-are-the-minimum-requirements-to-run-geo)
*   [How does Geo know which projects to sync?](#how-does-geo-know-which-projects-to-sync)
*   [Can I use Geo in a disaster recovery situation?](#can-i-use-geo-in-a-disaster-recovery-situation)
*   [What data is replicated to a **secondary** node?](#what-data-is-replicated-to-a-secondary-node)
*   [Can I `git push` to a **secondary** node?](#can-i-git-push-to-a-secondary-node)
*   [How long does it take to have a commit replicated to a **secondary** node?](#how-long-does-it-take-to-have-a-commit-replicated-to-a-secondary-node)
*   [What if the SSH server runs at a different port?](#what-if-the-ssh-server-runs-at-a-different-port)
*   [Is this possible to set up a Docker Registry for a **secondary** node that mirrors the one on the **primary** node?](#is-this-possible-to-set-up-a-docker-registry-for-a-secondary-node-that-mirrors-the-one-on-the-primary-node)

# Geo Frequently Asked Questions[](#geo-frequently-asked-questions-premium-only "Permalink")

## What are the minimum requirements to run Geo?[](#what-are-the-minimum-requirements-to-run-geo "Permalink")

要求[在索引页面](index.html#requirements-for-running-geo)上列出

## How does Geo know which projects to sync?[](#how-does-geo-know-which-projects-to-sync "Permalink")

在每个**辅助**节点上，都有一个 GitLab 数据库的只读复制副本. **辅助**节点还具有跟踪数据库，其中存储了已同步的项目. Geo 比较这两个数据库以查找尚未跟踪的项目.

首先，此跟踪数据库为空，因此 Geo 将开始尝试从它在 GitLab 数据库中可以看到的每个项目中进行更新.

对于每个要同步的项目：

1.  Geo 将发出`git fetch geo --mirror`来从**主**节点获取最新信息. 如果没有更改，则同步将很快并快速结束. 否则，它将提取最新的提交.
2.  **辅助**节点将更新跟踪数据库，以存储它已同步项目 A，B，C 等的事实.
3.  重复直到所有项目都同步.

当有人将提交推送到**主**节点时，它将在 GitLab 数据库中生成一个事件，说明存储库已更改. **辅助**节点看到此事件，将有问题的项目标记为脏，并计划重新同步该项目.

为确保管道问题（例如，同步失败太多或丢失的作业）不会永久停止项目同步，Geo 还会定期检查跟踪数据库中是否有标记为脏的项目. 当并发同步数降到`repos_max_capacity`以下并且没有新的项目等待同步时，将进行此检查.

Geo 还具有校验和功能，可在所有对 SHA 值的 Git 引用中运行 SHA256 和. 如果**主**节点和**辅助**节点之间的引用不匹配，则**辅助**节点会将项目标记为脏项目，然后尝试重新同步. 因此，即使我们拥有一个过时的跟踪数据库，验证也应激活并找到存储库状态中的差异并重新同步.

## Can I use Geo in a disaster recovery situation?[](#can-i-use-geo-in-a-disaster-recovery-situation "Permalink")

是的，但是我们复制的内容有局限性（请参阅将[哪些数据复制到**辅助**节点？](#what-data-is-replicated-to-a-secondary-node) ）.

阅读[灾难恢复](../disaster_recovery/index.html)文档.

## What data is replicated to a **secondary** node?[](#what-data-is-replicated-to-a-secondary-node "Permalink")

当前，我们复制项目存储库，LFS 对象，生成的附件/化身以及整个数据库. 这意味着用户帐户，问题，合并请求，组，项目数据等将可用于查询.

## Can I `git push` to a **secondary** node?[](#can-i-git-push-to-a-secondary-node "Permalink")

是! [GitLab Premium](https://about.gitlab.com/pricing/#self-managed) 11.3 中[引入](https://about.gitlab.com/releases/2018/09/22/gitlab-11-3-released/)了直接推送到**辅助**节点（对于 HTTP 和 SSH，包括 Git LFS）.

## How long does it take to have a commit replicated to a **secondary** node?[](#how-long-does-it-take-to-have-a-commit-replicated-to-a-secondary-node "Permalink")

所有复制操作都是异步的，并排队等待分派. 因此，这取决于很多因素，包括流量，提交的大小，节点之间的连接，硬件等.

## What if the SSH server runs at a different port?[](#what-if-the-ssh-server-runs-at-a-different-port "Permalink")

很好 我们使用 HTTP 来获取从**主**节点到所有**辅助**节点的存储库更改.

## Is this possible to set up a Docker Registry for a **secondary** node that mirrors the one on the **primary** node?[](#is-this-possible-to-set-up-a-docker-registry-for-a-secondary-node-that-mirrors-the-one-on-the-primary-node "Permalink")

是. 有关[**辅助**节点，](docker_registry.html)请参见[Docker Registry](docker_registry.html) .