2010年03月12日

Apache 2.3向けモジュールを作成しました: mod_session_memcache

はてなブックマークに登録

これまで数回に渡ってApache 2.3のmod_sessionとmod_auth_formを探ってきましたが、このたび、セッションストレージにmemcacheを使ってみてはどうかということで、新規のApacheモジュールとしてmod_session_memcacheを開発しました。こちらで公開いたします。

http://log.blog.klab.org/support/mod_session_memcache/mod_session_memcache-0.1.0.tar.gz
mod_session_memcache

ビルドにあたっては、Apache 2.3のソースパッケージを解凍した先のディレクトリでパッチ形式で扱います。まず、以前の紹介と同じようにhttpd本体と上記mod_session_memcacheのそれぞれtarballを取得して解凍したら、出来上がったディレクトリに移動してpatchコマンドを使用します。

$ tar zxvf mod_session_memcache-0.1.0.tar.gz
$ tar zxvf httpd-2.3.5-alpha.tar.gz
$ cd httpd-2.3.5-alpha
$ patch -p1 < ../mod_session_memcache/httpd-2.3-mod-session-memcache.patch 
patching file configure
patching file modules/session/config.m4
patching file modules/session/mod_session_memcache.c

あとは前回と同じようにaprとapr-utilを用意してconfigureしてmakeすれば、patchによってできたmod_session_memcache.cも一緒にビルドしてくれます。

httpd.confにはLoadModuleを追加し、前回SessionDBCookieNameディレクティブを追加した箇所を下記のように書き換えればOKです。また、セッションをDBに書き込んだり参照したりするためのDBDPrepareSQLディレクティブを設定しましたが、これらは不要になります。

LoadModule session_memcache_module modules/mod_session_memcache.so

...

# 下記のDBDPrepareSQLは不要になります。
#DBDPrepareSQL "DELETE FROM session WHERE session_key = %s" deletesession
#DBDPrepareSQL "UPDATE session SET session_value = %s, session_expire_time = %lld WHERE session_key = %s" updatesession
#DBDPrepareSQL "INSERT INTO session (session_value, session_expire_time, session_key) values (%s, %lld, %s)" insertsession
#DBDPrepareSQL "SELECT session_value FROM session WHERE session_key = %s AND (session_expire_time = 0 OR session_expire_time > %lld)" selectsession
#DBDPrepareSQL "DELETE FROM session WHERE session_expire_time != 0 AND session_expire_time < %lld" cleansession

...

<LocationMatch "/mypage/*">
  ...
  Session On
  SessionMemcacheCookieName session path=/      # ←SessionDBCookieNameからの書き換え
  SessionMemcacheServer "localhost:11211"       # ←追加
  SessionMaxAge 10
  ...
</LodationMatch>

SessionMemcacheServerは、memcachedが動作しているサーバアドレスおよびポートを指定して下さい。SessionMaxAgeによってセッションのexpireも設定できます。

このモジュールの実装そのものはmod_session_dbdを流用し、データベースのアクセスのための関数(apr_dbd_xxx)をそれぞれmemcache APIに置き換えただけのもので非常にシンプルな作りになっていますが、充分動作します。よろしければ是非おためしください。

また、このmod_session_memcacheモジュールをApache開発チームのサードパーティー開発のモジュールデータベースに登録申請を出しました。

http://modules.apache.org/register.php
Apache Module Registry

登録が完了して受理されるかどうかは1週間ほどかかるとのことなので、こちらの結果も今後追ってご報告したいと思います。

klab_gijutsu2 at 20:22│Comments(0)TrackBack(0)

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント