设为首页 收藏本站
查看: 1391|回复: 0

[经验分享] repcached实现memcached内存复制+keepalived主备模式

[复制链接]

尚未签到

发表于 2015-11-19 14:43:12 | 显示全部楼层 |阅读模式
  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.iyunv.com/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创建数据:

[iyunv@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获取数据:
[iyunv@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创建数据:

[iyunv@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获取数据:

[iyunv@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 地址
}

}
  SLAVE 从机 配置信息

! 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 存取操作

[iyunv@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数据就知道了主备模式是否健全了

[iyunv@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扩展安装方法请参见 摘取天上星 的另外一篇博文:http://blog.iyunv.com/zqtsx/article/details/26720849
  本教程所使用软件包下载地址
  memcached1.4.13

http://download.iyunv.com/detail/zqtsx/8910705  

repcached-1.4.13

http://download.iyunv.com/detail/zqtsx/8910709

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-141232-1-1.html 上篇帖子: 利用keepalived实现双台服务器主备高可用 下篇帖子: keepalived+haproxy实现nginx与mysql负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表