一.Repcached (memcached同步补丁)

下载地址:http://sourceforge.net/projects/repcached/files/repcached/2.2.1-1.2.8/

版本号:memcached 1.2.8  repcached 2.2.1

1、repcached介绍

repcached是日本人开发的实现memcached复制功能,它是一个单 master单 slave的方案,但它的 master/slave都是可读写的,而且可以相互同步,如果 master坏掉, slave侦测到连接断了,它会自动 listen而成为 master;而如果 slave坏掉, master也会侦测到连接断,它就会重新 listen等待新的 slave加入

2、安装

在两台服务器上分别安装memcached服务,另注本文libevent的版本为:libevent-1.4.13,下载地址: http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz (安装省略)

repcached有两种方式:

方式一、下载对应的repcached版本

·········10········20········30········40········50········60········
2.#tar zxf memcached-1.2.8-repcached-2.2.tar.gz
3.#cd memcached-1.2.8-repcached-2.2

方式二、下载对应patch版本

·········10········20········30········40········50········60········
2.#gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1】
3.#./configure –enable-replication
4.# make
5.# make install

3、启动:

启动master

·········10········20········30········40········50········60········
1.# ./memcached -v -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111   (11211:master端口;11111:同步端口)
2.replication: connect (peer=127.0.0.1:11111)
3.replication: accept
4.replication: marugoto copying
5.replication: start

启动salve

·········10········20········30········40········50········60········
1.# ./memcached -v -u root -d -l 127.0.0.1 -p 11212 -x 127.0.0.1 -X 11111   (11212:slave端口;11111:同步端口)
2.replication: connect (peer=127.0.0.1:11111)
3.replication: marugoto copying
4.replication: close
5.replication: listen

4、测试:

操作master

·········10········20········30········40········50········60········
01.[root@localhost bin]# telnet 127.1 11211
02.Trying 127.0.0.1...
03.Connected to localhost.localdomain (127.0.0.1)...
04.Escape character is '^]'.
05.get key1
06.END
07.set key1 0 0 2
08.aa
09.STORED
10.quit
11.Connection closed by foreign host.

查看slave

·········10········20········30········40········50········60········
01.[root@localhost bin]# telnet 127.1 11212
02.Trying 127.0.0.1...
03.Connected to localhost.localdomain (127.0.0.1)...
04.Escape character is '^]'.
05.get key1
06.VALUE key1 0 2
07.aa
08.END
09.quit
10.Connection closed by foreign host.

注意:如果master down机,slave接管并成为master,这时down机的master只能启用slave,他们之间互换角色,才能保持复制功能。换句话说,master没有抢占功能。而且,同步间隔时间未知。

优点:

  1. 数据冗余
  2. 两台memcached都可以进行读写操作

缺点:

  1. 只支持单对单
  2. 只支持memcached 1.2.x版本

二.Magent (memcached的代理)

原文地址:http://blog.s135.com/post/393/

magent是一款开源的Memcached代理服务器软件,其项目网址为:

http://code.google.com/p/memagent/

1、安装步骤:

a、编译安装libevent:

·········10········20········30········40········50········60········
1.wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
2.tar zxvf libevent-1.4.9-stable.tar.gz
3.cd libevent-1.4.9-stable/
4../configure --prefix=/usr
5.make && make install
6.cd ../

b、编译安装Memcached:

·········10········20········30········40········50········60········
2.tar zxvf memcached-1.2.6.tar.gz
3.cd memcached-1.2.6/
4../configure --with-libevent=/usr
5.make && make install
6.cd ../

c、编译安装magent:

·········10········20········30········40········50········60········
01.mkdir magent
02.cd magent/
04.tar zxvf magent-0.5.tar.gz
05./sbin/ldconfig
06.sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
07.make
08.cp magent /usr/bin/magent
09.cd ../

2、使用实例:

·········10········20········30········40········50········60········
1.memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
2.memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
3.memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
4.magent -u root -n 51200 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213
  1. 分别在11211、11212、11213端口启动3个Memcached进程,在12000端口开启magent代理程序;
  2. 11211、11212端口为主Memcached,11213端口为备份Memcached;
  3. 连接上12000的magent,set key1和set key2,根据哈希算法,key1被写入11212和11213端口的Memcached,key2被写入11212和11213端口的Memcached;
  4. 当11211、11212端口的Memcached死掉,连接到12000端口的magent取数据,数据会从11213端口的Memcached取出;
  5. 当11211、11212端口的Memcached重启复活,连接到12000端口,magent会从11211或11212端口的Memcached取数据,由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管11213端口的Memcached还有数据(此问题尚待改进)。

