web-dev-qa-db-ja.com

1つのリポジトリでsvnserveの2つのインスタンスを実行するのは安全ですか、それとも1つだけですか?

Heartbeat/drbdを実行している2つのノードがあり、使用しているサービスの1つはSubversionです。私が知りたいのは、両方のノードでsvnserveを常に実行しても安全ですか、それともアクティブノードでのみ実行する必要があるのでしょうか。

Svnserveはファイルレベルのロックを使用しますか、それともすべてメモリ内にありますか?リポジトリにアクセスせずにsvnserveを実行するとどのような影響がありますか?

これが明確でない場合はお知らせください。言い換え/明確化するために最善を尽くします。 :)

4
fredden

フェイルオーバーを制御するheartbeatがあるので、アクティブ/パッシブDRBDクラスターを実行していると思います。そのため、フェイルオーバー時にパッシブのheartbeatは、それ自体をアクティブにプロモートする必要があることを検出します。このプロセスでは、(通常)プライマリのVIP)を引き継いでいるという事実をブロードキャストし、DRBDディスクをマウントします。これにより、ディスクがファイルシステムにアクセス可能になり、最後にheartbeatが起動します。 haresourcesに従って必要なソフトウェア(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の適切な起動スクリプト(またはスクリプトの関数に関連して名前が付けられています!) haresourcesの構成drbd manual および OpenVZ wiki

問題の核心は、パッシブモードのときにsvnserveプロセスがリポジトリをロックするため、drbdがリポジトリをアクティブとして引き継ぐまで読み取るためのディスクが事実上ないことです。 DRBDをアクティブ/アクティブで実行することは可能ですが、これは比較的新しい機能であり、私が試したものではありません。

十分に文書化されていない1つの落とし穴:hb_takeoverスクリプトを使用してフェイルオーバーをテストする代わりに、プライマリでheartbeatサービスを終了し、セカンダリが引き継ぐのを待って、両方のサーバーでtail -f /var/log/ha-logを監視します。これには、実際のフェイルオーバーですべて重要なha.cfdeadtimewarntime、およびinitdeadパラメーターをテストするという追加のボーナスがあります。

2
Andy

はい、クラスター対応のファイルシステムで実行している限り、2つのsvnserveプロセスを同時に実行できます。このファイルシステムでは、両方が同時に同じファイルに書き込むことはできません。

たとえば、同じリポジトリでsvnserveとhttpdを問題なく実行できます。

リポジトリはファイルによってロックされ、コミットが発生すると、アップロードはトランザクションディレクトリに移動し、その完了時にtxnがリポジトリにアトミックに適用されます。 svnブックのこのセクション 複数のプロセスが異なるプロトコルを介してsvnデータを同時に提供する方法について詳しく説明します。

0
gbjbaanb