# Geo data types support

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

*   [Data types](#data-types)
    *   [Git repositories](#git-repositories)
    *   [Blobs](#blobs)
    *   [Database](#database)
*   [Limitations on replication/verification](#limitations-on-replicationverification)

# Geo data types support[](#geo-data-types-support-premium-only "Permalink")

地理数据类型是一个或多个 GitLab 功能存储相关信息所需的特定数据类别.

要使用 Geo 复制这些功能生成的数据，我们使用几种策略来访问，传输和验证它们.

## Data types[](#data-types "Permalink")

当前，我们区分三种不同的数据类型：

*   [Git repositories](#git-repositories)
*   [Blobs](#blobs)
*   [Database](#database)

请参阅下面列出的我们复制的每个功能或组件，其对应的数据类型，复制和验证方法的列表：

| Type | 功能/组件 | 复制方式 | 验证方式 |
| --- | --- | --- | --- |
| Database | PostgreSQL 中的应用程序数据 | Native | Native |
| Database | Redis | *N/A* (*1*) | *N/A* |
| Database | Elasticsearch | Native | Native |
| Database | 个人摘要 | PostgreSQL 复制 | PostgreSQL 复制 |
| Database | 项目摘要 | PostgreSQL 复制 | PostgreSQL 复制 |
| Database | SSH 公钥 | PostgreSQL 复制 | PostgreSQL 复制 |
| Git | 项目资料库 | 地理与吉塔利 | Gitaly 校验和 |
| Git | 项目 Wiki 资料库 | 地理与吉塔利 | Gitaly 校验和 |
| Git | 项目设计资料库 | 地理与吉塔利 | Gitaly 校验和 |
| Git | 用于分支项目重复数据删除的对象池 | 地理与吉塔利 | *未实现* |
| Blobs | User uploads *(filesystem)* | 带有 API 的地理位置 | *未实现* |
| Blobs | 用户上传*（对象存储）* | 具有 API /托管的地理区域（ *2* ） | *未实现* |
| Blobs | LFS 对象*（文件系统）* | 带有 API 的地理位置 | *未实现* |
| Blobs | LFS 对象*（对象存储）* | 具有 API /托管的地理区域（ *2* ） | *未实现* |
| Blobs | CI 作业工件*（文件系统）* | 带有 API 的地理位置 | *未实现* |
| Blobs | CI 作业工件*（对象存储）* | 具有 API /托管的地理区域（ *2* ） | *未实现* |
| Blobs | 归档的 CI 构建跟踪*（文件系统）* | 带有 API 的地理位置 | *未实现* |
| Blobs | 归档的 CI 构建跟踪*（对象存储）* | 具有 API /托管的地理区域（ *2* ） | *未实现* |
| Blobs | 容器注册表*（文件系统）* | 使用 API​​ / Docker API 进行地理定位 | *未实现* |
| Blobs | 容器注册表*（对象存储）* | 带有 API / Managed / Docker API 的 Geo（ *2* ） | *未实现* |
| Blobs | 程序包注册表*（文件系统）* | 带有 API 的地理位置 | *未实现* |
| Blobs | 程序包注册表*（对象存储）* | 具有 API /托管的地理区域（ *2* ） | *未实现* |

*   （ *1* ）：Redis 复制可与 Redis 前哨一起用作 HA 的一部分. 在地理节点之间不使用它.
*   （ *2* ）：对象存储复制可以通过 Geo 或您的对象存储提供者/设备本机复制功能来执行.

### Git repositories[](#git-repositories "Permalink")

一个 GitLab 实例可以具有一个或多个存储库分片. 每个分片都有一个 Gitaly 实例，该实例负责允许对本地存储的 Git 存储库进行访问和操作. 它可以在具有单个磁盘，作为单个安装点安装多个磁盘（如 RAID 阵列）或使用 LVM 的计算机上运行.

它不需要特殊的文件系统，并且可以与 NFS 或已安装的 Storage Appliance 一起使用（使用远程文件系统时可能会有性能限制）.

通过 Gitaly 自己的 gRPC API 完成通信. 有三种可能的同步方式：

*   使用常规的 Git 从一个 Geo 节点到另一个 Geo 节点的克隆/获取（具有特殊身份验证）.
*   使用存储库快照（用于第一种方法失败或存储库损坏时）.
*   从管理界面手动触发（上述两者的组合）.

每个项目最多可以有 3 个不同的存储库：

*   一个项目存储库，其中存储了源代码.
*   Wiki 存储库，用于存储 Wiki 内容.
*   一个设计库，在其中对设计工件进行索引（资产实际上在 LFS 中）.

他们都住在同一个碎片，并用共享相同的基础名称`-wiki`和`-design`用于 Wiki 以及设计资源库的情况下后缀.

### Blobs[](#blobs "Permalink")

GitLab 将文件和 Blob（例如 Issue 附件或 LFS 对象）存储到以下任一位置：

*   特定位置的文件系统.
*   [对象存储](../../object_storage.html)解决方案. 对象存储解决方案可以是：
    *   像 Amazon S3 Google Cloud Storage 一样基于云.
    *   由您托管（如 MinIO）.
    *   公开与对象存储兼容的 API 的存储设备.

当使用文件系统存储而不是对象存储时，如果使用多个服务器，则需要使用网络安装的文件系统来运行 GitLab.

关于复制和验证：

*   我们使用内部 API 请求传输文件和 Blob.
*   使用对象存储，您可以：
    *   使用云提供程序复制功能.
    *   让 GitLab 为您复制它.

### Database[](#database "Permalink")

对于不同的用例，GitLab 依赖于存储在多个数据库中的数据. PostgreSQL 是 Web 界面中用户生成的内容（例如问题内容，​​注释以及权限和凭据）的唯一事实.

PostgreSQL 还可以保存某种程度的缓存数据，例如 HTML 呈现的 Markdown，缓存的合并请求差异（也可以配置为卸载到对象存储中）.

我们使用 PostgreSQL 自己的复制功能将数据从**主**节点复制到**辅助**节点.

我们将 Redis 用作缓存存储并为我们的后台作业系统保留持久性数据. 由于这两个用例都具有同一地理节点专有的数据，因此我们不在节点之间复制它.

Elasticsearch 是一个可选数据库，可以启用高级搜索功能，例如源代码级别的改进的全局搜索以及"问题/合并请求"和讨论中用户生成的内容. 目前，Geo 不支持此功能.

## Limitations on replication/verification[](#limitations-on-replicationverification "Permalink")

下表列出了 GitLab 功能及其在**辅助**节点上的复制和验证状态.

您可以跟踪实现这些史诗/问题中缺少的项目的进度：

*   [Unreplicated Data Types](https://gitlab.com/groups/gitlab-org/-/epics/893)
*   [Verify all replicated data](https://gitlab.com/groups/gitlab-org/-/epics/1430)

**危险：**不在此列表上或"已**复制"**列中具有" **否"的**功能不会在**辅助**节点上复制. 如果不从这些功能中手动复制数据而进行故障转移，将导致数据**丢失** . 如果希望在**辅助**节点上使用这些功能或成功执行故障转移，则必须使用其他方法复制它们的数据.

| Feature | 复制（在 GitLab 版本中添加） | 已验证（在 GitLab 版本中添加） | Notes |   |
| --- | --- | --- | --- | --- |
| PostgreSQL 中的应用程序数据 | **Yes** (10.2) | **Yes** (10.2) |   |   |
| 项目资料库 | **Yes** (10.2) | **Yes** (10.7) |   |   |
| 项目 Wiki 资料库 | **Yes** (10.2) | **Yes** (10.7) |   |   |
| 项目设计资料库 | **Yes** (12.7) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/32467) |   |   |
| Uploads | **Yes** (10.2) | [No](https://gitlab.com/groups/gitlab-org/-/epics/1817) | 仅在转移时验证，或手动验证（ *1* ） |   |
| LFS 对象 | **Yes** (10.2) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/8922) | 仅在转移时验证，或手动验证（ *1* ）. 在 11.11.x 和 12.0.x（ *2* ）中的新 LFS 对象不可用. |   |
| CI 作业工件（痕迹除外） | **Yes** (10.4) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/8923) | 仅手动验证（ *1* ） |   |
| 存档的痕迹 | **Yes** (10.4) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/8923) | 仅在转移时验证，或手动验证（ *1* ） |   |
| 个人摘要 | **Yes** (10.2) | **Yes** (10.2) |   |   |
| [Versioned snippets](../../../user/snippets.html#versioned-snippets) | [No](https://gitlab.com/groups/gitlab-org/-/epics/2809) | [No](https://gitlab.com/groups/gitlab-org/-/epics/2810) |   |   |
| 项目摘要 | **Yes** (10.2) | **Yes** (10.2) |   |   |
| 用于分支项目重复数据删除的对象池 | **Yes** | No |   |   |
| [Server-side Git hooks](../../server_hooks.html) | No | No |   |   |
| [Elasticsearch integration](../../../integration/elasticsearch.html) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/1186) | No |   |   |
| [GitLab Pages](../../pages/index.html) | [No](https://gitlab.com/groups/gitlab-org/-/epics/589) | No |   |   |
| [Container Registry](../../packages/container_registry.html) | **Yes** (12.3) | No |   |   |
| [NPM Registry](../../../user/packages/npm_registry/index.html) | **Yes** (13.2) | No |   |   |
| [Maven Repository](../../../user/packages/maven_repository/index.html) | **Yes** (13.2) | No |   |   |
| [Conan Repository](../../../user/packages/conan_repository/index.html) | **Yes** (13.2) | No |   |   |
| [NuGet Repository](../../../user/packages/nuget_repository/index.html) | **Yes** (13.2) | No |   |   |
| [PyPi Repository](../../../user/packages/pypi_repository/index.html) | **Yes** (13.2) | No |   |   |
| [Composer Repository](../../../user/packages/composer_repository/index.html) | **Yes** (13.2) | No |   |   |
| [External merge request diffs](../../merge_request_diffs.html) | [No](https://gitlab.com/gitlab-org/gitlab/-/issues/33817) | No |   |   |
| [Terraform State](../../terraform_state.html) | [No](https://gitlab.com/groups/gitlab-org/-/epics/3112)(*3*) | No |   |   |
| [Vulnerability Export](../../../user/application_security/security_dashboard/#export-vulnerabilities) | [No](https://gitlab.com/groups/gitlab-org/-/epics/3111)(*3*) | No |   |   |
| 对象存储中的内容 | **Yes** (12.4) | No |   |   |

*   （ *1* ）：可以使用两个节点上的[完整性检查瑞克任务](../../raketasks/check.html)并比较它们之间的输出来手动验证[完整性](../../raketasks/check.html) .
*   （ *2* ）：GitLab 版本 11.11.x 和 12.0.x 受到[一个错误的](https://gitlab.com/gitlab-org/gitlab/-/issues/32696)影响， [该错误阻止了任何新的 LFS 对象的复制](https://gitlab.com/gitlab-org/gitlab/-/issues/32696) .
*   （ *3* ）：如果使用的是对象存储，则可以通过对象存储提供程序执行复制（如果支持）. 请参阅[带有对象存储的地理位置](object_storage.html)