对于远离单个GitLab实例的团队和跑步者来说,获取大型存储库可能需要很长时间。
Geo提供了本地缓存,可以将其放置在地理位置上靠近远程团队的位置,以满足读取请求。这可以减少所需的时间克隆和获取大型存储库,加快开发并提高远程团队的生产力。
地理辅助站点将写入请求透明地代理到主站点。所有地理站点都可以配置为响应单个GitLab URL,以提供一致、无缝和全面的体验,无论用户登录哪个站点。
要确保您使用的是正确版本的文档,请转到GitLab.com上的Geo页面并从中选择适当的版本交换机分支/标签下拉列表。例如,v15.7.6-ee版
.
Geo使用一组定义的术语,这些术语在地理词汇表.一定要熟悉这些术语。
用例
实施Geo具有以下好处:
- 将分布式开发人员克隆和获取大型存储库和项目所需的时间从几分钟减少到几秒钟。
- 让所有开发人员都能贡献想法并并行工作,无论他们在哪里。
- 在您的初级的和第二的地点。
此外,它还:
- 除了读取GitLab web界面中可用的任何数据外,还可以用于克隆和获取项目(请参阅限制).
- 克服远程办公室之间连接缓慢的问题,通过提高分布式团队的速度来节省时间。
- 有助于减少自动任务、自定义集成和内部工作流的加载时间。
- 可以快速故障切换到第二的站点位于灾难恢复脚本。
- 允许计划的故障切换到第二的现场。
Geo提供:
- 完整的GitLab体验次要站点:维护一个初级的启用时的GitLab站点第二的为您的每个分布式团队提供完整的读写和UI体验的站点。
- 身份验证系统挂钩:次要站点从初级的例如。
Gitaly集群
Geo不应与Gitaly集群。有关的详细信息Geo和Gitaly Cluster之间的差异,请参见与Geo的比较.
它是如何工作的
除了读取任何数据外,您的Geo实例还可以用于克隆和获取项目。这使得远距离使用大型存储库的速度更快。
启用Geo后,将:
请记住:
-
次要网站与初级的站点到:
- 获取登录的用户数据(API)。
- 复制存储库、LFS对象和附件(HTTPS+JWT)。
- 这个初级的站点不与对话第二的要通知更改的站点(API)。
- 您可以直接推送到第二的站点(对于HTTP和SSH,包括Git LFS)。
- 有限制使用Geo时。
建筑
下图说明了Geo的底层架构。
在此图中:
- 有一个初级的站点和其中一个的详细信息第二的现场。
- 只能在上执行对数据库的写入初级的现场。A类第二的站点接收数据库使用更新PostgreSQL流复制.
- 如果存在LDAP服务器应配置为复制灾难恢复情节。
- A类第二的站点针对初级的站点,使用特殊JWT保护的授权:
- 存储库通过Git over HTTPS进行克隆/更新。
- 使用专用API端点通过HTTPS下载附件、LFS对象和其他文件。
从用户执行Git操作的角度来看:
- 这个初级的该站点的行为就像一个完整的读写GitLab实例。
-
次要站点是只读的,但代理Git推送操作初级的现场。这使得第二的网站本身似乎支持推送操作。
-
次要站点将web UI请求代理到主站点。这使得第二的站点似乎支持完整的UI读/写操作。
为了简化图表,省略了一些必要的组件。
A类第二的站点需要两个不同的PostgreSQL数据库:
在第二的站点,还有一个额外的守护程序:地理日志光标.
运行Geo的要求
运行Geo需要以下内容:
此外,检查GitLab最低要求,并使用最新版本的GitLab获得更好的体验。
防火墙规则
下表列出了必须在初级的和第二的地理位置。为了简化故障切换,您应该双向打开端口。
源站点 | 源端口 | 目标站点 | 目标端口 | 协议 |
主要 | 任何 | 次要 | 80 | TCP(HTTP) |
主要 | 任何 | 次要 | 443 | TCP(HTTPS) |
次要 | 任何 | 主要 | 80 | TCP(HTTP) |
次要 | 任何 | 主要 | 443 | TCP(HTTPS)协议 |
次要 | 任何 | 主要 | 5432 | 传输控制协议 |
请参阅中GitLab使用的端口的完整列表程序包默认值
Web终端支持要求负载平衡器正确处理WebSocket连接。使用HTTP或HTTPS代理时,必须将负载平衡器配置为通过连接
和升级
逐跳报头。请参阅网络终端集成指南了解更多详细信息。
当对端口443使用HTTPS协议时,必须向负载平衡器添加SSL证书。如果您希望在GitLab应用程序服务器上终止SSL,请使用TCP协议。
内部URL
从任何Geo辅助站点到主Geo站点的HTTP请求使用主Geo的内部URL地理位置。如果在管理区域的主要地理站点设置中未明确定义此设置,则使用主站点的公共URL。
要更新主要Geo站点的内部URL,请执行以下操作:
- 在左侧边栏的底部,选择管理区.
- 选择地理>站点.
- 选择编辑在主站点上。
- 更改内部URL,然后选择保存更改.
地理跟踪数据库
跟踪数据库实例用作元数据,以控制本地实例上需要更新的内容。例如:
- 下载新资产。
- 获取新的LFS对象。
- 从最近更新的存储库中获取更改。
因为复制的数据库实例是只读的,所以我们需要为每个第二的现场。
地理日志光标
此守护程序:
- 读取由初级的站点到第二的数据库实例。
- 使用必须执行的更改更新地理跟踪数据库实例。
当跟踪数据库实例中的某些内容被标记为要更新时第二的站点执行所需的操作并更新状态。
这种新的体系结构允许GitLab对站点之间的连接问题具有弹性。不管多长时间第二的站点已与断开连接初级的站点,因为它能够以正确的顺序重播所有事件,并与同步初级的再次访问网站。
限制
此限制列表仅反映最新版本的GitLab。如果您使用的是旧版本,可能会有额外的限制。
- 直接推到第二的站点将请求重定向(对于HTTP)或代理(对于SSH)到初级的站点而不是直接处理。限制是不能将Git over HTTP与URI中嵌入的凭据一起使用,例如,
https://用户:个人-访问token@seconary.tld
。有关详细信息,请参阅如何使用地理站点. - 这个初级的网站必须联机才能进行OAuth登录。现有会话和Git不受影响。支持第二的使用独立于主提供程序的OAuth提供程序的站点是正在计划中.
- 安装需要多个手动步骤,根据情况,这些步骤可能需要大约一个小时。考虑使用GitLab环境工具包部署和操作生产的Terraform和Ansible脚本GitLab实例基于我们的参考架构,包括常见日常任务的自动化。史诗1465建议进一步改进Geo安装。
- 问题/合并请求的实时更新(例如,通过长轮询)在第二的现场。
- 官方不支持使用地理辅助站点加速跑步者。计划支持此功能,可以在中进行跟踪史诗9779。如果主站点和辅助站点之间发生复制延迟,并且在执行作业时辅助站点上的管道ref不可用,则作业将失败。
-
选择性同步仅限制复制哪些存储库和文件。仍会复制整个PostgreSQL数据。选择性同步不是为了适应法规遵从性/导出控制用例而构建的。
-
页面访问控制在中学不起作用。请参见GitLab第9336期了解详细信息。
-
灾难恢复对于具有多个辅助站点的部署,由于需要对所有未升级的辅助站点执行完全的重新同步和重新配置以遵循新的主站点,因此会导致停机。
- 对于Git over SSH,为了使项目克隆URL正确显示,无论您正在浏览哪个站点,辅助站点必须使用与主站点相同的端口。GitLab第339262期建议取消此限制。
- 针对辅助站点的Git推送SSH不适用于超过1.86 GB的推送。GitLab第413109期跟踪此错误。
- 备份无法在辅助服务器上运行.
- Git克隆和获取请求选项
--深度
如果在启动请求时辅助站点不是最新的,那么针对辅助站点的SSH将无法工作并无限期挂起。有关更多信息,请参阅第391980期. - 针对辅助站点的带有SSH选项的Git推送无法工作并终止连接。有关更多信息,请参阅发行号417186.
- 在大多数情况下,地理辅助站点不会加速(服务)管道第一阶段的克隆请求。辅助站点也不能保证为后面的阶段提供服务,例如,如果Git更改较大、带宽较小或管道阶段较短。通常,它会为后续阶段的克隆请求提供服务。第446176期讨论了原因,并提出了一项增强功能,以增加从辅助站点处理Runner克隆请求的机会。
复制/验证的限制
有一个所有GitLab的完整列表数据类型和现有的复制和验证支持.
安装说明
有关设置说明,请参阅设置Geo.
安装后文档
在上安装GitLab后第二的站点并执行初始配置,请参阅以下文档以获取安装后信息。
配置地理位置
有关配置Geo的信息,请参阅地理配置.
升级Geo
有关如何将地理站点更新为最新GitLab版本的信息,请参阅升级Geo站点.
暂停和恢复复制
暂停和恢复复制仅支持使用Linux包管理的数据库。不支持外部数据库。
在某些情况下,如在升级或a计划的故障切换,最好暂停主服务器和辅助服务器之间的复制。
如果您计划在升级期间在辅助站点上允许用户活动,不暂停复制零停机升级。当暂停时,辅助站点会变得越来越过时。一个已知的影响是,越来越多的Git获取被重定向或代理到主站点。可能还有其他未知影响。
暂停和恢复复制是通过命令行工具从辅助站点中的特定节点完成的。根据您的数据库体系结构,这将针对postgresql数据库
或守护神
服务:
- 如果对辅助站点上的所有服务使用单个节点,则必须在此单个节点上运行命令。
- 如果辅助站点上有独立的PostgreSQL节点,则必须在此独立的PostgreSQL节点上运行命令。
- 如果辅助站点使用Patroni群集,则必须在辅助Patroni备用主节点上运行这些命令。
如果您没有对辅助站点上的所有服务使用单个节点,请确保/etc/gitlab/gitlab.rb
在PostgreSQL或Patroni节点上包含配置行gitlab_rails[“地理节点名称”]=“节点名称”
,其中节点名称
与地理节点名称
在应用程序节点上。
暂停:(从辅助站点)
此外,请注意,如果PostgreSQL在暂停复制后重新启动(通过重新启动VM或使用gitlab-ctl重启postgresql
),PostgreSQL会自动恢复复制,这是您在升级或计划的故障切换场景中不希望看到的。
继续:(从辅助站点)
为多个节点配置Geo
有关为多个节点配置Geo的信息,请参见用于多个服务器的Geo.
使用对象存储配置Geo
有关使用对象存储配置Geo的信息,请参阅带对象存储的地理.
灾难恢复
有关在灾难恢复情况下使用Geo以减少数据丢失和恢复服务的信息,请参阅灾难恢复.
复制容器注册表
有关如何复制容器注册表的更多信息,请参阅容器注册表第二的网站.
地理辅助代理
有关在辅助站点上使用地理代理的更多信息,请参阅辅助站点的地理代理.
单一登录(SSO)
有关配置单点登录(SSO)的更多信息,请参阅具有单点登录(SSO)的Geo.
LDAP(LDAP)
有关配置LDAP的更多信息,请参阅使用单点登录(SSO)>LDAP的Geo.
安全审查
有关地理安全的更多信息,请参阅地理安全审查.
调整地理位置
有关调整Geo的详细信息,请参见调整地理位置.
设置位置软件Git URL
有关如何使用AWS Route53设置位置软件Git远程URL的示例,请参阅带有AWS Route53的位置软件Git远程URL.
回填
当第二的站点已设置,它将开始复制缺少的数据这个初级的流程中的站点称为回填。您可以监视每个Geo站点上的同步过程初级的站点的地理节点浏览器中的仪表板。
回填期间发生的故障计划在最后重试回填。
删除地理站点
有关删除地理站点的详细信息,请参见正在删除第二的地理位置.
禁用Geo
要了解如何禁用Geo,请参阅禁用Geo.
常见问题
有关常见问题的答案,请参阅地理常见问题.
日志文件
Geo将结构化日志消息存储在地理日志
文件。
有关如何访问和使用地理日志的更多信息,请参阅日志系统文档中的Geo部分.
故障排除
有关故障排除步骤,请参阅地理故障排除.