redis memcachedでレプリケーションの設定をしてみた
redis memcachedって?
redis memcachedともに、イネーブラ型でオンメモリのKVS。
メモリ上で動作するので動作が高速なことで有名な両者。レプリケーションできれば幸せそうなので、やってみる。
てか、イネーブラ型って?
他の製品との組み合わせによって効果を発揮するもの
例えば、memcachedはMySQLなどと組み合わせ、読み出しの性能を向上させるために利用されている。
テストサーバー構成
CentOS6.5 メモリ2GB
- Master : 192.168.100.10
- Slave01 : 192.168.100.11
- Slave02 : 192.168.100.12
redis編
redisをインストール
# yum -y install redis
Master,Slave01,Slave02で実行
redisを起動
# service redis start
Starting redis-server: [ OK ]
Master,Slave01,Slave02で実行
redisは、デフォルトで6379ポートを利用するようになっている。
/etc/redis.conf にて変更可能。
詳しい設定に関しては、公式ドキュメントを参照してください。
設定ファイル — redis 2.0.3 documentation
redisレプリケーションの設定
//コンフィグファイルの設定
# vi /etc/redis.conf ...
...
################################# REPLICATION #################################
...
slaveof 192.168.100.10 6379 #これ追加
...
ポートが空いてない場合は、iptablesでポートを開放する
-A INPUT -s 192.168.100.11 -p tcp --dport 6379 -j ACCEPT
-A INPUT -s 192.168.100.12 -p tcp --dport 6379 -j ACCEPT
再起動
# service redis restart
Slave01,Slave02で実行
redisレプリケーション確認
Masterで確認
# redis-cli info
...
role:master
slave0:192.168.100.11,54393,online
slave1:192.168.100.12,48366,online
...
role:masterの箇所にスレーブの一覧が出てくればOK
phpで動作確認
PHPのバージョンは5.6。redisを利用するにはpeclの拡張を入れる必要がある。
# yum -y install php-pecl-redis
# vi ./redis.php
実行してみる
string(5) "value"
string(5) "value"
string(5) "value"
レプリケーションできているようでした。
おわり( ^ω^)
memcached編
memcachedにはレプリケーションの機能が備わっておらず、レプリケーションを利用するには、他のミドルウェアを使わないと行けない。
今回は、KLabが開発したmemcachedにレプリケーション機能をつけた「repcached」を利用する。
repcached - add data replication feature to memcached
こちらのサイトを参考にさせて頂きました。
repcachedをインストールして、memcachedをレプリケーションしてみる | 本日も乙
repcachedのインストール
# yum install libevent-devel
# wget http://sourceforge.net/projects/repcached/files/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz
# tar zxvf memcached-1.2.8-repcached-2.2.1.tar.gz
# cd memcached-1.2.8-repcached-2.2.1
# ./configure --enable-replication
# make
# make install
# memcached -h
memcached 1.2.8
repcached 2.2.1
ポートが空いてない場合は、iptablesでポートを開放する
memcachedのポート番号はデフォルトで11211だが、レプリケーションするために必要なポート番号がデフォルトで11212なので、レプリケーション対象に対して11212を開けておく必要があるらしい。
-A INPUT -s 192.168.100.11 -p tcp --dport 11212 -j ACCEPT
-A INPUT -s 192.168.100.12 -p tcp --dport 11212 -j ACCEPT
ユーザーの追加
# useradd -M -s /sbin/nologin memcached
起動スクリプトを編集
こちらを参照→http://nagamoo.blogspot.jp/20120701_archive.html
レプリケーションの設定
Slaveで
# /etc/sysconfig/repcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="1024"
OPTIONS=""
REPHOST="192.168.100.10"
自動起動の設定
# chkconfig add repcached
# chkconfig repcached on
# service repcached start
Starting repcached(memcached): [ OK ]
レプリケーションの確認
# ps aux | grep memcached 501 4895 0.0 0.1 17656 956 ? Ss 08:06 0:00 /usr/local/bin/memcached -d -x 192.168.100.10 -p 11211 -u memcached -m 1024 -c 1024 -P /var/run/memcached/repcached.pid
-x 192.168.100.10 これがついていれば大丈夫らしい。
phpで動作確認
# yum -y install php-pecl-memcache
\ # /usr/bin/php ./memcached.php
string(5) "value"
string(5) "value"
bool(false)
おわり(´・ω・`)