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
関連記事
- 使い所が難しいマイナーな運用コマンドコマンドのエイリアスを登録する (update-alternatives) mybin という名前のコマンドを登録 sudo update-alternatives --install /usr/local/bin/mybin mybin /usr/bin/echo 10 sudo update-alternatives --install /usr/local/bin/mybin mybin /...
- ipコマンドの基本的な使い方ネットワーク関連のコマンドはたくさんあります。しかしながら、その一部は ip コマンドに集約できます。 基本形 ("man ip" より抜粋) $ ip OBJECT COMMAND OBJECT: link, neigh, addr, route (等) COMMAND: show, add, delete (等) データリンク層のネットワークデバイス情報 (ifconfigコマンドの代用) M...
- プロセス関連のコマンドプロセスID関連 (ps, pgrep, pkill) 全プロセスを表示するためには $ ps ax とすればよく、その表示を見やすくするためには "u" と "w" を追加して $ ps auxw とすればよいです。表示件数自体は同じです。そのうち特定のコマンドのプロセスIDだけを表示したい場合は $ ps ax | grep 'my_script' | grep -v grep | awk '...
- rpmとyumのチートシートrpm (RedHat Package Manager または RPM Package Manager) はRedHat系のパッケージ管理ツールで、yum (Yellowdog Updater Modified) は内部的にrpmを実行するメタパッケージ管理ツールです。rpmには柔軟性がありyumには利便性があります。 rpmは "rpmパッケージファイル" があれば何でもインストールできますが、...
- メモリおよびディスクリソースを調査するために便利なコマンドおよび周辺知識メモリ使用量を表示 (free) 既定ではキロバイト単位で表示されます。オプション "-b", "-k", "-m", "-g" を付与して実行するとそれぞれバイト、キロ、メガ、ギガで表示されます。 $ free total used free shared buffers cached Mem: 510824 ...