Heartbeat/drbdを実行している2つのノードがあり、使用しているサービスの1つはSubversionです。私が知りたいのは、両方のノードでsvnserveを常に実行しても安全ですか、それともアクティブノードでのみ実行する必要があるのでしょうか。
Svnserveはファイルレベルのロックを使用しますか、それともすべてメモリ内にありますか?リポジトリにアクセスせずにsvnserveを実行するとどのような影響がありますか?
これが明確でない場合はお知らせください。言い換え/明確化するために最善を尽くします。 :)
フェイルオーバーを制御する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.cf
のdeadtime
、warntime
、およびinitdead
パラメーターをテストするという追加のボーナスがあります。
はい、クラスター対応のファイルシステムで実行している限り、2つのsvnserveプロセスを同時に実行できます。このファイルシステムでは、両方が同時に同じファイルに書き込むことはできません。
たとえば、同じリポジトリでsvnserveとhttpdを問題なく実行できます。
リポジトリはファイルによってロックされ、コミットが発生すると、アップロードはトランザクションディレクトリに移動し、その完了時にtxnがリポジトリにアトミックに適用されます。 svnブックのこのセクション 複数のプロセスが異なるプロトコルを介してsvnデータを同時に提供する方法について詳しく説明します。