上一个: Connecting via fork, 上层: Remote repositories


2.9.8 分配负载到多个 CVS 服务器

cvs 可以通过多台 cvs 服务器配置成分布式。 对于单独的 primary server,它的实现借助于一个或多个 write proxies, 或者是 secondary servers

cvs 客户端访问第二服务器时,只请求读操作,那么第二服务器会处理所有的请求。 如果客户端发送写请求,那么,如果客户端支持重定向,第二服务器要求客户端将写请求重定向到第一服务器。 否则第二服务器作为可以处理写请求的第一服务器的一个传输代理。

这样,第一服务器可以配置多个写代理的第二服务器,有效地将读负载分配到第二服务器,限制 第一服务器的写负载并将变更传递到第二服务器。

第一服务器不会自动将变更推向第二服务器。它必须通过 loginfo, postadmin, posttag, & postwatch 脚本配置 (参阅 Trigger Scripts),就像下面这样:

     ALL	rsync -gopr -essh ./ secondary:/cvsroot/%p &

您也许希望在运行上面例子中 `rsync' 写第二服务器和读第一服务器的时候给目录加锁, 但如何配置超出了本文档范畴。

写代理的另外一个优点是,在连接第一服务器比较慢或者它定期断开时, 用户仍然可以从第二服务器执行快速的读操作。 只在写操作时才需要连接到第一服务器。

为了配置写代理,第一服务器必须在 CVSROOT/config (参阅 config) 里指定 `PrimaryServer' 选项。 为了使传输代理模式有效,所有的第二服务器必须运行 相同版本的 cvs 服务器,或者至少给客户端提供与第一服务器相同的支持需求列表。 它对于转发不是必须的。

一旦设置了第一服务器,第二服务器可以通过下面进行配置:

  1. 复制主仓库到新位置。
  2. 在第一服务器上建立 loginfo, postadmin, posttagpostwatch 文件用于传播修改到新的第二服务器。
  3. 像配置其他 CVS 服务器(参阅 Remote repositories)那样配置远程访问到第二服务器。
  4. 如果两台服务器上 cvs 仓库的路径不同,并且您不希望客户端处理 `Redirect' (CVS 1.12.9 及更早的客户端不能处理 `Redirect'),请确保传递 --allow-root=secondary-cvsroot所有的 调用 第二服务器。

    再次请注意,通过代理写,要求指定 --allow-root=secondary-cvsroot 到所有的调用第二服务器,不只是 `pserver' 调用。 这也许需要为您的服务器包装一个执行脚本。