memcached (概要 & インストール)

Debian etchmemcachedを導入した時の作業メモ。(概要&インストール編)

memcachedとは

C言語で書かれた高速なネットワーク対応の分散メモリキャッシュサーバ。
memcached - a distributed memory object caching system

memcachedの特徴

  • シンプルなテキストプロトコル
  • メモリストレージ
  • クライアントライブラリによる分散
    • memcached自体に分散機能は実装されていない。

memcachedのインストール

memcachedは、イベントハンドリングにlibeventを利用するので、libeventをインストールします。

$ sudo aptitude install libevent1 libevent-dev

次にmemcachedをインストールしますが、etchのパッケージはバージョンが古い*1ので、ソースからインストールします。
最新版は、こちらからダウンロードします。

$ wget http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz
$ gzip -dc memcached-1.2.6.tar.gz | tar xvf -
$ cd memcached-1.2.6
$ ./configure 
$ make
$ sudo make install

memcachedの起動

(フォアグラウンド)
$ memcached -p 11211 -m 64m -vv
(バックグラウンド(デーモン化))
$ memcached -p 11211 -m 64m -d

(主なオプション)

  • -p TCP port number to listen on (default: 11211)
  • -d run as a daemon
  • -u assume identity of (only when run as root)
  • -m max memory to use for items in megabytes, default is 64 MB
  • -M return error on memory exhausted (rather than removing items)
  • -c max simultaneous connections, default is 1024
  • -v verbose (print errors/warnings while in event loop)
  • -vv very verbose (also print client commands/reponses)
  • -f chunk size growth factor, default 1.25

telnetで接続確認。

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
STAT pid 2261
STAT uptime 17
STAT time 1224362708
STAT version 1.2.6
STAT pointer_size 32
STAT rusage_user 0.004000
STAT rusage_system 0.020001
STAT curr_items 0
STAT total_items 0
STAT bytes 0
STAT curr_connections 2
STAT total_connections 3
STAT connection_structures 3
STAT cmd_get 0
STAT cmd_set 0
STAT get_hits 0
STAT get_misses 0
STAT evictions 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 67108864
STAT threads 1
END
version
VERSION 1.2.6
quit
Connection closed by foreign host.

daemontoolsによるmemcachedの起動

memcached 1.2.5で、プロセスが落ちる事象があったようなので、daemontoolsで起動・監視を行います。
まずは、daemontoolsのインストールします。

$ sudo aptitude install daemontools-installer
$ sudo build-daemontools
Enter a directory where you would like to do this [/tmp/daemontools]
Which format would you like to use? [fD]
Do you want to remove all files in /tmp/daemontools, except daemontools_0.76-9_i386.deb now? [Yn]
Do you want to install daemontools_0.76-9_i386.deb now? [Yn]
Do you want to purge daemontools-installer now? [yN] 

Good luck!

/etc/inittabにsvscanbootの自動起動スクリプトが追記されます。

### /etc/inittab ###
SV:123456:respawn:/command/svscanboot

memcachedデーモンの起動スクリプトを作成します。

(ディレクトリ作成)
# mkdir /var/daemontools/memcached
# mkdir /var/daemontools/memcached/log
# mkdir /var/daemontools/memcached/log/main
# ln -s /var/daemontools/memcached /service
(起動スクリプト)
### /var/daemontools/memcached/run ###
#!/bin/sh
PORT=11211
USER=nobody
MAXCONN=1024
CACHESIZE=64
GROWTHFACT=1.25
OPTIONS=""

exec 2>&1
exec /usr/local/bin/memcached -p $PORT -u $USER  -m $CACHESIZE -c $MAXCONN -f $GROWTHFACT $OPTIONS

### /var/daemontools/memcached/log/run ###
#!/bin/sh

exec 2>&1
exec /usr/local/bin/multilog t ./main

(実行権限付与)
# chmod +x /var/daemontools/memcached/run
# chmod +x /var/daemontools/memcached/log/run

*1:1.1.12