3、整个测试流程:

·········10········20········30········40········50········60········
01.[root@centos52 ~]# telnet 127.0.0.1 12000
02.Trying 127.0.0.1...
03.Connected to 127.0.0.1.
04.Escape character is '^]'.
05.stats
06.memcached agent v0.4
07.matrix 1 -> 127.0.0.1:11211, pool size 0
08.matrix 2 -> 127.0.0.1:11212, pool size 0
09.END
10.set key1 0 0 8
11.zhangyan
12.STORED
13.set key2 0 0 8
14.zhangyan
15.STORED
16.quit
17.Connection closed by foreign host.
18. 
19.[root@centos52 ~]# telnet 127.0.0.1 11211
20.Trying 127.0.0.1...
21.Connected to 127.0.0.1.
22.Escape character is '^]'.
23.get key1
24.END
25.get key2
26.VALUE key2 0 8
27.zhangyan
28.END
29.quit
30.Connection closed by foreign host.
31. 
32.[root@centos52 ~]# telnet 127.0.0.1 11212
33.Trying 127.0.0.1...
34.Connected to 127.0.0.1.
35.Escape character is '^]'.
36.get key1
37.VALUE key1 0 8
38.zhangyan
39.END
40.get key2
41.END
42.quit
43.Connection closed by foreign host.
44. 
45.[root@centos52 ~]# telnet 127.0.0.1 11213
46.Trying 127.0.0.1...
47.Connected to 127.0.0.1.
48.Escape character is '^]'.
49.get key1
50.VALUE key1 0 8
51.zhangyan
52.END
53.get key2
54.VALUE key2 0 8
55.zhangyan
56.END
57.quit
58.Connection closed by foreign host.

模拟11211、11212端口的Memcached死掉

·········10········20········30········40········50········60········
01.[root@centos52 ~]# ps -ef | grep memcached
02.root      6589     1  0 01:25 ?        00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
03.root      6591     1  0 01:25 ?        00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
04.root      6593     1  0 01:25 ?        00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
05.root      6609  6509  0 01:44 pts/0    00:00:00 grep memcached
06.[root@centos52 ~]# kill -9 6589
07.[root@centos52 ~]# kill -9 6591
08.[root@centos52 ~]# telnet 127.0.0.1 12000
09.Trying 127.0.0.1...
10.Connected to 127.0.0.1.
11.Escape character is '^]'.
12.get key1
13.VALUE key1 0 8
14.zhangyan
15.END
16.get key2
17.VALUE key2 0 8
18.zhangyan
19.END
20.quit
21.Connection closed by foreign host.

模拟11211、11212端口的Memcached重启复活

