fredden Asked: 2010-02-09 20:28:20 +0800 CST2010-02-09 20:28:20 +0800 CST 2010-02-09 20:28:20 +0800 CST 在一个存储库上运行两个 svnserve 实例是否安全,或者只运行一个? 772 我们有两个运行 heartbeat/drbd 的节点,我们使用的服务之一是 subversion。我想知道的是:一直在两个节点上运行 svnserve 是否安全,还是应该只在活动节点上运行? svnserve 使用文件级锁定,还是全部在内存中?在不访问其存储库的情况下运行 svnserve 有什么影响? 如果不清楚,请告诉我,我会尽力改写/澄清。:) linux svnserve 2 个回答 Voted Best Answer Andy 2010-02-10T04:26:21+08:002010-02-10T04:26:21+08:00 我假设当您heartbeat控制故障转移时,您正在运行一个主动/被动 DRBD 集群。因此,在heartbeat被动故障转移时检测到它必须将自己提升为主动。在这个过程中,它(通常)广播它接管主服务器的 VIP 的事实,然后安装 DRBD 磁盘。这使得文件系统可以访问磁盘,并最终heartbeat根据haresources. 您应该将故障转移后需要启动的任何额外服务添加到/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(或相对于脚本的功能命名!) -配置 haresources、drbd 手册和OpenVZ wiki中的更多详细信息 问题的症结在于实际上没有磁盘可用于svnserve读取您的存储库,直到它被接管为活动状态,因为drbd进程在被动模式下将其锁定。可以主动/主动地运行 DRBD,但这是一个相对较新的功能,我没有尝试过! 一个没有很好记录的问题:不是使用 hb_takeover 脚本来测试故障转移,而是简单地终止heartbeat主服务器上的服务并等待辅助服务器接管,同时使用tail -f /var/log/ha-log. 这有一个额外的好处,即测试deadtime,warntime和initdead参数ha.cf在现实世界的故障转移中都很重要。 gbjbaanb 2010-06-06T04:43:33+08:002010-06-06T04:43:33+08:00 是的,你可以同时运行 2 个 svnserve 进程,只要你在一个集群感知的文件系统上运行,并且不允许它们同时写入同一个文件。 例如,您可以在同一个 repo 上运行 svnserve 和 httpd 而不会出现问题。 存储库被一个文件锁定,当提交发生时,上传到一个事务目录,当它完成时,txn 原子地应用于存储库。svn book 的这一部分详细介绍了多个进程如何通过不同的协议同时提供 svn 数据。
我假设当您
heartbeat
控制故障转移时,您正在运行一个主动/被动 DRBD 集群。因此,在heartbeat
被动故障转移时检测到它必须将自己提升为主动。在这个过程中,它(通常)广播它接管主服务器的 VIP 的事实,然后安装 DRBD 磁盘。这使得文件系统可以访问磁盘,并最终heartbeat
根据haresources
.您应该将故障转移后需要启动的任何额外服务添加到
/etc/ha.d/haresources
文件中,格式如下:使用适当的启动脚本
/etc/ha.d/resource.d/mysql
(或相对于脚本的功能命名!) -配置 haresources、drbd 手册和OpenVZ wiki中的更多详细信息问题的症结在于实际上没有磁盘可用于
svnserve
读取您的存储库,直到它被接管为活动状态,因为drbd
进程在被动模式下将其锁定。可以主动/主动地运行 DRBD,但这是一个相对较新的功能,我没有尝试过!一个没有很好记录的问题:不是使用 hb_takeover 脚本来测试故障转移,而是简单地终止
heartbeat
主服务器上的服务并等待辅助服务器接管,同时使用tail -f /var/log/ha-log
. 这有一个额外的好处,即测试deadtime
,warntime
和initdead
参数ha.cf
在现实世界的故障转移中都很重要。是的,你可以同时运行 2 个 svnserve 进程,只要你在一个集群感知的文件系统上运行,并且不允许它们同时写入同一个文件。
例如,您可以在同一个 repo 上运行 svnserve 和 httpd 而不会出现问题。
存储库被一个文件锁定,当提交发生时,上传到一个事务目录,当它完成时,txn 原子地应用于存储库。svn book 的这一部分详细介绍了多个进程如何通过不同的协议同时提供 svn 数据。