memcached-1.4.5 + repcached のRPM作成

はじめに

rpmbuildする際、CPUコアがシングルコアだと処理が途中で止まってしまう。
2コア以上の環境でbuildすること。

RPM作成まで


# yum install libevent libevent-devel gcc

  • rpmパッケージ作成のため、rpm-buildパッケージをインストール


# yum install rpm-build
build用のディレクトリも独自に用意する。


# cd /usr/src/
# cp -rp redhat redhat.org
# mkdir -p /home/daggun/rpm/{BUILD,SRPMS,SPECS,SOURCES,RPMS}
# chown -R daggun:daggun /home/daggun/rpm
# ln -s /home/daggun/rpm redhat

ここから一般ユーザーでの作業。~

  • rpmパッケージの定義ファイルを用意しておく(かなり雑)


$ vim /home/daggun/.rpmmacros
----

%_topdir /home/daggun/rpm

%packager daggun

----

  • memcachedのソースと、repcachedを適用するためのパッチを取得

※パッチ提供者のHPはこちら。1.4.7向けのパッチも公開されている。
http://mdounin.ru/

  • パッチ適用


$ tar zxvf memcached-1.4.5.tar.gz
$ gunzip repcached-2.3-1.4.5.patch.gz
$ patch -p0 -i repcached-2.3-1.4.5.patch

  • configure処理


$ cd /home/daggun/rpm/SOURCES/memcached-1.4.5
$ ./configure --enable-64bit --build=x86_64-unknown-linux --enable-replication
$ cp -p memcached.spec ../../SPECS/

  • specfile修正(replication対応)


$ vim ../../SPECS/memcached.spec
 - %configure
 + %configure \
 + --enable-replication

  • tarball準備


$ cd ../
$ mv memcached-1.4.5.tar.gz memcached-1.4.5.tar.gz.org
$ tar zcvf memcached-1.4.5.tar.gz memcached-1.4.5


$ rpmbuild -ba ../SPECS/memcached.spec


ls -lR ../ | grep rpm

RPMインストール

インストールと設定はrootアカウントでOK。

  • rpmインストール


# rpm -ivh memcached-1.4.5-1.x86_64.rpm /usr/src/redhat/RPMS/x86_64/

memcached設定

以下のサーバ構成で動作確認する。

  • サーバ1
    • OS:centos5.6
    • サーバ名:mem_master
    • IPアドレス:192.168.1.20/24
  • サーバ2
    • OS:centos5.6
    • サーバ名:mem_slave
    • IPアドレス:192.168.1.21/24
memcached定義ファイル

memcached起動時のパラメータ定義ファイルを作成。
レプリケーションポートはデフォルトの11212とする。
レプリケーション方向は mem_master -> mem_slave を想定する。

  • mem_masterパラメータ設定
    • vim /etc/sysconfig/memcached
      • PORT="11211"
      • USER="nobody"
      • MAXCONN="1024"
      • CACHESIZE="64"
      • OPTIONS=""

  • mem_slaveパラメータ設定
    • vim /etc/sysconfig/memcached
      • PORT="11211"
      • USER="nobody"
      • MAXCONN="1024"
      • CACHESIZE="64"
      • OPTIONS="-x mem_slave"
memcached 起動

mem_master、mem_slaveでそれぞれmemcachedサービスを起動する。


# /etc/init.d/memcached start

レプリケーション確認

下記のようにsetした値がレプリケーションされている事を確認する。

  • mem_master
    • 1. setコマンドで値を投入
    • 2. getコマンドで値を取得
  • mem_slave
    • 3. getコマンドでmaster側で投入したキー値を取得

では確認してみる。

  • 1. setコマンドで値を投入

# telnet localhost 11211

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

set daggun 0 0 5

world

STORED

    • 2. getコマンドで値を取得

get daggun

VALUE daggun 0 5

world

END

quit

    • 3. getコマンドでmaster側で投入したキー値を取得
# telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get daggun
VALUE daggun 0 5
world
END
quit

終わりに

双方向でのレプリケーション(マルチマスタ)とする場合は、mem_master側の定義ファイルで、 mem_slave側へのレプリケーション設定を追加すればよい。