您的位置:首页 > 数据库 > Memcache

repcached实现memcached内存复制+keepalived主备模式

2015-07-21 01:10 661 查看
Repcached介绍

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

关于repcached

“repcached”是一个补丁集合,它添加数据复制功能到memcached 1.4.13但是网络上流传的大多是针对memcached1.2.8版本的repcached,本文将以memcached1.4.13最新版本为例来讲述repcached的兼容性内存复制功能。

主要目的

实现冗余memcached系统

主要功能

多主复制,异步数据复制,支持所有的memcached命令(set, add, delete, incr/decr, flush_all, cas)。

Memcached 1.4.13的Repcached补丁(注意:memcached版本必须要和repcached对应的兼容memcached的版本一致,否则会出现各种不兼容bug错误)

地址: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服务器,主机为本地192.168.1.10 11211端口,从机为192.168.1.11 服务器的11211端口

/usr/local/memcached/bin/memcached -d -m -p 11211 -u nobody -l 192.168.1.10 -x 192.168.1.11 -X 11212 -P /tmp/localhost_master.pid -vv

注意:在使用keepalived做主备自动切换时去掉-l参数,否则会导致keepalived 无法监听绑定虚拟IP到主机上

/usr/local/memcached/bin/memcached -d -m -p 11211 -u nobody -l 192.168.1.11 -x 192.168.1.10 -X 11212 -P /tmp/localhost_slave.pid -vv

参数说明:

-x 设置从哪个IP上进行同步。

-X 指定数据同步的端口。

-d 选项是启动一个守护进程,

-m 是分配给Memcache使用的内存数量,单位是MB,我这里是8096MB,

-u 是运行Memcache的用户,我这里是root,

-l 是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.77.105,

-p 是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口,

-c 选项是最大运行的并发连接数,默认是1024,按照你服务器的负载量来设定,

-P 是设置保存Memcache的pid文件的位置

查看端口

netstat -tupln | grep memcached

tcp 0 0 192.168.1.10:11211 0.0.0.0:* LISTEN 12242/memcached

udp 0 0 192.168.1.10:11211 0.0.0.0:* 12242/memcached

验证数据同步

在Master创建数据:

[root@test01 bin]# telnet 192.168.1.10 11211

Trying 192.168.1.10…

Connected to 192.168.1.10.

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.1.11 11211

Trying 192.168.1.11…

Connected to 192.168.1.11.

Escape character is ‘^]’.

get key1

VALUE key1 0 2

aa

END

quit

Connection closed by foreign host.

在Slave创建数据:

[root@test02 bin]# telnet 192.168.1.11 11211

Trying 192.168.1.11…

Connected to 192.168.1.11.

Escape character is ‘^]’.

get key2

END

set key2 0 0 3

bbb

STORED

get key2

VALUE key2 0 3

bbb

END

quit

Connection closed by foreign host.

在Master获取数据:

[root@test01 bin]# telnet 192.168.1.10 11211

Trying 192.168.1.10…

Connected to 192.168.1.10.

Escape character is ‘^]’.

get key2

VALUE key2 0 3

bbb

END

quit

Connection closed by foreign host.

Memcached高可用

启动Master和Slave时不要加-l参数指定监听地址,否则keepalived无法监听VIP的地址。

然后配置上keepalived就可以作为高可用了。

以下是keppalived配置信息,在此就不多数了,相信大家都熟悉keepalived的作用了

MASTER 主机 配置信息

! Configuration File for keepalived

global_defs {

notification_email {

happy.yin@qq.com

}

notification_email_from zqtsx@email.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER

interface eth1

virtual_router_id 51

priority 101 主机 为 101

advert_int 1

authentication {

auth_type PASS 验证类型

auth_pass 1111 验证密码自己修改即可,记得主备机上的密码要一致

}

virtual_ipaddress {

192.168.1.120 虚拟IP 地址

}

}

SL***E 从机 配置信息

! Configuration File for keepalived

global_defs {

notification_email {

happy.yin@qq.com

}

notification_email_from zqtsx@email.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER

interface eth1

virtual_router_id 51

priority 100 从机 为 100

advert_int 1

authentication {

auth_type PASS 验证类型

auth_pass 1111 验证密码自己修改即可,记得主备机上的密码要一致

}

virtual_ipaddress {

192.168.1.120 虚拟IP 地址

}

}

通过虚拟IP进行memcached 存取操作

[root@localhost happy]# telnet 192.168.1.120 11211

Trying 192.168.1.120…

Connected to 192.168.1.120.

Escape character is ‘^]’.

set key 0 0 6

123456

STORED

get key

VALUE key 0 6

123456

END

get key1

VALUE key1 0 2

aa

END

quit

Connection closed by foreign host.

OK keepalived + memcached主备模式到此设置完成了,下面我们来停止一台机器上的keepalived模拟down机,然后再用虚拟IP 192.168.1.120链接memcached并对其进行读写,看下能否正常访问到memcached数据就知道了主备模式是否健全了

[root@localhost happy]# telnet 192.168.1.120 11211

Trying 192.168.1.120…

Connected to 192.168.1.120.

Escape character is ‘^]’.

get key

VALUE key 0 6

123456

END

get key1

VALUE key1 0 2

aa

END

quit

Connection closed by foreign host.

OK MEMCACHED一切正常,不仅memcached实现了内存复制,而且keepalived运行也一切正常,至此一个完整可靠的memcached主备模式构建完成了。。。

关于Mecached和php memcached扩展安装方法请参见 摘取天上星 的另外一篇博文:/article/1351759.html

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

memcached1.4.13

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

repcached-1.4.13

http://download.csdn.net/detail/zqtsx/8910709
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: