Memcached无单点解决方案

一.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版本

#wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repcached-2.2.tar.gz
#tar zxf memcached-1.2.8-repcached-2.2.tar.gz
#cd memcached-1.2.8-repcached-2.2

方式二、下载对应patch版本

#wget http://downloads.sourceforge.net/repcached/repcached-2.2-1.2.8.patch.gz
#gzip -cd ../repcached-2.2-1.2.8.patch.gz | patch -p1】
#./configure –enable-replication
# make
# make install

3、启动:

启动master

# ./memcached -v -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111   (11211:master端口;11111:同步端口)
replication: connect (peer=127.0.0.1:11111)
replication: accept
replication: marugoto copying
replication: start

启动salve

# ./memcached -v -u root -d -l 127.0.0.1 -p 11212 -x 127.0.0.1 -X 11111   (11212:slave端口;11111:同步端口)
replication: connect (peer=127.0.0.1:11111)
replication: marugoto copying
replication: close
replication: listen

4、测试:

操作master

[root@localhost bin]# telnet 127.1 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1)...
Escape character is '^]'.
get key1
END
set key1 0 0 2
aa
STORED
quit
Connection closed by foreign host.

查看slave

[root@localhost bin]# telnet 127.1 11212
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1)...
Escape character is '^]'.
get key1
VALUE key1 0 2
aa
END
quit
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:

wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure --prefix=/usr
make && make install
cd ../

b、编译安装Memcached:

wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6/
./configure --with-libevent=/usr
make && make install
cd ../

c、编译安装magent:

mkdir magent
cd magent/
wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
tar zxvf magent-0.5.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp magent /usr/bin/magent
cd ../

2、使用实例:

memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
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、整个测试流程:

