为Gerrit及其所有Git repos设置镜像的最佳方法

xbe*_*eta 7 git mirror gerrit

我有一个Gerrit服务器(名为A),我想为新服务器(名为B)设置一个镜像.我想从B中取代而不是使用A的处理能力,因为A作为主要的Gerrit服务器,当我可以使用来自B的SSH镜像时,我不想在其上添加更多的工作量.

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

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

  1. 使用"格里特复制" 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上拥有它.

Bra*_*rad 9

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

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

  2. 就服务器上的CPU负载而言,Push vs Pull差别不大(据我所知).只需使用Gerrit内置的复制功能,它们就是为这类东西而设计的.

  3. 如果服务器B仅作为备份,以防服务器A出现故障,我只需编写一个脚本,在半夜停止服务器A上的Gerrit,将rsyncs停止到服务器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