RepcachedはMemcached主従レプリケーション機能を実現


RepcachedはMemcached主従レプリケーション機能を実現
さぎょうげんり
repcachedはmemcachedレプリケーションの機能を実現しています.これは単一のmaster単一slaveのスキームですが、master/slaveはすべて読み書き可能で、互いに同期することができます.masterが壊れてslaveが接続が切れたことを検出すると、自動的にlistenされてmasterになります.このとき、壊れたmasterはslaveに有効になり、それらの間で役割を交換してこそ、レプリケーション機能を維持することができます.つまり、masterにはプリエンプト機能がありません.slaveが壊れた場合、masterは接続が切れたことを検出し、新しいslaveの参加を再listenで待つことになります.
 
シーンの適用
memcachedでセッション共有や他のサービスを行う場合、memcachedの単一の障害が発生し、memcachedがダウンタイムした場合、システム全体のユーザーがログインできません.
この場合,repcachedをmemcachedの主従冗長とする.
 
Repcachedダウンロードアドレス
http://sourceforge.net/projects/repcached/files/repcached/
 
Repcached取付方式
Repcachedには2つのインストール方法があります.
    1.パッチ・バージョンのインストールは、memcachedのバージョンをインストールしてから、Repcachedパッチのバージョンをインストールします.
    2.統合バージョンインストール直接インストール統合バージョンのmemcached
 
方法一:パッチバージョンのインストール
1.Memcacheのインストール方法については、ブログを参照してください.http://ultrasql.blog.51cto.com/9591438/1632179
2.対応するrepcachedバージョンのパッチインストールファイルをダウンロードする:インストールされたmemcahcedバージョンが1.2.8であると仮定し、このバージョンの最新のパッチをダウンロードする:
wget http://softlayer-dal.dl.sourceforge.net/project/repcached/repcached/2.2.1-1.2.8/repcached-2.2.1-1.2.8.patch.gz    
gzip -cd ../repcached-2.2.1-1.2.8.patch.gz | patch -p1    
./configure --enable-replication    
make && make install

 
方式二:バージョンインストールの統合
1.libeventのインストール:
cd /tmp    
wget http://downloads.sourceforge.net/levent/libevent-2.0.22-stable.tar.gz    
tar zxvf libevent-2.0.22-stable.tar.gz    
cd libevent-2.0.22-stable    
./configure --prefix=/usr/local/lib    
make && make install

2.libeventのライブラリファイルを動的ライブラリに追加します.
vi /etc/ld.so.conf

下のように最後に追加:/usr/local/lib//ここで追加するlibeventライブラリディレクトリの動的libライブラリを再ロードします.
ldconfig

注意:この手順がない場合、memcachedを起動するとlibeventのライブラリファイルが表示されないことがプロンプトされます.
3.libeventが正常にインストールされたかどうかをテストします.
ls -al /usr/lib | grep libevent-

4.起動アカウントの作成:
groupadd memcached    
useradd -g memcached memcached

5.PIDプロセスディレクトリを作成し、所有者を変更するには:
mkdir /var/run/memcached    
chown -R memcached.memcached /var/run/memcached

6.統合memcached-repcachedパッケージをインストールする:
cd /tmp    
wget http://softlayer-dal.dl.sourceforge.net/project/repcached/repcached/2.2.1-1.2.8/memcached-1.2.8-repcached-2.2.1.tar.gz    
cp memcached-1.2.8-repcached-2.2.1.tar.gz /usr/local    
cd /usr/local    
tar zxvf memcached-1.2.8-repcached-2.2.1.tar.gz    
mv memcached-1.2.8-repcached-2.2.1 memcached    
cd memcached    
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/lib --enable-replication --enable-64bit

注意:デフォルトmemcached単一プロセスは2 Gメモリしかサポートされていません.より大きなメモリサポートが必要な場合は、64ビットサポートを開き、コンパイル時にパラメータを追加する必要があります.--enable-64 bit
  
make && make install

プロンプトのコンパイルエラー:
make all-recursive    
make[1]: Entering directory `/usr/local/memcached'    
Making all in doc    
make[2]: Entering directory `/usr/local/memcached/doc'    
make[2]: Nothing to be done for `all'.    
make[2]: Leaving directory `/usr/local/memcached/doc'    
make[2]: Entering directory `/usr/local/memcached'    
gcc -DHAVE_CONFIG_H -I. -DNDEBUG -m64 -g -O2 -MT memcached-memcached.o -MD     
MP -MF .deps/memcached-memcached.Tpo -c -o memcached-memcached.o `test -f     
memcached.c' || echo './'`memcached.c    
memcached.c: In function ‘add_iov’:    
memcached.c:697: error: ‘IOV_MAX’ undeclared (first use in this function)    
memcached.c:697: error: (Each undeclared identifier is reported only once    
memcached.c:697: error: for each function it appears in.)    
make[2]: *** [memcached-memcached.o] Error 1    
make[2]: Leaving directory `/usr/local/memcached'    
make[1]: *** [all-recursive] Error 1    
make[1]: Leaving directory `/usr/local/memcached'    
make: *** [all] Error 2

