7

我有一个 Gerrit 服务器(名为 A),我想为新服务器(名为 B)设置一个镜像。我想从 B 中提取而不是使用 A 的处理能力,因为 A 作为主 Gerrit 服务器,当我可以使用 B 的 SSH 镜像它时,我不想在它上面增加工作量。

我正在使用 H2 数据库,我想镜像整个 Gerrit + 它的所有 Git 存储库,而不仅仅是 Git 存储库,因为我也想保留 Gerrit 数据库的权限/历史记录。

我设法缩小了两种可能的方法:

  1. 使用“gerrit 复制” http://gerrit.googlecode.com/svn/documentation/2.1.6/cmd-replicate.html 不确定“[--url < PATTERN >]”是什么意思。我应该在哪里运行这个命令?它在服务器 A 还是 B 上?

  2. 使用“rsync”没问题,但是我无法同步 review_site/etc/gerrit.config,因为它包含服务器 A 的 IP,并且不想在服务器 B 上拥有它。

4

1 回答 1

9

这里对不同问题的一些评论:

  1. 没有很好的方法来执行数据库和存储库的热备份,尤其是在您使用 H2 时。关闭 Gerrit 并使用 rsync 等文件传输工具的唯一选择。如果您使用更强大的数据库,例如 postgres,则还有其他备份选项。但是,您仍然有潜在的竞争条件 - 如果您在提交更改之前备份存储库并在之后备份数据库,您可能会遇到问题。这就是为什么我们长期致力于摆脱数据库并将所有内容存储在存储库中的原因。

  2. 就服务器上的 CPU 负载而言(据我所知),推送与拉取并没有太大区别。只需使用 Gerrit 内置的复制功能,它们就是为这类事情设计的。

  3. 如果服务器 B 只是作为服务器 A 出现故障的备份,我只需编写一个脚本,在半夜停止服务器 A 上的 Gerrit,rsync 到服务器 B,然后启动 Gerrit 备份。这是你现在能做的最好的事情,尤其是 H2。

  4. 如果服务器 B 打算成为您的主服务器的从属(因此一些用户可以点击它而不是每个人都点击服务器 A),请使用 Gerrit 复制和从属模式 - http://gerrit.googlecode.com/svn/documentation/2.1。 6/config-gerrit.html#container。请注意,这不会备份您的数据库或审查中的更改。

  5. Gerrit 2.1.6真的很老了。至少使用 2.1.8,2.2.2 即将发布,是您最好的选择

  6. 'gerrit replicate' 命令只是为了启动复制,以防 Gerrit 上次尝试复制时服务器已关闭。使用 2.1.6 设置复制的说明位于http://gerrit.googlecode.com/svn/documentation/2.1.6/config-replication.html

于 2012-01-12T02:15:49.283 回答