Geo data types support

Geo data types support

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

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

当前,我们区分三种不同的数据类型:

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

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

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

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

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

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

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

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

GitLab 将文件和 Blob(例如 Issue 附件或 LFS 对象)存储到以下任一位置:

  • 特定位置的文件系统.

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

关于复制和验证:

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

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

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

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

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

Limitations on replication/verification

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

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

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

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
Uploads Yes (10.2) 仅在转移时验证,或手动验证( 1
LFS 对象 Yes (10.2) No 仅在转移时验证,或手动验证( 1 ). 在 11.11.x 和 12.0.x( 2 )中的新 LFS 对象不可用.
CI 作业工件(痕迹除外) Yes (10.4) 仅手动验证( 1
存档的痕迹 Yes (10.4) No 仅在转移时验证,或手动验证( 1
个人摘要 Yes (10.2) Yes (10.2)
No
项目摘要 Yes (10.2) Yes (10.2)
用于分支项目重复数据删除的对象池 Yes No
Server-side Git hooks No No
No No
No No
Yes (12.3) No
NPM Registry Yes (13.2) No
Yes (13.2) No
Conan Repository Yes (13.2) No
Yes (13.2) No
PyPi Repository Yes (13.2) No
Yes (13.2) No
External merge request diffs No
Terraform State (3) No
Vulnerability Export (3) No
对象存储中的内容 Yes (12.4) No