Subversion WebDAV transparent write-through proxy を試してみた〜導入編〜
Subversion 1.5 のリリースより、レプリケーション機能が追加されています。
マスタサーバ、スレーブサーバの構成であり、ユーザからのcheck outやexportなどの
読み込みアクセスに関しては、スレーブサーバが応答し、commitやimportなどの
書き込みアクセスについてはスレーブサーバはマスタサーバにリクエストを
スルーするというものです。
この機能は、マスターサーバーが遠隔地に配置されており、
その間の回線が遅いときなどに役に立ちます。
それでは早速、テスト環境を整備していきます。
OSはCentOS5.2を使用し、マスタサーバおよびスレーブサーバに
インストールするミドルウェアは以下の通りです。
- apache 2.2.10
- subversion 1.5.4
- subversion-deps 1.5.4
ちなみに WebDAV transparent write-through proxy 機能を利用するためには、
subversionが1.5以降であることと、apacheが2.2系である必要があります。
■ apacheのインストール
# tar xvzf httpd-2.2.10.tar.gz
# cd httpd-2.2.10
# ./configure \
--prefix=/usr/local/apache/2.2.10 \
--enable-dav --enable-dav-fs \
--enable-rewrite \
--enable-proxy \
--enable-ssl \
--enable-cgid \
--with-ldap --enable-authnz-ldap --enable-ldap \
--enable-headers \
--with-mpm=prefork
# make
# make install
※マスタサーバについては、enable-proxyオプションはつけなくてもよいです。
■ subversionのインストール
# tar xvzf subversion-1.5.4.tar.gz
# tar xvzf subversion-deps-1.5.4.tar.gz
# cd subversion-1.5.4
# ./configure \
--prefix=/usr/local/subversion/1.5.4 \
--with-apxs=/usr/local/apache/2.2.10/bin/apxs
# make
# make install
ミドルウェアのインストールが終了したら、
以下のような構成で設定をしていきます。
- マスタサーバ (192.168.1.16)
- アクセス用 http://192.168.1.16/svn/
- スレーブサーバ (192.168.1.17)
- svnsync用 http://192.168.1.17/sync/
- アクセス用 http://192.168.1.17/svn/
マスタサーバでリポジトリの作成
リポジトリを作成したあとは、HTTPアクセスができるようにします。
[svn-master]$ vi /usr/local/apache/2.2.10/conf/httpd.conf
・・・(略)
# for subversion
DAV svn
SVNPath /var/svn/repos/test
それでは、apacheを起動して、テストコミットをしてみます。
[svn-master]$ sudo /usr/local/apache/2.2.10/bin/apachectl start
[svn-master]$ svn co http://localhost/svn
[svn-master]$ cd svn
[svn-master]$ touch subversion.txt
[svn-master]$ svn add subversion.txt
[svn-master]$ svn ci -m "Test Commit"
送信しています subversion.txt
ファイルのデータを送信しています .
リビジョン 1 をコミットしました。
チェックアウトおよびコミットが正常に操作できることが確認できました。
スレーブサーバでの設定
まずはじめに、スレーブサーバではマスタサーバのリポジトリと同期をとるためのリポジトリを作成します。
レプリケーション機能を利用するために、Subversionのリビジョンログの変更を許可する設定をしておきます。#処理は不要です。
[svn-slave]$ vi /var/svn/repos/test/hooks/pre-revprop-change
#!/bin/sh
exit 0
フックスクリプトには実行権限を与えておきます。
[svn-slave]$ chmod +x /var/svn/repos/test/hooks/pre-revprop-change
続いてapacheの設定です。
[svn-slave]$ sudo vi /usr/local/apache/2.2.10/conf/httpd.conf
・・・(略)
# for subversion
# クライアントアクセス用
DAV svn
SVNPath /var/svn/repos/test
SVNMasterURI http://192.168.1.16/svn
apacheの設定が完了したらapacheを起動してきます。
[svn-slave]$ sudo /usr/local/apache/2.2.10/bin/apachectl start
ここまでできたら、マスタサーバのリポジトリとスレーブサーバのリポジトリの同期をとりましょう。#初回のみinitで実施する必要があります。
[svn-slave]$ svnsync init http://192.168.1.17/sync/ http://192.168.1.16/svn/
リビジョン 1 の属性をコピーしました。
マスタサーバでの設定
スレーブサーバのリポジトリと同期がとれましたので、書き込み処理(commit)が発生した場合に、スレーブサーバのリポジトリと常に同期するようにします。
[svn-master]$ vi /var/svn/repos/test/hooks/post-commit
#!/bin/sh
/usr/local/subversion/1.5.4/bin/svnsync sync http://192.168.1.17/sync/
[svn-master]$ chmod +x /var/svn/repos/test/hooks/post-commit
最後にマスターサーバーのpost-revprop-changeを設定しておきます。
[svn-master]$ vi /var/svn/repos/test/hooks/pre-revprop-change
#!/bin/sh
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"
/usr/local/subversion/1.5.4/bin/svnsync copy-revprops http://192.168.1.17/sync/ $REV
[svn-master]$ chmod +x /var/svn/repos/test/hooks/pre-revprop-change
これで WebDAV Transparent Write-Through Proxy で動作させるための
設定は終了ですので、スレーブサーバのリポジトリからcheckoutし、
ファイルを編集してコミットし、マスタサーバおよびスレーブサーバの
リポジトリが更新されることを確認してみてください。
今回、WebDAV Transparent Write-Through Proxy の基本動作は確認できましたので、
次回のエントリでは、本システムの一部が正常に動作していない場合に、
WebDAV Transparent Write-Through Proxy がどのような振る舞いをするかを
確認してみたいと思います。