{{< details >}}

  • Tier: 专业版,旗舰版
  • Offering: 私有化部署

{{< /details >}}

极狐GitLab 数据类型是一种特定类别的数据,极狐GitLab 的一个或多个功能需要它来存储相关信息。

为了通过 Geo 复制这些功能产生的数据,我们使用多种策略来访问、传输和验证它们。

数据类型

我们区分以下不同的数据类型:

查看下面的列表,我们复制的每个功能或组件、其对应的数据类型、复制和验证方法:

类型 功能 / 组件 复制方法 验证方法
Database PostgreSQL 中的应用程序数据 Native Native
Database Redis Not applicable 1 Not applicable
Database Elasticsearch Native Native
Database SSH public keys PostgreSQL Replication PostgreSQL Replication
Git 项目仓库 Geo with Gitaly Gitaly Checksum
Git 项目 wiki 仓库 Geo with Gitaly Gitaly Checksum
Git 项目设计仓库 Geo with Gitaly Gitaly Checksum
Git 项目 Snippets Geo with Gitaly Gitaly Checksum
Git 个人 Snippets Geo with Gitaly Gitaly Checksum
Git 群组 wiki 仓库 Geo with Gitaly Gitaly Checksum
Blob 用户上传 (file system) Geo with API SHA256 checksum
Blob 用户上传 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob LFS objects (file system) Geo with API SHA256 checksum
Blob LFS objects (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob CI 作业产物 (file system) Geo with API SHA256 checksum
Blob CI 作业产物 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob 归档 CI 构建轨迹 (file system) Geo with API Not implemented
Blob 归档 CI 构建轨迹 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob 容器注册表 (file system) Geo with API/Docker API SHA256 checksum
Blob 容器注册表 (object storage) Geo with API/Managed/Docker API 2 SHA256 checksum 3
Blob 软件包注册表 (file system) Geo with API SHA256 checksum
Blob 软件包注册表 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob Terraform 模块注册表 (file system) Geo with API SHA256 checksum
Blob Terraform 模块注册表 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob 版本化 Terraform 状态 (file system) Geo with API SHA256 checksum
Blob 版本化 Terraform 状态 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob 外部合并请求差异 (file system) Geo with API SHA256 checksum
Blob 外部合并请求差异 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob 流水线产物 (file system) Geo with API SHA256 checksum
Blob 流水线产物 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob 页面 (file system) Geo with API SHA256 checksum
Blob 页面 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob CI 安全文件 (file system) Geo with API SHA256 checksum
Blob CI 安全文件 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob 事件度量图像 (file system) Geo with API/Managed SHA256 checksum
Blob 事件度量图像 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob 警报度量图像 (file system) Geo with API SHA256 checksum
Blob 警报度量图像 (object storage) Geo with API/Managed 2 SHA256 checksum 3
Blob 依赖代理图像 (file system) Geo with API SHA256 checksum
Blob 依赖代理图像 (object storage) Geo with API/managed 2 SHA256 checksum 3
Container Repository 容器注册表 (file system) Geo with API/Docker API SHA256 checksum
Container Repository 容器注册表 (object storage) Geo with API/Managed/Docker API 2 SHA256 checksum 3

Footnotes:

  1. Redis 复制可以作为高可用性的一部分与 Redis sentinel 一起使用。它不在 Geo 站点之间使用。
  2. 对象存储复制可以由 Geo 执行,也可以由您的对象存储提供商/设备的本地复制功能执行。
  3. 对象存储验证在一个 feature flag, geo_object_storage_verification,中引入于 16.4 并默认启用。它使用文件大小的校验和来验证文件。

Git 仓库

一个极狐GitLab 实例可以有一个或多个仓库分片。每个分片都有一个 Gitaly 实例,负责允许访问和操作本地存储的 Git 仓库。它可以运行在:

  • 具有单个磁盘的机器上。
  • 使用多个磁盘作为单个挂载点(如 RAID 阵列)。
  • 使用 LVM。

极狐GitLab 不需要特殊的文件系统,可以与挂载的存储设备一起工作。然而,使用远程文件系统时可能存在性能限制和一致性问题。

Geo 在 Gitaly 中触发垃圾回收以在 Geo 次要站点上去重分叉的仓库

Gitaly gRPC API 执行通信,有三种可能的同步方式:

  • 使用从一个 Geo 站点到另一个 Geo 站点的常规 Git 克隆/获取(带特殊身份验证)。
  • 使用仓库快照(当第一种方法失败或仓库损坏时)。
  • 管理员区域手动触发(上述两者的组合)。

每个项目最多可以有 3 个不同的仓库:

  • 一个项目仓库,用于存储源代码。
  • 一个 wiki 仓库,用于存储 wiki 内容。
  • 一个设计仓库,用于索引设计产物(实际资产在 LFS 中)。

它们都位于同一个分片中,并与 wiki 和设计仓库的案例共享相同的基本名称,并带有 -wiki-design 后缀。

除此之外,还有片段仓库。它们可以连接到一个项目或某个特定用户。两种类型都同步到次要站点。

容器仓库

容器仓库存储在容器注册表中。它们是建立在容器注册表之上的极狐GitLab 特定概念,作为数据存储。

Blobs

极狐GitLab 将文件和 blobs(如议题附件或 LFS 对象)存储到以下位置之一:

  • 在特定位置的文件系统中。
  • 一种对象存储解决方案。对象存储解决方案可以是:
    • 基于云的,如 Amazon S3 和 Google Cloud Storage。
    • 由您托管(如 MinIO)。
    • 一个提供对象存储兼容 API 的存储设备。

当使用文件系统存储而不是对象存储时,使用网络挂载文件系统在使用多个节点时运行极狐GitLab。

关于复制和验证:

  • 我们使用内部 API 请求传输文件和 blobs。
  • 使用对象存储,您可以选择:
    • 使用云提供商的复制功能。
    • 让极狐GitLab 为您复制它。

数据库

极狐GitLab 依赖于存储在多个数据库中的数据,用于不同的用例。PostgreSQL 是 Web 界面中用户生成内容的单一真实来源,如议题内容、评论以及权限和凭据。

PostgreSQL 还可以保存一些级别的缓存数据,如 HTML 渲染的 Markdown 和缓存的合并请求差异。这也可以配置为卸载到对象存储。

我们使用 PostgreSQL 自己的复制功能将数据从站点复制到次要站点。

我们使用 Redis 作为缓存存储,并为我们的后台作业系统保存持久数据。因为这两种用例都有数据是独立于同一 Geo 站点的,所以我们不在站点之间复制它。

Elasticsearch 是一个用于高级搜索的可选数据库。它可以提高源代码级别和用户生成内容(如议题、合并请求和讨论)中的搜索。Geo 不支持 Elasticsearch。

复制的数据类型

在功能标志后面的复制数据类型

某些数据类型的复制在相应的功能标志后面:

{{< history >}}

  • 它们部署在功能标志后,默认启用。
  • 它们在 JihuLab.com 上启用。
  • 它们不能按项目启用或禁用。
  • 它们推荐用于生产环境。
  • 对于极狐GitLab 私有化部署实例,极狐GitLab 管理员可以选择禁用它们

{{< /history >}}

启用或禁用复制(对于某些数据类型)

某些数据类型的复制在功能标志后发布,默认启用具有访问极狐GitLab Rails 控制台权限的极狐GitLab 管理员可以选择为您的实例禁用它。您可以在下表的备注列中找到这些数据类型的功能标志名称。

要禁用,例如软件包文件复制:

Feature.disable(:geo_package_file_replication)

要启用,例如软件包文件复制:

Feature.enable(:geo_package_file_replication)

{{< alert type=”warning” >}}

此列表中不存在的功能,或在复制列中标记为的功能,不会复制到次要站点。在不手动复制这些功能的数据的情况下进行故障转移将导致数据丢失。要在次要站点上使用这些功能,或成功执行故障转移,您必须使用其他方法复制它们的数据。

{{< /alert >}}

功能 已复制(在极狐GitLab 版本中添加) 已验证(在极狐GitLab 版本中添加) 极狐GitLab 管理的对象存储复制(在极狐GitLab 版本中添加) 极狐GitLab 管理的对象存储验证(在极狐GitLab 版本中添加) 备注
PostgreSQL 中的应用程序数据 (10.2) (10.2) 不适用 不适用  
项目仓库 (10.2) (10.7) 不适用 不适用 在 16.2 中迁移到自助服务框架

在功能标志 geo_project_repository_replication 后面,默认在 (16.3) 中启用。

所有项目,包括归档项目,都被复制。
项目 wiki 仓库 (10.2)2 (10.7)2 不适用 不适用 在 15.11 中迁移到自助服务框架

在功能标志 geo_project_wiki_repository_replication 后面,默认在 (15.11) 中启用。
群组 wiki 仓库 (13.10) (16.3) 不适用 不适用 在功能标志 geo_group_wiki_repository_replication 后面,默认启用。
上传 (10.2) (14.6) (15.1) (16.4)3 复制在功能标志 geo_upload_replication 后面,默认启用。验证在功能标志 geo_upload_verification 后面,14.8 中移除。
LFS 对象 (10.2) (14.6) (15.1) (16.4)3 极狐GitLab 版本 11.11.x 和 12.0.x 受阻止任何新 LFS 对象复制的错误影响。

复制在功能标志 geo_lfs_object_replication 后面,默认启用。验证在功能标志 geo_lfs_object_verification 后面,14.7 中移除。
个人 Snippets (10.2) (10.2) 不适用 不适用  
项目 Snippets (10.2) (10.2) 不适用 不适用  
CI 作业产物 (10.4) (14.10) (15.1) (16.4)3 验证在功能标志 geo_job_artifact_replication 后面,默认在 14.10 中启用。
CI 流水线产物 (13.11) (13.11) (15.1) (16.4)3 管道完成后保留附加的产物。
CI 安全文件 (15.3) (15.3) (15.3) (16.4)3 验证在功能标志 geo_ci_secure_file_replication 后面,默认在 15.3 中启用。
容器注册表 (12.3)1 (15.10) (12.3)1 (15.10) 请参阅说明 以设置容器注册表复制。
Terraform 模块注册表 (14.0) (14.0) (15.1) (16.4)3 在功能标志 geo_package_file_replication 后面,默认启用。
项目设计仓库 (12.7) (16.1) (16.4)3 (16.4)3 设计还需要复制 LFS 对象和上传。
软件包注册表 (13.2) (13.10) (15.1) (16.4)3 在功能标志 geo_package_file_replication 后面,默认启用。
版本化 Terraform 状态 (13.5) (13.12) (15.1) (16.4)3 复制在功能标志 geo_terraform_state_version_replication 后面,默认启用。验证在功能标志 geo_terraform_state_version_verification 后面,14.0 中移除。
外部合并请求差异 (13.5) (14.6) (15.1) (16.4)3 复制在功能标志 geo_merge_request_diff_replication 后面,默认启用。验证在功能标志 geo_merge_request_diff_verification 后面,14.7 中移除。
版本化 Snippets (13.7) (14.2) (16.4)3 (16.4)3 验证在功能标志 geo_snippet_repository_verification 后面在 13.11 中实现,并在 14.2 中移除。
极狐GitLab Pages (14.3) (14.6) (15.1) (16.4)3 在功能标志 geo_pages_deployment_replication 后面,默认启用。验证在功能标志 geo_pages_deployment_verification 后面,14.7 中移除。
项目级安全文件 (15.3) (15.3) (15.3) (16.4)3  
事件度量图像 (15.5) (15.5) (15.5) (16.4)3 复制/验证通过上传数据类型处理。
警报度量图像 (15.5) (15.5) (15.5) (16.4)3 复制/验证通过上传数据类型处理。
服务器端 Git hooks 未计划 不适用 不适用 未计划因为当前实现复杂性低,客户兴趣低,并且存在替代 hooks 的可用性。
Elasticsearch 集成 未计划 未计划因为进一步的产品探索是必要的,并且 Elasticsearch (ES) 集群可以重建。次要使用与主要相同的 ES 集群。
依赖代理图像 (15.7) (15.7) (15.7) (16.4)3  
漏洞导出 未计划 未计划因为它们是临时的和敏感信息。它们可以按需重新生成。
软件包 NPM 元数据缓存 未计划 未计划因为它不会显著提高灾难恢复能力或次要站点的响应时间。

Footnotes:

  1. 在 15.5 中迁移到自助服务框架。有关详细信息,请参阅极狐GitLab 议题 #337436
  2. 在 15.11 中迁移到自助服务框架。在功能标志 geo_project_wiki_repository_replication 后面,默认启用。
  3. 文件存储在对象存储中的验证在极狐GitLab 16.4 引入了一个功能标志名为 geo_object_storage_verification,默认启用。