repcached の設定方法
[History] [Last Modified] (2015/02/04 01:30:14)
ここは
趣味のプログラミングを楽しむための情報共有サービス。記事の一部は有料設定にして公開できます。 詳しくはこちらをクリック📝
Recent posts
Popular pages

概要

repcached はキャッシュサーバに用いられる Memcached 二台が相互にレプリケーションを行えるように KLab が機能拡張したものです。ただ、だいぶ前に開発が止まってしまっているようです。そもそもキャッシュサーバには大切なデータは格納しない運用が通常であり、レプリケーションする意味は MySQL などのデータベースサーバほど高くはないため需要がなかったのでしょうか。とはいえ最近流行の Redis にはレプリケーション機能があり、需要がないことはないと思われます。何か他の要因があるのでしょうか。いずれにせよ自分のアプリケーションでそのまま使用することは若干ためらわれますが、それなりに有名ですので簡単に設定方法をまとめてみます。

ソースコードの入手

公式サイトからリンクをたどっていき最新版をダウンロードします。2015-2-03 現在の最新版は、2011-12-13 に更新された形跡のある memcached-1.2.8-repcached-2.2.1.tar.gz です。

インストール

依存ソフトウェアのインストール

既にインストールされている場合には本手順は不要です。

$ sudo yum install libtool libevent-devel

解凍、ビルド、インストール

$ tar zxvf memcached-1.2.8-repcached-2.2.1.tar.gz
$ cd memcached-1.2.8-repcached-2.2.1
$ ./configure --enable-replication --prefix=/usr/local/memcached-1.2.8-repcached-2.2
$ make
$ sudo make install
$ sudo ln -s /usr/local/memcached-1.2.8-repcached-2.2 /usr/local/repcached

環境変数の追加

$ export PATH=/usr/local/repcached/bin:$PATH
$ export MANPATH=/usr/local/repcached/share/man:$MANPATH

あるいは例えば以下のファイルに上記の export 設定を記述しておくとログイン時に自動で読み込まれます。

$ sudo vi /etc/profile.d/memcached.sh
$ source /etc/profile.d/memcached.sh

以上の設定が正常に完了していることは例えば以下のコマンドで確認できます。

$ which memcached
$ man memcached

動作確認

起動

192.168.33.101 および 192.168.33.102 それぞれで repcached を起動します。自分自身にコピーしてくるレプリケーション対象は "-x" オプションで指定します。二台両方で "-x" オプションを付与することで双方向のマルチマスターレプリケーションが実現できます。

192.168.33.101

$ memcached -x 192.168.33.102 -v

192.168.33.102

$ memcached -x 192.168.33.101 -v

レプリケーション

別ターミナルを起動して二台のマシンで telnet を実行します。

192.168.33.101

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set hello 0 0 8     ← 8 バイトを hello をキーとして set する命令
12341234       ← 8 バイトの内容を指定してエンター
STORED
get hello     ← 確かに set されたことを get して確認
VALUE hello 0 8
12341234
END
quit         ← 終了
Connection closed by foreign host.

192.168.33.102

$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get hello     ← レプリケーションされたため set せずとも get できる
VALUE hello 0 8
12341234
END
quit     ← 終了
Connection closed by foreign host.

以上で 192.168.33.101 → 192.168.33.102 のレプリケーションができていることが確認できました。192.168.33.101 ← 192.168.33.102 のレプリケーションも同様の手順で確認できます。

デーモン化

chkconfig コマンドによって repcached をデーモン化する例を示します。

設定ファイルの作成

以下のファイルを作成します。

/etc/init.d/repcached

#!/bin/sh
#
# memcached - high-performance memory object caching system
#
# chkconfig: 345 55 45
# description: memcached is a flexible memory object caching daemon.
# processname: memcached
# config: /etc/sysconfig/repcached
# pidfile: /var/run/memcached/repcached.pid
#

# Source function library.
. /etc/rc.d/init.d/functions

PORT=11211
USER=memcached
MAXCONN=1024
CACHESIZE=640
OPTIONS=""
REPHOST=127.0.0.1

if [ -f /etc/sysconfig/repcached ]; then
    . /etc/sysconfig/repcached
fi

PROG="repcached(memcached)"
EXEC=/usr/local/repcached/bin/memcached
PIDFILE=/var/run/memcached/repcached.pid
LOCKFILE=/var/lock/subsys/repcached
RETVAL=0

start () {
    echo -n $"Starting $PROG: "
    # insure that /var/run/memcached has proper permissions
    chown $USER /var/run/memcached
    daemon $EXEC -d -x $REPHOST -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P $PIDFILE $OPTIONS
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch $LOCKFILE
}
stop () {
    echo -n $"Stopping $PROG: "
    killproc -p $PIDFILE $EXEC
    RETVAL=$?
    echo
    if [ $RETVAL -eq 0 ]; then
        rm -f $LOCKFILE $PIDFILE
    fi
}
restart () {
    stop
    start
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status -p $PIDFILE $PROG
        ;;
  restart|reload)
        restart
        ;;
  condrestart)
        [ -f $LOCKFILE ] && restart || :
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
        RETVAL=2
esac

exit $RETVAL

設置したファイルの権限を適切に設定します。

$ sudo chmod 755 /etc/init.d/repcached

その他の設定

PID ファイルを格納するディレクトリも作成して権限を設定します。

$ sudo mkdir /var/run/memcached

設定ファイルを用意します。

$ sudo vi /etc/sysconfig/repcached

192.168.33.101

PORT=11211
USER=memcached
MAXCONN=1024
CACHESIZE=640
OPTIONS=""
REPHOST=192.168.33.102

192.168.33.102

PORT=11211
USER=memcached
MAXCONN=1024
CACHESIZE=640
OPTIONS=""
REPHOST=192.168.33.101

repcached をデーモン実行するユーザを作成します。ログインできないようにホームディレクトリは作成せず (-s /sbin/nologin) パスワードも設定しません (-M):

$ sudo useradd -M -s /sbin/nologin memcached

chkconfig への登録

$ sudo chkconfig --add repcached
$ sudo chkconfig repcached on

正常に動作していることを確認してみましょう。

$ sudo chkconfig --list | grep repcached
$ sudo service repcached status
$ sudo service repcached restart
$ sudo service repcached stop
$ sudo service repcached start
Related pages