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 server
case "$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"
;;
esac
exit 0
SLAVE
#!/bin/bash
# memcached service.
# chkconfig: 345 35 75
# description: a mem cache server
case "$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"
;;
esac
exit 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 = files
session.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
#quiet
defaults
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 3
listen 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 3
listen 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 address
listen 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
效果