Subversionのシステム構成を考えてみた

タグ:

全社的にSubversionを使えないか調べているんだけど、その構成に関する資料はとても少ない。
SVN1.5だとエンタープライズ環境におけるSubversionの複製アーキテクチャ by japan.internet.com デベロッパーとかSubversionを見直せ by プログラマの思索さんがとても詳しい。

そこで、Subversionのシステム構成をまとめてみた。いきなり「WebDAV Transparent Write-Through Proxyっすよ!」とMTGで提案するのも何なので、まずは整理。


単一サーバの場合


これは簡単。WindowsならばAll-in-one Tracとか使えばすぐ環境ができる。
昔の職場では、自分のPCに入れて使っていたのでこの構成になる。

いいところ
・シンプル
・小さいプロジェクトとかならこれで十分

悪いところ
・リポジトリが壊れるとバックアップからの復旧になる


複数サーバ・単一リポジトリの場合


NFSとかを使ってディクス共有ができるのであればこういう構成も可能。ただし、リポジトリは結局1つなので、Apacheは冗長になっているけど、リポジトリが壊れたらおしまい。サーバ間でリポジトリを同期しなくていいのが楽で、Apacheの故障であれば有効かもしれないけど、Apacheの冗長化があまり効果を発揮していない気もする。

こんときに注意しないといけないのが、SVNはApacheサーバはAct/Actでいいんだけど、両方にリクエストを渡すのはだめっぽい。どうも複数サーバから単一リポジトリにコミットなどWriteすると、リポジトリが壊れるみたい。
Act/Actにしておいて、片サーバのみにリクエストを投げるようにLBなりで設定しておかなければえらいめにあう。
LBが使えないなら、2つのSVNサーバそれぞれにドメインを割りあって、待機系のSVNサーバからはコミットできないようにしておかないとだめ。

いいところ
・Apacheの停止に強い
・サーバ間のリポジトリ同期が必要ない

悪いところ
・LBがない場合、マスタとスレーブの使い分けが必要
・リポジトリが壊れるとバックアップからの復旧になる


複数サーバ・複数リポジトリの場合(svnsync利用)


複数にリポジトリをとると、サーバ間の同期が気になると思う。
SVNはsvnsyncという機能を持っており、リモートやローカルの別リポジトリと同期し、レプリケーションを作成することができる。
この場合、ミラーリングしているので、障害時にApacheをスイッチできれば、SVNは止まらず利用できる。

ただし、通常利用するマスタSVNはRW。スレーブSVNはRとしておかないと、スレーブにコミットしたときに。同期はマスタ>スレーブの一方通行なので、マスタと同期がとれなくなる。
よって障害時はスレーブをRで運用しなければならない。

これは問題に感じるが、コミットの緊急性よりもチェックアウトの緊急性が高いはずなので、障害復旧まではコミットできないけど、チェックアウトはできるのでいいんじゃね?というポリシーに納得できれば、シェルを書くだけで簡単に組める。

LBが使えたらこの構成で十分そうだし、LBが使えず、ユーザの手間を気にしなくていいなら、2つのSVNサーバに2つのドメインを割り当てて使うのもありかなと。

いいところ
・Apacheの停止に強い
・リポジトリが壊れてもRでアクセスができるため可用性が高い

悪いところ
・LBがない場合、マスタとスレーブの使い分けが必要


WebDAV Transparent Write-Through Proxyを使う場合


SVN1.5の新機能。WebDAV 透過ライトスループロキシというらしい。

複数サーバ・複数リポジトリの場合(svnsync利用)に似ていて、svnsyncを使うのだけれども、ちょっと違うのが、LBなど使わずにDNSラウンドロビンで2サーバを活用する場合に便利そう。

LBが振り分けを判定するのではなく、SVNが判定する仕組みになっている。

スレーブSVNにリクエストが来た場合、コミットとかのWrite処理だったらマスタに透過的にProxyする。こちらもマスタだけがWrite処理というポリシーになっている。
Readだけなら

Gitのような分散リポジトリ構成を組めるので、理想形と言えば理想。Apache2.2系のmod_proxyを使っているらしいので、Apacheのバージョンに注意が必要。

いいところ
・Apacheの停止に強い
・リポジトリが壊れてもRでアクセスができるため可用性が高い
・LBとかいらない
・WriteはマスタだけになるがRは負荷分散できる

悪いところ
・特になし

参考

Subversionの導入から運用まで、即戦力の一冊。最短距離で目的にたどり着ける、頼れる逆引きリファレンス!リポジドリ、ブランチ、タグなど運用のノウハウも解説... 続き
この本は、Subversionというバックアップのためのソフトについて説明したものです。Windowsの上で動きます。他の環境でも使えますが、入門書ということで... 続き
バージョン管理システム「Subversion」の開発者が執筆したSubversionの解説書。Subversion開発の中心的メンバーである3人の著者が技術的な... 続き
バージョン管理からプロジェクト管理へ。Subversionでコミットするだけ。Webで手軽に「プロジェクト管理」。インストールから運用、トラブル対策まで1冊で丸... 続き

コメントする


画像の中に見える文字を入力してください。

Mike Cohn (著), マイク コーン (著), 安井 力 (翻訳), 角谷 信太郎 (翻訳)
採用した現在のタイトルは、見積りや計画づくりといったプロセスを、アジャイルに進めなければならないと謳っているのだ。見積りと計画づくりがアジャイルでないのに、プロジェクトがアジャイルであるということはありえない。

メアリー・ポッペンディーク (著), トム・ポッペンディーク (著), 高嶋 優子 (翻訳), 天野 勝 (翻訳), 平鍋 健児 (翻訳) 「トヨタ生産方式」を源流にする「リーン開発」をソフトウエア開発に取り入れるための具体的方法を紹介した本です。製造分野から始まったリーン活動は、その原則を理解しないままプラクティスだけを開発分野に適用しようとしても、行き詰るか失敗に終わってしまいます。本書は、リーンの7大原則を「価値」「ムダ」「スピード」「人」「知識」「品質」「パートナー」に整理し、ソフト開発現場にどうしたら効果的に適用できるかを、多くの実例を交えながら具体的に説明します。

著者:Yugui 税込 2,310 円
本書は、他言語でのプログラミング経験を持つ人を対象に、Rubyの特徴、Rubyならではの方法や慣習について解説します。これはRubyの資料を読んで実践的な学習を進めていくために必要な前提知識です。本書はRubyの基礎的な部分とメタクラスやブロック構文のような独自の概念、それらにまつわる文化を説明し、Ruby特有の考え方を知ってもらうことを目的としています。

本書は、Railsの入門からリファレンスまでをわかりやすく解説した書籍です。第1部と第2部では、Railsの背景にある概念について説明し、あっという間に簡単なオンラインストアを開発してみせます。

著者:James Shore, Shane Warden アジャイル開発は人のなせる技である。アジャイル開発を極めるためには、その時々で無数の可能性を評価して最善の方策を選択することを学ぶ必要がある。本書は、あなたがアジャイル開発の「道」を極める手助けをしたい。

daipresents!! ҂̑蕨

tWn{github tWn{Google Code