我有一个 Gerrit 服务器(名为 A),我想设置一个到新服务器(名为 B)的镜像。 我想从 B pull 而不是使用 A 的处理能力,因为 A 作为主要的 Gerrit 服务器,当我可以使用 B 的 SSH 镜像它时,我不想给它增加更多的工作量。
我正在使用 H2 数据库,我想镜像整个 Gerrit 及其所有 Git 存储库,而不仅仅是 Git 存储库,因为我也想保留 Gerrit 数据库的权限/历史记录。
我设法缩小了 2 种可能的方法:
使用“gerrit 复制”http://gerrit.googlecode.com/svn/documentation/2.1.6/cmd-replicate.html 不确定“[--url < PATTERN >]”是什么意思。我应该在哪里运行这个命令?是在服务器A还是B?
使用“rsync”没问题,但我无法同步 review_site/etc/gerrit.config,因为它包含服务器 A 的 IP,不想在服务器 B 上使用它。
最佳答案
这里有一些关于不同问题的评论:
没有很好的方法来执行数据库和存储库的热备份,尤其是在您使用 H2 时。关闭 Gerrit 并使用 rsync 等文件传输工具的唯一选择。如果您使用更强大的数据库,如 postgres,还有其他备份选项。但是,您仍然有潜在的竞争条件——如果您在提交更改之前备份存储库并在之后备份数据库,您可能会遇到问题。这就是为什么我们长期致力于摆脱数据库并将所有内容存储在存储库中。
就服务器上的 CPU 负载而言,推送与 pull 没有太大区别(据我所知)。只需使用 Gerrit 内置的复制功能,它们就是为这类事情而设计的。
如果服务器 B 只是作为备份,以防服务器 A 出现故障,我会编写一个脚本,在半夜停止服务器 A 上的 Gerrit,rsync 到服务器 B,然后启动 Gerrit备份。这是您现在可以做的最好的事情,尤其是使用 H2。
如果服务器 B 是您主服务器的从属服务器(这样一些用户可以访问它而不是每个人都访问服务器 A),请使用 Gerrit 复制和从属模式 - http://gerrit.googlecode.com/svn/documentation/2.1.6/config-gerrit.html#container .请注意,这不会备份您的数据库或审查中的更改。
Gerrit 2.1.6 真的很旧。至少使用 2.1.8,2.2.2 即将发布,是你最好的选择
“gerrit replicate”命令只是为了启动复制,以防 Gerrit 上次尝试复制时服务器出现故障。使用 2.1.6 设置复制的说明位于 http://gerrit.googlecode.com/svn/documentation/2.1.6/config-replication.html
关于git - 为 Gerrit 及其所有 Git 存储库设置镜像的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828914/