ソリューション:
vi memcached.c

次の行を
/* FreeBSD 4.x doesn't have IOV_MAX exposed. */    
#ifndef IOV_MAX    
#if defined(__FreeBSD__) || defined(__APPLE__)    
# define IOV_MAX 1024    
#endif    
#endif

次のように変更
/* FreeBSD 4.x doesn't have IOV_MAX exposed. */    
#ifndef IOV_MAX    
# define IOV_MAX 1024    
#endif

再コンパイルとインストール:
make && make install

ヘルプの表示:
./bin/memcached -h

  
memcached 1.2.8    
repcached 2.2.1    
-p  TCP port number to listen on (default: 11211)    
-U  UDP port number to listen on (default: 11211, 0 is off)    
-s  unix socket path to listen on (disables network support)    
-a  access mask for unix socket, in octal (default 0700)    
-l  interface to listen on, default is INDRR_ANY    
-d run as a daemon    
-r maximize core file limit    
-u  assume identity of  (only when run as root)    
-m  max memory to use for items in megabytes, default is 64 MB    
-M return error on memory exhausted (rather than removing items)    
-c  max simultaneous connections, default is 1024    
-k lock down all paged memory. Note that there is a    
limit on how much memory you may lock. Trying to    
allocate more than that would fail, so be sure you    
set the limit correctly for the user you started    
the daemon with (not for -u  user;    
under sh this is done with 'ulimit -S -l NUM_KB').    
-v verbose (print errors/warnings while in event loop)    
-vv very verbose (also print client commands/reponses)    
-h print this help and exit    
-i print memcached and libevent license    
-P  save PID in , only used with -d option    
-f  chunk size growth factor, default 1.25    
-n  minimum space allocated for key+value+flags, default 48    
-R Maximum number of requests per event    
limits the number of requests process for a given con nection    
to prevent starvation. default 20    
-b Set the backlog queue limit (default 1024)    
-x  hostname or IP address of peer repcached    
-X  TCP port number for replication.  (default: 11212)

memcachedディレクトリの所有者を変更するには、次の手順に従います.
cd ..    
chown -R memcached.memcached memcached

 
マスターコピーの構成
パラメータの説明:
-xはどのIPから同期するかを設定します.
-Xデータ同期のポートを指定します.
Memcachedのデフォルトのサービスポートは11211で、デフォルトの同期リスニングポートは11212です.
 
Masterの起動:
/usr/local/memcached/bin/memcached -d -m 100 -l 192.168.11.51 -p 11211 -u memcached -c 1024 -x 192.168.11.52 -X 11212 -P /var/run/memcached/memcached-rep.pid

リスニングポートの表示:
netstat -tupln | grep memcached
tcp 0 0 192.168.11.51:11211 0.0.0.0:* LISTEN 18634/memcached
tcp 0 0 192.168.11.51:11212 0.0.0.0:* LISTEN 18634/memcached
udp 0 0 192.168.11.51:11211 0.0.0.0:* 18634/memcached

 
Slaveの起動:
/usr/local/memcached/bin/memcached -d -m 100 -l 192.168.11.52 -p 11211 -u memcached -c 1024 -x 192.168.11.51 -X 11212 -P /var/run/memcached/memcached-rep.pid

説明:-x 192.168.11.51同期用MasterのIPアドレス.
リスニングポートの表示:
netstat -tupln | grep memcached
tcp 0 0 192.168.11.52:11211 0.0.0.0:* LISTEN 24262/memcached
udp 0 0 192.168.11.52:11211 0.0.0.0:* 24262/memcached

 
データ同期の検証
Masterでデータを作成するには、次の手順に従います.
[root@test01 bin]# telnet 192.168.11.51 11211
Trying 192.168.11.51...
Connected to 192.168.11.51.
Escape character is '^]'.
get key1
END
set key1 0 0 2
aa
STORED
quit
Connection closed by foreign host.

 
Slaveでデータを取得するには:
[root@test02 bin]# telnet 192.168.11.52 11211
Trying 192.168.11.52...
Connected to 192.168.11.52.
Escape character is '^]'.
get key1
END
get key1
VALUE key1 0 2
aa
END
quit
Connection closed by foreign host.

 
Slaveでデータを作成するには:
[root@test02 bin]# telnet 192.168.11.52 11211
Trying 192.168.11.52...
Connected to 192.168.11.52.
Escape character is '^]'.
get key2
END
set key2 0 0 3
b
STORED
get key2
VALUE key2 0 3
b
END
quit
Connection closed by foreign host.

 
Masterでデータを取得するには、次の手順に従います.
[root@test01 bin]# telnet 192.168.11.51 11211
Trying 192.168.11.51...
Connected to 192.168.11.51.
Escape character is '^]'.
get key2
VALUE key2 0 3
b
END
quit
Connection closed by foreign host.

 
Memcached高可用性
MasterとSlaveを起動するときは-lパラメータを加えてリスニングアドレスを指定しないでください.そうしないとkeepalivedはVIPのアドレスをリスニングできません.
その後keepalivedを構成すると高可用性として使用できます.