memcached内存储器复制/主从/主备模式之mecached1.4.13版

memcached内存复制/主从/主备模式之mecached1.4.13版


Repcached介绍

Repchched项目地址:http://repcached.sourceforge.net/

关于repcached

“repcached”是一个补丁集合,它添加数据复制功能到memcached 1.2.x。

主要目的

实现冗余memcached系统 
主要功能
多主复制,异步数据复制,支持所有的memcached命令(set, add, delete, incr/decr, flush_all, cas)。

Memcached 1.4.x的Repcached补丁

地址:http://mdounin.ru/

最新补丁:http://mdounin.ru/files/repcached-2.3.1-1.4.13.patch.gz

工作原理

repcached实现了memcached复制的功能,它是一个单master单slave的方案,但master/slave都是可读写的,而且可以相互同步,如果master坏掉slave侦测到连接断了,它会自动listen而成为master,这时坏掉的master只能启用为slave,它们之间互换角色,才能保持复制功能,换句话说,master没有抢占功能;而如果slave坏掉,master也会侦测到连接断,它就会重新listen等待新的slave加入。

应用场景

用memcached做session共享或其它服务时会存在memcached的单点故障,如果memcached宕机,那么整个系统用户无法登陆(session)。

基于这种情况,采用repcached做memcached的主从冗余


警告:repcached内存复制插件版本一定要和memcached版本一致,否则会出现版本不兼容等各种错误!

主从机器上必须都安装repcached插件

 wget https://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
 wget http://mdounin.ru/files/repcached-2.3.1-1.4.13.patch.gz
 tar zxvf memcached-1.4.13.tar.gz
 gzip -d repcached-2.3.1-1.4.13.patch.gz
 cd memcached-1.4.13
 patch -p1 -i ../repcached-2.3.1-1.4.13.patch  以下命令路径要切换成自己的安装目录,还有
 ./configure --prefix=/usr/local/mecached --with-libevent=/usr/local/libevent --enable-replication
 make && make install
 

出现的错误以及解决方法:

错误一:

在解压repcached文件时出现如下错误

gzip:stdin:not in gzip format

tar:Child returned status 1

tar:由于前面的延迟的错误而退出

这是因为文件的下载链接不是直接指向文件,而是先指向一个页面,在这个页面里才是真的下载链接,所以在前一个页面上直接保存文件,实际上保存的是一个页面。

解决办法:

首先用 file 命令查看该文件的真实属性,根据真实属性选择解压命令即可解决,遇到这样的错误提示记得查看该文件的真实属性,我这里file repcached-2.3.1-1.4.13.patch.gz得到的文件属性居然是html文件类型的,好家伙,难怪会提示不是gzip类型文件呢,原来是下载链接地址在wget 下下载的是html页面跳转地址,通过浏览器输入(如下)下载地址回车就得到了原始真实repcached的gzip包文件

http://mdounin.ru/files/repcached-2.3.1-1.4.13.patch.gz

错误二:

        关于下面谷歌memcached源码包地址打不开的问题:

    wget https://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
       去掉https模式改用http模式试试
    wget http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz
       如果还无法打开源码包,可能是谷歌被封了,或者地址迁移了,请从下面链接地址进行下载即可:

       csdn memcached-1.4.13下载地址:http://download.csdn.net/detail/liaowuxukong/4578543


安装完毕了,下面我们来启动主从memcached服务器,主机为本地127.0.0.1  11211端口,从机为10.0.2.15 服务器的11222端口

/usr/local/memcached/bin/memcached -d -m -p 11211 -u nobody -l 127.0.0.1 -x 10.0.2.15 -X 11222 -P /tmp/localhost_master.pid -vv

/usr/local/memcached/bin/memcached -d -m -p 11222 -u nobody -l 10.0.2.15 -x 127.0.0.1 -X 11211 -P /tmp/localhost_slave.pid -vv

参数说明:
-x 设置从哪个IP上进行同步。
-X 指定数据同步的端口。

查看端口

netstat -tupln | grep memcached

tcp        0      0 127.0.0.1:11211             0.0.0.0:*                   LISTEN      12242/memcached         
udp        0      0 127.0.0.1:11211             0.0.0.0:*                               12242/memcached     

验证数据同步

在Master创建数据:
[root@test01 bin]# telnet 127.0.0.1 11211

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
END
set key1 0 0 2
aa
STORED
quit
Connection closed by foreign host.

在Slave获取数据:
 [root@test02 bin]# telnet 10.0.2.15 11222

Trying 10.0.2.15...
Connected to 10.0.2.15.
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 10.0.2.15 11222

Trying 10.0.2.15...
Connected to 10.0.2.15.
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 127.0.0.1 11211

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key2
VALUE key2 0 3
b
END
quit
Connection closed by foreign host.

 
Memcached高可用

启动Master和Slave时不要加-l参数指定监听地址,否则keepalived无法监听VIP的地址。
然后配置上keepalived就可以作为高可用了。

关于Mecached和php memcached扩展安装方法请参见 摘取天上星 的另外一篇博文:http://blog.csdn.net/zqtsx/article/details/26720849

本教程所使用软件包下载地址

memcached1.4.13

http://download.csdn.net/detail/zqtsx/8910705

版权声明:本文为博主原创文章,未经博主允许不得转载。