mediawikiでDBを分離する。

EeePCmediawikiを動かしたとき、SSDへの書き込みを極力減らしたいのでDBサーバを分離したいと考えている。
アプリケーションサーバとDBサーバを分離するメリットは色々あると思うけど、debianのパッケージはあんまりそういうのを考慮されてないのかなあ…。
分離する、と書いてみたけどまっさら環境への導入です。
Debian4.0(etch)で検証。

DBサーバにsqlserverを導入する。

DBサーバ側は普通にaptitudemysql-server-5.0を導入する。
Webサーバ側にmysqlごと突っ込んでしまえば楽っちゃー楽なんだけど。/varと/usrであわせて140MB強の領域を喰ってしまった(30Mくらいはpackageのcacheだと思うけど)ので、できれば上手く分離したいかなと。

Webサーバにmediawikiを導入する。

まっさらな状態でMediaWikiを入れようとすると依存関係のせいで大量のパッケージが導入される。スクリプトにしてもいいけど、ちまちまと手作業で、関係なさそうなブロックから放り込んでいってみる。
始めからaptitudeに--without-recommendsを指定してやればmysql-serverは入らないので、そっちのほうがいいかも。というか、latexとかも普通はいらないよね。apt-get使いには関係ない話か…。

WebサーバからDBサーバに接続できることを確認する。

mysqlのインストール状態では他のサーバから接続できないので、設定を修正する。
/etc/mysql/my.cnfのbind_addressをコメントアウト*1するか特定のIFのIPにするか。

bind_address = 127.0.0.1


つぎに、Webサーバから接続できるdatabaseとuserを作製する。

mysql> create database wikidb;
mysql> create user wikiuser@db_addr identified by '******';
mysql> grant all on wikidb.* to wikiuser@db_addr; *2


念のため、DBに接続できるか確認。

# mysql -h db_addr -u wikiuser -p
password: *****
mysql> use wikidb;
mysql> create table testtbl ( var1 integer );
...

MediaWikiのセットアップを行う。

ブラウザ等でhttp://web_addr/mediawikiにアクセスして、各種設定を行う。以下、若干変更のあるところだけ。

  • Database host : 当然、db_addrを指定する。
  • Database name : create databaseしたときに指定した名前。wikidb
  • Database user : create userしたときに指定した名前。wikiuser
  • Database password : 同様。
  • SuperUser : 今回はDatabase等作成済みなので…wikiuser
  • SuperUser password : 同様。wikiuserのパスワード

ベンチとか。

例によってapabhe benchで速度を検証。今回はvmwareで構築したけど、単体ホストのときよりパフォーマンス的には1/2程度というところ。CPU使用率は、Webサーバが50%〜60%、DBサーバが10%前後となっていた。メモリの使用量はapacheが5M程度、mysqlが30M程度なので、負担を減らすというほどの効果はないだろうなあ。

*1:さすがに全公開というのもなんだよなあ。お仕事だったらWebサーバとDBサーバだけのセグメントを作ってそこだけで通信するようにするんだけど。せめてWebサーバとDBサーバでeth0:0みたいな仮想NICを作って、データリンク層だけでも分離させておく意味があるかどうかだなあ。

*2:select, insert, update, delete, alter, lockが出来ればいいらしい。ん?create tableはいいのか?