[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stats
memcached agent v0.4
matrix 1 -> 127.0.0.1:11211, pool size 0
matrix 2 -> 127.0.0.1:11212, pool size 0
END
set key1 0 0 8
zhangyan
STORED
set key2 0 0 8
zhangyan
STORED
quit
Connection closed by foreign host.

[root@centos52 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
END
get key2
VALUE key2 0 8
zhangyan
END
quit
Connection closed by foreign host.

[root@centos52 ~]# telnet 127.0.0.1 11212
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
VALUE key1 0 8
zhangyan
END
get key2
END
quit
Connection closed by foreign host.

[root@centos52 ~]# telnet 127.0.0.1 11213
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
VALUE key1 0 8
zhangyan
END
get key2
VALUE key2 0 8
zhangyan
END
quit
Connection closed by foreign host.

模拟11211、11212端口的Memcached死掉

[root@centos52 ~]# ps -ef | grep memcached
root      6589     1  0 01:25 ?        00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
root      6591     1  0 01:25 ?        00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
root      6593     1  0 01:25 ?        00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
root      6609  6509  0 01:44 pts/0    00:00:00 grep memcached
[root@centos52 ~]# kill -9 6589
[root@centos52 ~]# kill -9 6591
[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
VALUE key1 0 8
zhangyan
END
get key2
VALUE key2 0 8
zhangyan
END
quit
Connection closed by foreign host.

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

[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get key1
END
get key2
END
quit
Connection closed by foreign host.

 

优点:

  1. 可以做多主或多从

缺点:

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

三.Repcached和Magent结合

安装memcached 1.2.8、repcached 2.2.1、magent 0.5

测试流程:

1、启动memcached和magent

开启代理,代理端口为12000,设置127.0.0.1:11211为主,127.0.0.1:11212为从。

magent -u root -p 12000 -s 127.0.0.1:11211 -b 127.0.0.1:11212

启动两个memcached进程,做数据同步,同步端口为11111。

./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111

./memcached -u root -d -l 127.0.0.1 -p 11212 -x 127.0.0.1 -X 11111

2、从代理写入数据,在两台memcached上查看

[root@localhost bin]# telnet 127.1 12000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set key1 0 0 1
a
STORED
quit
Connection closed by foreign host.
[root@localhost bin]# telnet 127.1 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key1
VALUE key1 0 1
a
END
quit
Connection closed by foreign host.

 

3. 模拟主或从memcached宕机后,数据是否存在

[root@localhost bin]# ps aux|grep memcached
root    15314  0.0 0.4 3556  2108 ?     Ss   16:03   0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
root    15318  0.0 0.3 3556  1836 ?     Ss   16:04   0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
root    15370  0.0 0.1 4016   696 pts/3 R+   16:09   0:00 grep memcached
[root@localhost bin]# kill 15314
[root@localhost bin]# ps aux|grep memcached
root    15318  0.0 0.3 3556  1836 ?     Ss   16:04   0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
root    15370  0.0 0.1 4016   696 pts/3 R+   16:09   0:00 grep memcached
[root@localhost bin]# telnet 127.1 12000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set key1 0 0 1
a
STORED
quit
Connection closed by foreign host.
[root@localhost bin]# telnet 127.1 11212
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key1
VALUE key1 0 1
a
END
quit
Connection closed by foreign host.

4. 模拟主或从memcached恢复后,数据是否存在/同步

[root@localhost bin]# ./memcached -u root -d -l 127.0.0.1 -X 11111
[root@localhost bin]# ps aux|grep memcached
root    15318  0.0 0.4 3556  2112 ?     Ss   16:04   0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
root    15380  0.0 0.3 3556  1808 ?     Ss   16:11   0:00 ./memcached -u root -d -l 127.0.0.1 -p 11211 -x 127.0.0.1 -X 11111
root    15384  0.0 0.1 4016   700 pts/3 R+   16:11   0:00 grep memcached
[root@localhost bin]# telnet 127.1 12000
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set key1 0 0 1
a
STORED
quit
Connection closed by foreign host.
[root@localhost bin]# telnet 127.1 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get key1
VALUE key1 0 1
a
END
quit
Connection closed by foreign host.

优点:

  1. 数据冗余
  2. 两台memcached都可进行读写操作
  3. 可以做多主或多从(未测试)

缺点:

  1. 只支持memcached 1.2.x版本

原文发布时间为:2012-07-05


本文来自合作伙伴“Linux中国”

时间: 2024-11-06 09:48:33

Memcached无单点解决方案的相关文章

整套公共服务无尾解决方案成广交会热点

[赛迪网讯]10月18日消息,不需要连接电线,走在商场里手机就可以自动充电:家里电饭煲不用电源线就能煮好米饭.搅拌机也会提前准备好可口的果汁和豆浆--10月15日,这些看似只有在好莱坞大片中才能出现的智能生活场景,在第114届中国进出口商品交易会(简称广交会)上变为了现实.海尔在现场展出的一整套无尾家电吸引了众多外商驻足体验,其"无线供电"技术不仅涵盖了电饭煲.搅拌机等厨房电器,还实现了手机.iPad智能无线充电,成为本届广交会的一大热点.整套公共服务无尾解决方案成广交会热点无尾家电广

佳能全高清无带化解决方案亮相BIRTV展

8月23日,第十九届BIRTV展会在北京隆重开幕.作为全球领先的影像厂商,佳能在本届盛会给广大用户带来了完整的"全高清无带化解决方案".在佳能的展台上主要展出了最新的专业级XF305和XF300新品,除了佳能XF系列外,还展出了佳能HDV.望远镜和投影机等产品,同台亮相的还有备受专业媒体好评的佳能广播级镜头.业界人士认为,佳能XF系列的出现为专业影视拍摄提出了新的解决方案,其应用领域非常广泛,如电视台.高等院校和网络视频媒体等,其"无带化"的设计理念具有很强的前瞻性

运营商解释称是系统错误,但并无具体解决方案

福州市民林女士日前发现,丈夫高先生的身份证名下竟然有672个手机号码.除一个号码是自用外,其他用户他们并不认识."我的身份证,咋多挂了671个手机号"高先生也不解(12月5日<海峡都市报>).按照通讯公司客服人员的解释,一张身份证最多只能登记30个预付费号码.10个后付费号码,也就是说一个人名下最多可以有40个手机号码.那么,多出的这些手机号码是通过何种途径登记的?工信部<电话用户真实身份信息登记规定>自今年9月1日起正式实施,规定明确要求手机号码实行实名制.对

ASP.NET页面中标题单点解决方案

asp.net|解决|页面 最近在使用.net2.0中ms提供的页面导航组件sitemappath时,想到了一种解决页面标题不同步的一种简单而又方便的机制. 目前存在的问题: 一.整个网站中aspx页面标题通常没有统一的存放位置,针对每个页面要么把页面标题直接硬编码在页面的aspx文件中,要么通过aspx.cs动态写进去(1.1中还要加入额外的标题控件,2.0中可以使用Page.Title属性),而整个站点如果网页很多的话,这种重复逻辑的代码就要写很多次,极其不美观,并且无法在其它用到标题信息的

用管理员帐号新建了一个未知类型的文件(test.bdsgroup) 删除时提示无权限

问题描述 用管理员帐号新建了一个未知类型的文件(test.bdsgroup) 删除时提示无权限 解决方案 右键属性里面找到安全,看里面是否有你的权限 解决方案二: 右键获取超级管理员权限,或者进入安全模式删除 解决方案三: 用光盘或者U盘进windowsPE去删吧

调用didReceiveBuddyRequest无反应

问题描述 调用didReceiveBuddyRequest后   像测试账号发送好友请求,但是无反应 解决方案 这个是回调方法,收到好友请求的时候会触发这个.要声明实现<IChatManagerDelegate>,addDelegate   回调所在的类 需要初始化.解决方案二:这几步在主界面里都实现了,请问这个跟什么消息推送啥的没有关系吧解决方案三:跟推送没关系,http://docs.easemob.com/doku.p ... qa%23无法收到加好友请求

CDN HTTPS解决方案及优化实践

2017在线技术峰会,阿里云CDN技术专家容恪来为大家解析CDN HTTPS 红包背后的技术实践.本文主要从SSL/TLS 及 HTTP/2开始谈起,着重分析了HTTPS 架构和优化实践,最后对用户如何更好使用 HTTPS作了指导.   以下是精彩内容整理: SSL/TLS及HTTP/2介绍 HTTPS 对于HTTPS,其实是在HTTP 之下增加了 SSL/TLS的传输.在整个TCP/IP协议中的结构如图,传输层之上是会话层,会话层中传输的是SSL/TLS协议,HTTP 是在应用层.如果不用 S

有没有高手做过这样的解决方案?数据库递归+WCF=>EXT树所需JSON

问题描述 /*----------------------------------有没有高手做过这样的解决方案?数据库递归+WCF=>EXT树所需JSON在代码里递归的不算在代码里递归查询数据库的更不算要一个简洁的,自治的方案,如上所述数据库表结构大致类似----------------------------------*/ createtableTreeMenu(IDintidentity(1,1)primarykey,ParentIDint,Namenvarchar(200),Urlnva

思杰推出企业移动设备管理解决方案XenMobile MDM

2013年4月3日,北京--近日,思杰推出了企业移动设备管理解决方案XenMobileMDM,在为用户带来更多设备选择的同时也让企业能够满足其管理及合规要求.自此,XenMobile MDM将与思杰的Citrix CloudGateway.Citrix NetScaler.Citrix XenDesktop®.GoToMeeting®.GoToAssist®.Citrix ShareFile和Citrix Podio等解决方案一道,为企业用户提供整体解决方案,满足其全部移动需求. 企业终端用户都