一.Repcached (memcached同步補丁)
下載地址:http://sourceforge.net/projects/repcached/files/repcached/2.2.1-1.2.8/
版本號:memcached 1.2.8 repcached 2.2.1
1、repcached介紹
repcached是日本人開發的實現memcached複製功能,它是一個單 master單 slave的方案,但它的 master/slave都是可讀寫的,而且可以相互同步,如果 master壞掉, slave偵測到連接斷了,它會自動 listen而成爲 master;而如果 slave壞掉, master也會偵測到連接斷,它就會重新 listen等待新的 slave加入
2、安裝
在兩臺服務器上分別安裝memcached服務,另注本文libevent的版本爲:libevent-1.4.13,下載地址: http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz (安裝省略)
repcached有兩種方式:
方式一、下載對應的repcached版本
#wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
#tar zxf memcached-1.2.8-repcached-2.2.tar.gz
#cd memcached-1.2.8-repcached-2.2
【方式二、下載對應patch版本
#wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz
#gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1】
#./configure –enable-replication
# make
# make install
3、啓動:
啓動master
# ./memcached -v -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111 (11211:master端口;11111:同步端口)
啓動salve
# ./memcached -v -u root -d -l 127.0.0.1 -p 11212 -x 127.0.0.1 -X 11111 (11212:slave端口;11111:同步端口)
4、測試:
操作master
查看slave
注意:如果master down機,slave接管併成爲master,這時down機的master只能啓用slave,他們之間互換角色,才能保持複製功能。換句話說,master沒有搶佔功能。而且,同步間隔時間未知。
優點:
- 數據冗餘
- 兩臺memcached都可以進行讀寫操作
缺點:
- 只支持單對單
- 只支持memcached 1.2.x版本
二.Magent (memcached的代理)
原文地址:http://blog.s135.com/post/393/
magent是一款開源的Memcached代理服務器軟件,其項目網址爲:
http://code.google.com/p/memagent/
一、安裝步驟:
1、編譯安裝libevent:
wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure –prefix=/usr
make && make install
cd ../
2、編譯安裝Memcached:
wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6/
./configure –with-libevent=/usr
make && make install
cd ../
3、編譯安裝magent:
mkdir magent
cd magent/
wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
tar zxvf magent-0.5.tar.gz
/sbin/ldconfig
sed -i “s#LIBS = -levent#LIBS = -levent -lm#g” Makefile
make
cp magent /usr/bin/magent
cd ../
二、使用實例:
memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
magent -u root -n 51200 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213
1、分別在11211、11212、11213端口啓動3個Memcached進程,在12000端口開啓magent代理程序;
2、11211、11212端口爲主Memcached,11213端口爲備份Memcached;
3、連接上12000的magent,set key1和set key2,根據哈希算法,key1被寫入11212和11213端口的Memcached,key2被寫入11212和11213端口的Memcached;
4、當11211、11212端口的Memcached死掉,連接到12000端口的magent取數據,數據會從11213端口的Memcached取出;
5、當11211、11212端口的Memcached重啓復活,連接到12000端口,magent會從11211或11212端口的Memcached取數據,由於這兩臺Memcached重啓後無數據,因此magent取得的將是空值,儘管11213端口的Memcached還有數據(此問題尚待改進)。
三、整個測試流程:
[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.
stats
memcached agent v0.4
matrix 1 -> 127.0.0.1:11211, pool size 0
matrix 2 -> 127.0.0.1:11212, pool size 0
END
set key1 0 0 8
zhangyan
STORED
set key2 0 0 8
zhangyan
STORED
quit
Connection closed by foreign host.
[root@centos52 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.
get key1
END
get key2
VALUE key2 0 8
zhangyan
END
quit
Connection closed by foreign host.
[root@centos52 ~]# telnet 127.0.0.1 11212
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.
get key1
VALUE key1 0 8
zhangyan
END
get key2
END
quit
Connection closed by foreign host.
[root@centos52 ~]# telnet 127.0.0.1 11213
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.
get key1
VALUE key1 0 8
zhangyan
END
get key2
VALUE key2 0 8
zhangyan
END
quit
Connection closed by foreign host.
模擬11211、11212端口的Memcached死掉
[root@centos52 ~]# ps -ef | grep memcached
root 6589 1 0 01:25 ? 00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
root 6591 1 0 01:25 ? 00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
root 6593 1 0 01:25 ? 00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
root 6609 6509 0 01:44 pts/0 00:00:00 grep memcached
[root@centos52 ~]# kill -9 6589
[root@centos52 ~]# kill -9 6591
[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.
get key1
VALUE key1 0 8
zhangyan
END
get key2
VALUE key2 0 8
zhangyan
END
quit
Connection closed by foreign host.
模擬11211、11212端口的Memcached重啓復活
[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.
get key1
END
get key2
END
quit
Connection closed by foreign host.
優點:
可以做多主或多從
缺點:
當master宕掉又恢復後,取不到數據。
三.Repcached和Magent結合
安裝memcached 1.2.8、repcached 2.2.1、magent 0.5
大體架構:
測試流程:
- 啓動memcached和magent
開啓代理,代理端口爲12000,設置127.0.0.1:11211爲主,127.0.0.1:11212爲從。
magent -u root -p 12000 -s 127.0.0.1:11211 -b 127.0.0.1:11212
啓動兩個memcached進程,做數據同步,同步端口爲11111。
./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
./memcached -u root -d -l 127.0.0.1 -p 11212 -x 127.0.0.1 -X 11111
- 從代理寫入數據,在兩臺memcached上查看。
2. 模擬主或從memcached宕機後,數據是否存在。
3. 模擬主或從memcached恢復後,數據是否存在/同步。
優點:
數據冗餘
兩臺memcached都可進行讀寫操作
可以做多主或多從(未測試)
缺點:
只支持memcached 1.2.x版本