在一个存储库上运行两个svnserve实例是安全的吗?

我们有两个节点运行heartbeat / drbd,我们使用的服务之一是颠覆。 我想知道的是:在两个节点上始终运行svnserve是否安全,还是只应该在主动节点上运行?

svnserve使用文件级locking,还是全部在内存中? 运行svnserve没有其存储库可访问的含义是什么?

请让我知道,如果这不清楚,我会尽我所能来重述/澄清。 🙂

我认为,当您有heartbeat控制故障转移时,您正在运行主动/被动DRBD群集。 因此,在故障转移时,被动检测到的heartbeat必须将自身提升为主动。 在这个过程中,它(通常)广播接pipe主要VIP的事实,然后安装DRBD磁盘。 这使得磁盘可以访问文件系统,最后根据资源提供必要的软件(MySQL,Apache等)。

您应该添加任何您在故障转移到/etc/ha.d/haresources文件后所需的额外服务,格式为:

 #node1 10.0.0.170 Filesystem::/dev/sda1::/data1::ext2 db1 192.168.100.200/24/eth0 drbddisk::mysql Filesystem::/dev/drbd0::/drbd::ext3::defaults mysql 

/etc/ha.d/resource.d/mysql (或者相对于脚本的函数!)中使用相应的启动脚本 – configurationharesources , drbd手册和OpenVZ wiki中的更多详细信息

问题的关键在于, svnserve实际上没有磁盘来读取存储库,直到它被接pipe为活动状态,因为drbd进程在被动模式下将其locking。 可以运行DRBD主动/主动,但它是一个相对较新的function,而不是我试过的!

有一个问题没有得到很好的certificate:不是使用hb_takeover脚本来testing故障切换,而是简单地终止主服务器上的heartbeat服务,等待备用服务器接pipe,在两台服务器上使用tail -f /var/log/ha-log 。 这有额外的好处,可以testingha.cfdeadtimewarntimeinitdead参数,这些在真实世界的故障转移中都是非常重要的。

是的,只要你在一个集群感知的文件系统上运行,你就可以同时运行2个svnserve进程,这个文件系统不会让它们同时写入同一个文件。

你可以在同一个仓库上运行svnserve和httpd,例如没有问题。

仓库被一个文件locking,当提交发生时,上传到一个交易目录,当它完成时,txn以primefaces方式应用到仓库。 本书的这一部分详细介绍了多个进程如何通过不同协议同时提供svn数据。