スタッフブログ

ローハイドのスタッフが、日常のこと、ネットで見つけた便利な情報、仕事に役立つとっておきのテクニックを紹介します。

Fight! the Rawhide

2007年7月10日4:05

トイスタでmemcache!

STAFF BLOG Comments (0)

よこはま

最近なにかと話題のmemcache!
いろんなところでお話を聞きますね。なんだかとにかく早いだとか・・・
様はセッションストレージをファイルシステムやデータベースに指定するのではなく、メモリー上で簡潔させてしまいましょうよって解釈でいいのだろうか・・・

とりあえず、本家より抜粋。

memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.

ふむふむ、
へーデーモンなんだ。データベース負荷を軽減させることによってウェブアプリを処理を加速させる。で、高性能なキャッシュ分配メモリオブジェクトですって。

確かに興味津々です。では早速インストール!


yum install memcached
Loading “installonlyn” plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Nothing to do

え!?ない?無いですよ・・・。なんで、devianとかあるっぽいのに!しかたがないので、ソースから、


wget http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz
tar zxvf memcached-1.2.2.tar.gz
cd memcached-1.2.2

とりあえず、READMEを読んでみるとlibeventをインストールしろよと、言っている。
なので、


wget http://www.monkey.org/~provos/libevent-1.3.tar.gz
tar zxvf libevent-1.3.tar.gz
./configure
make
make install
make verify

テストもどうやら全てOKだったみたい。では、いよいよ本命!


cd memcached-1.2.2
./configure
make
make install

これでインストールは完了です。

では、またまた本家より抜粋。
First, you start up the memcached daemon on as many spare machines as you have. The daemon has no configuration file, just a few command line options, only 3 or 4 of which you’ll likely use:

# ./memcached -d -m 2048 -l 10.0.0.40 -p 11211

This starts memcached up as a daemon, using 2GB of memory, and listening on IP 10.0.0.40, port 11211. Because a 32-bit process can only address 4GB of virtual memory (usually significantly less, depending on your operating system), if you have a 32-bit server with 4-64GB of memory using PAE you can just run multiple processes on the machine, each using 2 or 3GB of memory.

どうやらコマンドラインからデーモンを起動させるみたいで、また設定ファイルは無いようだ。さらに、この例だどmemcache様に2Gのメモリー容量を確保して、さらに自分のIPアドレス(これって127.0.0.1とかじゃ、だめなのかな?)。で、最後はポート番号の様だ。なるほど、OSに依存するけどとりあえずは32bitの場合はメモリー領域4Gの制限があるとか、なんとか・・・。とりあえずトイスタサーバは32bitプロセッサなので、このとおりに起動させてみよう。

./memcached -d -m 2048 -l xxx.xxx.xxx.xxx -p 11211
./memcached: error while loading shared libraries: libevent-1.3.so.1: cannot open shared object file: No such file or directory

なんかとっても嫌なエラーがでました。さっきlibeventはインストールしたはずだが。とにかく、
/usr/local/lib/の下にある、libevent-1.3.so.1は見てくれていないようなので、こいつを
/usr/libにシンボリックリンクを作成しました。で、

もう一回!

./memcached -d -m 2048 -l xxx.xxx.xxx.xxx -p 11211

注)rootで実行すると起こられます。確かにこの手のライブラリでroot権限ありえない。。。その場合は-uオプションで、実行ユーザを指定してください。memcache用にユーザを作成しておくと安全かもしれません。
もちろんmemcacheは起動ファイルを作成しました。

netstatでもしっかり確認がとれました。
tcp 0 0 210.171.169.93:11211 0.0.0.0:* LISTEN

ちなみに、freeで確認したところトイスタサーバは512Mしかメモリを積んでいないのに、2Gでmemcachedを起動したら何事もなく起動したけど、Railsとの連携でセッションが全く保存されないという事態に陥りました。まったくログとか出ないので、結構はまりました・・・

では、ここからが本番です。実際のRoRをmemcacheで動かしてみます。

gem install memcache-client

で、enviroments.rbを編集。
config.action_controller.session_store = :mem_cache_store

で、アプリの再起動。こんな感じで終了です。
うむぅ、、、ちょっと早くなった気がする。

まぁ、まとめると今日は『もう一回!』って言いたかっただけなので、とりあえずはこれで寝るとしよう。

トイスタでしばらく様子をみて問題がなければマタタビさんにも、入れてあげることにしよう。

コメントする