·········10········20········30········40········50········60········
01.[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
02.[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
03.[root@centos52 ~]# telnet 127.0.0.1 12000
04.Trying 127.0.0.1...
05.Connected to 127.0.0.1.
06.Escape character is '^]'.
07.get key1
08.END
09.get key2
10.END
11.quit
12.Connection closed by foreign host.

优点:

  1. 可以做多主或多从

缺点:

  1. 当master宕掉又恢复后,取不到数据。

memcached单点的更多相关文章

  1. memcached单点登录配置

    域名 www.lxy.comblog.lxy.comnews.lxy.comshop.lxy.com php配置 session.save_handler = memcache session写mem ...

  2. cookie+memcached实现单点登陆

    10年的时候在iteye的第一篇文章记录了一下当时怎么实现我们系统的单点登陆.不过那个时候文章写的不好,思路也很浮躁,很难看懂,在csdn的第一篇技术博客打算重新温顾一下当时实现单点登陆的思路.先来看 ...

  3. 看图理解JWT如何用于单点登录

    单点登录是我比较喜欢的一个技术解决方案,一方面他能够提高产品使用的便利性,另一方面他分离了各个应用都需要的登录服务,对性能以及工作量都有好处.自从上次研究过JWT如何应用于会话管理,加之以前的项目中也 ...

  4. [原创]django+ldap实现单点登录(装饰器和缓存)

    前言 参考本系列之前的文章,我们已经搭建了ldap并且可以通过django来操作ldap了,剩下的就是下游系统的接入了,现在的应用场景,我是分了2个层次,第一层次是统一认证,保证各个系统通过ldap来 ...

  5. Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解

    当网站访问量达到一定时,如何做Memcached集群,又如何高可用,是接下来要讨论的问题. 有这么一段文字来描述“Memcached集群” Memcached如何处理容错的? 不处理!:) 在memc ...

  6. GPS部标监控平台的架构设计(十一)-基于Memcached的分布式Gps监控平台

    部标gps监控平台的架构,随着平台接入的车辆越来越多,架构也面临越来越大的负载挑战,我们当然希望软件尽可能的优化并能够接入更多的车辆,减少在硬件上的投资.但是当车辆增多到某一个临界点的时候,仍然要面临 ...

  7. redis和memcached

    Redis 1.主从配置(主从复制不会阻塞master.) 1)bind  192.168.1.2(请修改成本机的IP地址,要不然,客户端无法进行访问) 2)slaveof 192.168.1.1 6 ...

  8. memcached+magent实现memcached集群

    首先说明下memcached存在如下问题 本身没有内置分布式功能,无法实现使用多台Memcache服务器来存储不同的数据,最大程度的使用相同的资源:无法同步数据,容易造成单点故障.(memagent代 ...

  9. Memcached深度分析

    Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能.关于这个东西,相信很多人都用过,本文意在通过对 ...

随机推荐

  1. WebAPI实现移动端上传头像接口

    测试时可以直接使用PostMan模拟发送请求 /// <summary> /// 手机端上传头像接口 /// </summary> /// <param name=&qu ...

  2. Otter双A同步搭建入门教程

    1.准备阶段 1.1 环境 虚拟机A :192.168.0.130 虚拟机B :192.168.0.131 系统:Ubuntu 16.04 LTS JRE:OpenJDK 1.8.0_151(A.B都 ...

  3. MathType可以编辑物理公式吗

    很多的物理专业的人都在为编辑物理公式头疼,其实要写出这些公式并不难,要写出这些物理公式,那你就需要一个MathType公式编辑器!这是一款专业的公式编辑器,不管多复杂的公式或方程,都可以用它编辑出来, ...

  4. PowerDesigner使用教程3

    from:http://www.cnblogs.com/langtianya/archive/2013/03/08/2949118.html PowerDesigner是一款功能非常强大的建模工具软件 ...

  5. 在Nginx 配置防止单IP 攻击频次的控制 和 大流量攻击

    nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数. HttpLimitReqModul用来限制连单位时间内连接数的模块, ...

  6. mysql "ON DUPLICATE KEY UPDATE" 的使用

    ON DUPLICATE KEY UPDATE 语法并不是SQL的标准语法,如果在句尾指定该语法,它会根据指定的主键或者唯一标示索引来更新数据库的内容 具体的操作是想根据唯一标示查看数据库是否存在该记 ...

  7. acdream1415(dij+优先队列+桥)

    这题好坑,卡SPFA... 无奈只能用dij+优先队列了. 因为好久没有写过代码了,所以今天写dij时候突然觉得复杂度不对,dij+优先队列的复杂度是(n+m)logn,这种复杂度对于稠密图是非常慢! ...

  8. 编写高质量代码--改善python程序的建议(七)

    原文发表在我的博客主页,转载请注明出处! 建议三十四:掌握字符串的基本用法 编程有两件事,一件是处理数值,另一件是处理字符串,在商业应用编程来说,处理字符串的代码超过八成,所以需要重点掌握. 首先有个 ...

  9. hdu5861(Road)

    题目链接:传送门 题目大意:有n个点 组成n-1段,每一段开着的时候都有花费Vi,有m组要求,对于每组要求 [x,y]之间可达,对于每一段你有一次开关的机会(最初都是关闭的) 问怎样安排段落得开闭时间 ...

  10. Handlebars.js,Json+ajax+拼html

    英文版:http://handlebarsjs.com./ 原文链接:http://www.cnblogs.com/diligenceday/p/4105229.html, http://segmen ...