之前研究过replication发现使用效果不太好,所以想研究multi-site或者high-availability,但是网上几乎找不到关于这两个插件的案例,是否有大神配置过或者有没有也想配置的战友,希望一起交流学习,497803291(这是我专门创建的gerrit企鹅交流号)。
多站点插件的重点
多站点插件使 Gerrit Code Review 的开源版本能够支持跨站点的水平可扩展性。
Gerrit 已经在Google以多站点配置部署,在Qualcomm以多主机方式部署。这两种实施都包括针对每个公司全球网络的特定基础架构要求量身定制的修复和扩展。这些解决方案可能会或可能不会与开源社区的其他成员共享。具体来说,谷歌的部署是专有的,不适合谷歌数据中心之外的任何环境。此外,在高通的案例中,他们的 Gerrit 版本是 v2.7 的一个分支。
多站点之路
Gerrit 多站点支持的开发是复杂的,因此被故意分解为增量步骤。起点是单个 Gerrit master 部署,最终目标是在全球范围内完全分布的一组合作 Gerrit master。
- 1x 主/单个位置。
- 2x 主(活动/备用)/单个位置 - 共享磁盘
- 2x 主机(主动/被动)/单一位置 - 共享磁盘
- 2x 主机(活动 RW/活动 RO)/单个位置 - 共享磁盘
- 2x 主(主动 RW/主动 RO)/单一位置 - 独立磁盘
- 2x 主设备(主动 RW/主动 RO)/主动 + 灾难恢复位置
- 2x 主机(主动 RW/主动 RO)/两个位置
- 2x 主机(主动 RW/主动 RW)/两个位置
- 2 个或多个 master(活动 RW/活动 RW)跨 2 个或多个位置分片
- 具有仲裁/多个位置的多个主节点(活动 RW/活动 RW)
步骤之间的转换不仅需要 Gerrit 设置和插件集的演进,还需要实施更成熟的方法来在网络上配置、维护和版本服务器。高通公司指出,公司文化的演变以及一致地版本和配置不同服务器环境的能力是其多主机设置的制胜法宝。
谷歌目前在第 10 阶段运行。Qualcomm 处于第 4 阶段,不同之处在于两个主机都在服务 RW 流量,这是可能的,因为它们的底层存储、NFS 和 JGit 实现的细节允许在文件系统级别进行并发锁定。GerritHub 在第 9 阶段运行,有 3 个site。
项目分片
多站点在有些超大公司更加倾向于不共享存储库
插件设计
跨 Gerrit 站点复制的内容
为了保证分布式系统的无缝操作,必须在不同站点之间保持几种不同类别的信息一致。
- Git 存储库:它们存储在磁盘上,是需要维护的最重要信息。存储库存储以下数据:
- Git BLOB、对象、引用和树。
- NoteDb,包括 Groups、Accounts 和 review 数据
- 项目配置和 ACL
- 项目提交规则
- 索引:一系列二级索引,允许搜索和快速访问 Git 存储库数据。索引在重新启动时保持不变。
- 缓存:一组内存和持久数据,旨在降低 CPU 和磁盘利用率并提高性能。
- Web 会话:使用 Gerrit 定义一个活动用户会话,用于减少底层身份验证系统的负载。默认情况下,会话存储在 H2 表中的本地文件系统中,但可以通过插件外部化
高层架构
- multi-site libModule: 将接口导出为 DynamicItems 以插入特定实现Brokers和Global Ref-DB插件。
- broker plugin: 代理接口的实现,它可以跨站点复制 Gerrit索引、缓存和流事件。当没有提供特定实现时,Broker Noop 实现然后 libModule 接口被映射到内部 no-ops 实现。
- Global Ref-DB plugin: Global Ref-DB 接口的实现,它可以检测跨 gerrit 站点的不同步引用。如果没有提供特定的实现,那么Global Ref-DB Noop 实现然后 libModule 接口被映射到内部 no-ops 实现。
- replication plugin:启用跨站点的Git 存储库的异步推送复制。
- pull replication plugin: 启用跨站点的Git 存储库的同步复制。
- web-session broker plugin:支持将活动会话存储到消息代理主题,然后跨站点广播
- health check plugin: 支持根据数据和系统的一些底层条件自动选择RW站点。
- HA Proxy: 为跨站点的所有 Gerrit 功能提供单一入口点。