redis memcachedでレプリケーションの設定をしてみた

 

f:id:isopan:20150305163436p:plain

redis memcachedって?

redis memcachedともに、イネーブラ型でオンメモリのKVS。

メモリ上で動作するので動作が高速なことで有名な両者。レプリケーションできれば幸せそうなので、やってみる。

てか、イネーブラ型って?

他の製品との組み合わせによって効果を発揮するもの

例えば、memcachedMySQLなどと組み合わせ、読み出しの性能を向上させるために利用されている。

テストサーバー構成

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 ...

#bind 127.0.0.1  #コメントアウト

...

################################# 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

gistc06000b0ae61d8149ccf

 

実行してみる

# /usr/bin/php ./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

# vi ./memcached.php

gist9d2e34c5fe57e4a9cbdf

 

\ # /usr/bin/php ./memcached.php

string(5) "value"

string(5) "value"

bool(false)

 

複数台のレプリケーションはできないようでした。

おわり(´・ω・`)

おわり(´・ω・`)

おわり(´・ω・`)