开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

持久性session连接之memcached高可用方案

简介:
+关注继续查看

  关于session持久性连接,我们大多都使用memcached做为缓存服务器。但是众所周知memcached具有的是单点故障的风险。针对于这个问题上次公司更新代码的情况做一下简述:

    凌晨开发执行了几条sql语句之后跟更新代码。在验证收款的时候测试遇到这样一个问题。就是当我们用户要登录的时候已经输入了验证码。百分百确认没有输错,但是就是连不上,过一会又好了。忙活了大半天。觉得是不是session的问题,原本是存在memcached的临时信息,但是memcached出现了问题。直接从后端数据库读取,又读取新的数据了。于是重新做一个memcached,验证就没有问题了。(但是我有一点想不明白就是加入说定义的增长因子不对导致,memcached不够存,按理说memcached应该是会满了自动清理的,除非增长因子过大,而且数据太高,但是就是这样解决了,想不明白思路希望大家指教)

所以我觉得memcached高可用性还是很有必要的,查看了文档之后构建了下面的环境:

一、环境说明(使用repcached对memcached值进行复制):

1
2
memcached主:192.168.63.129   centos64
memcached从:192.168.63.132   contos64

二、安装步骤:

1、一般基于事物的我们都会安装libevent:

1
2
[root@localhost libevent-1.4.14b-stable]# ./configure --prefix=/usr
[root@localhost libevent-1.4.14b-stable]# make && make install

2、安装memcached:

1
2
[root@localhost memcached-1.4.20]# ./configure --with-libevent=/usr
[root@localhost memcached-1.4.20]# make && make install

3、安装repcached:

1
2
3
4
5
6
7
8
9
[root@master src]# wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
[root@master src]# tar zxf memcached-1.2.8-repcached-2.2.tar.gz
[root@master src]# cd memcached-1.2.8-repcached-2.2
 [root@master memcached-1.2.8-repcached-2.2]#wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz
[root@master memcached-1.2.8-repcached-2.2]# gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1
[root@master memcached-1.2.8-repcached-2.2]# ./configure --enable-replication
[root@master memcached-1.2.8-repcached-2.2]#  make
[root@master memcached-1.2.8-repcached-2.2]#  make install
[root@master memcached-1.2.8-repcached-2.2]# cd ..

#主和从的安装步骤是一样的,这里只在主节点操作:

四、启动设置主从:

1、启动master:

1
2
[root@localhost ~]# memcached -v -d -p 11211 -l 192.168.63.129 -u root -P /tmp/memcached1.pid 
[root@localhost ~]# replication: listen

2、启动backup:

1
2
3
[root@mysql ~]# memcached -v -d -p 11211 -l 192.168.63.132 -u root -x 192.168.6
3.129 -P /tmp/memcached1.pid          
[root@mysql ~]# replication: connect (peer=192.168.63.129:11212)

3、查看主是否连接成功:

1
2
[root@localhost ~]# replication: listen
replication: accept                    #accept已经是master

五、测试:

1、主节点插入数据:

1
2
3
4
5
6
7
8
9
[root@localhost ~]# telnet 192.168.63.129 11211
Trying 192.168.63.129...
Connected to 192.168.63.129.
Escape character is '^]'.
set key 0 0 2
xi
STORED
quit
Connection closed by foreign host.

2、从节点查看:

1
2
3
4
5
6
7
8
[root@mysql ~]# telnet 192.168.63.132 11211
Trying 192.168.63.132...
Connected to 192.168.63.132.
Escape character is '^]'.
get key
VALUE key 0 2
xi
END

3、断开主节点,从节点自动监听,然后上升为主节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost ~]# ps -ef | grep memcached | awk '{print $2}' | xargs kill -9
kill 2222: No such process
从节点变成监听状态:
[root@mysql ~]# replication: close
replication: listen
4、登录节点测试:
[root@mysql ~]# telnet 192.168.63.132 11211
Trying 192.168.63.132...
Connected to 192.168.63.132.
Escape character is '^]'.
get key
VALUE key 0 2
xi
END

数据完整复制过来。

5、原理主节点修复好之后,我们启动它。让他变成从节点*

1
2
3
4
[root@localhost ~]#  memcached -v -d -p 11211 -l 192.168.63.129 -u root -x 192.168.63.132 -P /tmp/memcached.pid           
[root@localhost ~]# replication: connect (peer=192.168.63.132:11212)
replication: marugoto copying
replication: start

现在129成了从节点。登录看一下数据复制过来了没有:

1
2
3
4
5
6
7
8
[root@localhost ~]# telnet 192.168.63.129 11211
Trying 192.168.63.129...
Connected to 192.168.63.129.
Escape character is '^]'.
get key
VALUE key 0 2
xi
END

到这来可以看到数据又完整恢复了。可以看到这个是跟Mysql主从同步差不多一致的步骤。










本文转自 小罗ge11 51CTO博客,原文链接:http://blog.51cto.com/xiaoluoge/1595971,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
采用Memcached实现分布式Session
 memcached-session-manager是一个开源的高可用的Tomcat session共享解决方案,它支持Sticky模式和Non-Sticky模式。Sticky模式表示每次请求都会被映射到同一台后端Web服务器,知道该Web服务器宕机,这样session可先存放在服务器本地,等到请求处理完成再同步到后端memcached服务器;而当Web服务器宕机时,请求被映射到其他Web服务器,这时候,其他Web服务器可以从后端memcache中恢复session。
954 0
云数据库memcached之热点key问题解决方案
解决分布式K-V存储系统中热点key问题。
12904 0
如何设置memcached来共享php的session
 如何设置memcached来共享php的session php的session存储方式可以自定义的,默认是使用文件,也可以用数据库,具体可以查看:http://pt.
914 0
MySQL 5.6.6 LABS 版本 下载 已经内含 Memcached
MySQL 最新开发版 5.6.6 正式版还没有发布,但是labs版本是可以下载的,从官网给出的 CHANGES 文档可得知,该版本将内嵌 memcached 的支持,以后可以用No SQL的方式使用mysql,在数据库中充分利用memcached的优点。
529 0
艾伟:Memcached使用点滴
  我对于Memcached的接触,还是在去年看了CSDN的一系列国外大型网站架构设计而开始的。最初的时候只是简单的封装了Memcached Java版的客户端,主要是对于配置的简化以及Memcached多点备份作了一些工作,然后就作为ASF的组件一部分提供给其他Team使用。
1012 0
+关注
20377
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载