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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

  关于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,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
23天前
|
监控 NoSQL Linux
【分布式】Redis的持久化方案解析
【1月更文挑战第25天】【分布式】Redis的持久化方案解析
|
30天前
|
缓存 NoSQL 关系型数据库
如何保障mysql和redis之间的数据一致性?
如何保障mysql和redis之间的数据一致性?
420 0
|
1月前
|
缓存 NoSQL 关系型数据库
MySQL缓存策略(一致性问题、数据同步以及缓存故障)
MySQL缓存策略(一致性问题、数据同步以及缓存故障)
37 1
|
2月前
|
负载均衡 算法 NoSQL
聊聊分布式应用中负载均衡技术和Session一致性
聊聊分布式应用中负载均衡技术和Session一致性
22 0
|
2月前
|
缓存 NoSQL 关系型数据库
【中间件】Redis与MySQL双写一致性如何保证?--缓存和数据库在双写场景下一致性是如何保证的
【中间件】Redis与MySQL双写一致性如何保证?--缓存和数据库在双写场景下一致性是如何保证的
68 0
【中间件】Redis与MySQL双写一致性如何保证?--缓存和数据库在双写场景下一致性是如何保证的
|
5月前
|
缓存 NoSQL 中间件
redis如何通过读写分离来承载读请求高并发
redis如何通过读写分离来承载读请求高并发
55 0
|
存储 负载均衡 NoSQL
tomcat集群环境下如何保证session一致性
tomcat集群环境下如何保证session一致性
181 0
tomcat集群环境下如何保证session一致性
|
canal 缓存 数据库
REDIS11_缓存和数据库一致性如何保证、解决方案、提供Canel解决数据一致性问题(下)
REDIS11_缓存和数据库一致性如何保证、解决方案、提供Canel解决数据一致性问题(下)
182 0
REDIS11_缓存和数据库一致性如何保证、解决方案、提供Canel解决数据一致性问题(下)
|
存储 缓存 数据库
REDIS11_缓存和数据库一致性如何保证、解决方案、提供Canel解决数据一致性问题(上)
REDIS11_缓存和数据库一致性如何保证、解决方案、提供Canel解决数据一致性问题(上)
150 0
REDIS11_缓存和数据库一致性如何保证、解决方案、提供Canel解决数据一致性问题(上)