repcached介紹
repcached是日本人開發的實現memcached複製功能,它是一個單 master單 slave的方案,但它的 master/slave都是可讀寫的,而且可以相互同步,如果 master壞掉, slave偵測到串連斷了,它會自動 listen而成為 master;而如果 slave壞掉, master也會偵測到串連斷,它就會重新 listen等待新的 slave加入.
1.安裝
在兩台伺服器上分別安裝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
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
#/usr/local/bin/memcached -d -m 64 -p 12000 -u root -l 0.0.0.0 -P /tmp/memcached.pid
replication: listen (master監聽)
啟動salve
#/usr/local/bin/memcached -d -m 64 -p 12000 -u root -l 0.0.0.0 -x 192.168.3.100 -X 11212 -P /tmp/memcached.pid
replication: connect (peer=192.168.3.100:11212)
replication: marugoto copying
replication: start
啟動正常後,master將accept。
啟動指令碼
MASTER
#!/bin/bash
# memcached service.
# chkconfig: 345 35 75
# description: a mem cache servercase "$1" in
start)
/usr/local/bin/memcached -d -m 64 -p 12000 -u root -l 0.0.0.0 -P /tmp/memcached.pid
echo "memcached start ok"
;;
restart)
ps aux |grep /usr/local/memcached/bin/memcached|grep -v grep|awk '{print $2}'|awk '{printf("%s ",$1)}'|xargs kill -9
/usr/local/bin/memcached -d -m 64 -p 12000 -u root -l 0.0.0.0 -P /tmp/memcached.pid
echo "memcached restart ok"
;;
stop)
ps aux |grep /usr/local/bin/memcached|grep -v grep|awk '{print $2}'|awk '{printf("%s ",$1)}'|xargs kill -9
echo "memcached stop ok"
;;
esacexit 0
SLAVE
#!/bin/bash
# memcached service.
# chkconfig: 345 35 75
# description: a mem cache servercase "$1" in
start)
/usr/local/bin/memcached -d -m 64 -p 12000 -u root -l 0.0.0.0 -x 192.168.3.100 -X 11212 -P /tmp/memcached.pid
echo "memcached start ok"
;;
restart)
ps aux |grep /usr/local/memcached/bin/memcached|grep -v grep|awk '{print $2}'|awk '{printf("%s ",$1)}'|xargs kill -9
/usr/local/bin/memcached -d -m 64 -p 12000 -u root -l 0.0.0.0 -x 192.168.3.100 -X 11212 -P /tmp/memcached.pid
echo "memcached restart ok"
;;
stop)
ps aux |grep /usr/local/bin/memcached|grep -v grep|awk '{print $2}'|awk '{printf("%s ",$1)}'|xargs kill -9
echo "memcached stop ok"
;;
esacexit 0
4.測試:
操作master
#telnet 192.168.3.100 11211
#set key1 0 0 3
test
查看slave
#telnet 192.168.3.101 11213
#get key1
如果正常顯示test,則表示repcached配置成功
5.應用:
可以實現cache冗餘,避免因cache伺服器down掉而導致資料丟失。
注意:如果master down機,slave接管並成為master,這時down機的master只能啟用slave,他們之間互換角色,才能保持複製功能。換句話說,master沒有搶佔功能。可以通過LVS來配置成自動切換
配置PHP session使用MEMCACHE
[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
;session.save_handler = filessession.save_handler = "memcache"
memcache.hash_strategy = "consistent"
session.save_path = "tcp://192.168.3.1:12000"
HAPROXY 設定檔
global
log 127.0.0.1 local0
#log 127.0.0.1 local0
#log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
chroot /opt/share/haproxy
uid 99
gid 99
daemon
#debug
#quietdefaults
log global
#mode http
#option httplog
option dontlognull
retries 3
# redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen MEMCACHED 0.0.0.0:12000
mode tcp
option persist
balance roundrobin
server MEMCACHE1 192.168.3.100:12000 check inter 2000 fall 3
server MEMCACHE2 192.168.3.101:12000 check inter 2000 fall 3listen MYSQLD 0.0.0.0:3306
mode tcp
option persist
balance roundrobin
server MYSQL1 192.168.3.100:3306 check inter 2000 fall 3
# server MYSQL2 192.168.3.101:3306 check inter 2000 fall 3listen HTTP 0.0.0.0:80
mode http
option forwardfor
option httplog
#option httpchk /index.html
stats uri /haproxy-stats
stats auth admin:xxxxxx
option persist
balance roundrobin
cookie SERVERID insert indirect nocache
server WEB1 192.168.3.100:80 cookie server01 check inter 2000 fall 3
server WEB2 192.168.3.101:80 cookie server02 check inter 2000 fall 3
capture cookie PHPSESSION len 32
srvtimeout 20000 option httpclose # disable keep-alive
option checkcache # block response if set-cookie & cacheable rspidel ^Set-cookie:\ IP= # do not let this cookie tell our internal IP addresslisten HTTPS 0.0.0.0:443
mode tcp
option ssl-hello-chk
option persist
balance roundrobin
server WEB1 192.168.3.100:443 check inter 2000 fall 3
server WEB2 192.168.3.101:443 check inter 2000 fall 3
#errorloc 502 http://192.168.114.58/error502.html
#errorfile 503 /etc/haproxy/errors/503.http
效果