Magent介绍

Magent介绍


Magent是一款开源的Memcached代理服务器软件。

项目地址:http://code.google.com/p/memagent

功能列表:


  • 和每个memcache server保持多个长连接,效果是减少memcache server保持的连接数量及创建销毁连的开销。不过,memcache本身就支持大并发连接,这个功能也就没什么特别的说道。
  • 支持memcache的binary协议命令,实现请求的转发。支持下面的memcached命令:

    1. get gets          
    2. delete          
    3. incr decr          
    4. add set replace prepend append          
    5. cas

  • 和memcache一样,基于libevent的事件驱动来处理IO。
  • 支持ketama的一致性哈希算法。支持memcache backup集群,当memcache集群有机器挂了,memagent会将get请求转向memcache backup集群。这个功能对于cache的稳定性要求高的场景下会有用武之地。
  • 支持unix domain socket,是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC),它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。

问题描述:

Memcached其中一个节点失效以后,memcached本身是没有任何策略维持失效转发的,这对于大型系统是一个无法接受的事实。

架构方案:


采用 Magent 缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存服务器,缓存代理服务器可以连接多台Memcached机器。常用架构如下:

图(1)

magent与memcached 是可以混搭的,如下图(2):

图(2)

上图此模型已经能够很好的解决一个节点,一组服务器的缓存数据服务,但是如果在北方网通架设了一组服务器,同时在南方电信又架设了另外一组服务器,那么这两组相对独立的节点之间如何做到数据的同步与共享,基于magent与memcached的解决方案如下:

图(3)

需要注意的是,两组magent的配置最好完全一致,比如:

北方的magent配置为:magent -s memcached1 -s memcached2 -b memcached3

那么南方的magent配置也为:magent -s memcached1 -s memcached2 -b memcached3

其顺序都是一致的,因为magent在分配key到memcached上时只是简单的使用散列余数算法。

当然如果你够懒,那么你可以直接连接备份magent,因为所有的数据上面都有。

有个特别要注意的地方是:

1. 其中一台Memcached死掉,从magent取数据,数据会从备份的Memcached取出,保证用户不受影响。

2. Memcached重启复活,由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管备份Memcached还有数据。可采用定时维护服务器,恢复memcached。

3. 如果Memcached死掉,备份机同时死掉,那么就没有办法,所以要设计健壮的架构。

工作原理:


我们以图(1)为示例架构来分析下magent的原理:

1. 应用程序连接magent,把缓存key1交给magent,magent根据自身的配置参数,再加ketama一致性哈希算法,会计算出key1存在3台主Memcached服务器的某一台上,然后以同样的算法,将key1也在2台备用的Memcached服务器中的某一台上,再存一份数据。即,主服务器是分布式存储的,同时,从服务器也是分布式存储的。

2. 在应用程序获取缓存数据key1时,magent一旦得知数据所存的那台主Memcached服务器挂掉了,它就会转向从备用的Memcached服务器中获取数据。注意:服务器的定位选择算法跟存的时候是一样的。

3. 有个缺陷,当 down 掉的那台主Memcached服务器重新恢复正常后,Memcahed里是没有数据的,即数据全部丢失,但此时备用的Memcached服务器又不会将数据同步到主服务器。

4. 应用程序连接代理的时候,最好每次随机性只连一台,这样,一旦某台代理挂了(即连不上),可切换连另外一台代理服务器。而随机性地去连,又保证了一定的负载均衡。

遇到的问题:


如果memcached修复重启后通过magent代理方式取到的值就会为Null,这是由于memcache重启后里边的值随着memcache服务的停止就消失了(因为在内存中),但是magent是通过key进行哈希计算分配到某台机器上的,memcache重启后会还从这台机器上取值,所有取到的值就为空。

解决办法:


1. 在每次memcache宕机修复后可以写一个程序把集群中的其他memcache的所有信息全给拷贝到当前宕机修复后的memcache中。

2. 自己写代理,当从一个memcached服务上取到的值为null时再去其他memcached上取值。

注意事项:


magent的调用方式同memcached一样,客户端可以不用改代码即可实现切换到magent模式下。

参考:http://www.cnblogs.com/happyday56/p/3461113.html

时间: 2024-08-28 21:19:35

Magent介绍的相关文章

Magent搭建Memcached集群

Magent搭建Memcached集群 Memcached集群介绍 由于Memcached服务器与服务器之间没有任何通讯,并且不进行任何数据复制备份,所以当任何服务器节点出现故障时,会出现单点故障,如果需要实现HA,则需要通过另外的方式来解决. 通过Magent缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存连接服务器,缓存代理服务器可以连接多台Memcached机器可以将每台Memcached机器进行数据同步.如果其中一台缓存服务器down机

MongoDB、Memcache、TC/TT、Redis等NOSQL博文汇总

MongoDB 系列: MongoDB介绍 MongoDB 2.4.10 安装和配置 MongoDB 实现currentOp定时捕获 MongoDB 使用副本集备份添加新的辅助副本成员 MongoDB日志切换(Rotate Log Files)方法及注意事项 MongoDB日志切换(Rotate Log Files)指南 MongoDB 日志切换(Rotate Log Files)实战 replSet error RS102 too stale to catch up Memcache 系列:

memcached+magent实现memcached集群

首先说明下memcached存在如下问题 本身没有内置分布式功能,无法实现使用多台Memcache服务器来存储不同的数据,最大程度的使用相同的资源:无法同步数据,容易造成单点故障.(memagent代理实现集群) 在 Memcached中可以保存的item数据量是没有限制的,只要内存足够 . Memcached单进程最大使用内存为2G,要使用更多内存,可以分多个端口开启多个Memcached进程 最大30天的数据过期时间,设置为永久的也会在这个时间过期,常量REALTIME_MAXDELTA 6

Magent、Memcached 负载均匀和容错

一.背景 Memcached在实现分布集群部署时, Memcached服务端的之间是没有通讯的,服务端是伪分布式,实现分布式是由客户端实现的,客户端实现了分布式算法把数据保存到不同的Memcached服务端.我们在上一篇有介绍了,当我们客户端进行保存也key为keyValue,Value为dataValue时,Memcached服务端我们做了一个测试验证一下,如图所示: 二.问题分析 memcached对容错不做处理的,也就是说当 Memcached服务端挂掉或者Memcached重启复活,由于

解决 Magent 安装编译时出现错误和magent: error while loading shared libraries: libevent-2.0.so.5

一.背景 在 Linux上安装Magent代理服务器软件时,在后面的文章会介绍介绍了Magent解决Memcached服务的负载均衡和容错上.我这边先介绍安装Magent过程中出现的问题. 二.问题 安装Magent过程中出现问题 #tar zxvf magent-0.5.tar.gz #/sbin/ldconfig #sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile #make 问题一:我在编译make Magent出现问

Redis 介绍

Redis 的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存. 因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB. Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可

数据库介绍与分类

目录 数据库介绍与分类... 1 1.1 数据库介绍... 2 1.1.1什么是数据库... 2 1.2数据库的种类... 2 1.2.1关系型数据库介绍... 2 1.2.2非关系型数据库介绍... 3 1.3 常用关系型数据库产品介绍... 4 1.3.1 Oracle数据库... 4 1.3.2 MySQL数据库... 5 1.3.3 MariaDB数据库... 5 1.3.4 SqlServer数据库... 6 1.3.5 Access数据库... 6 1.3.6 其他不常用数据库...

基于位置信息的聚类算法介绍及模型选择

百度百科 聚类:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异."物以类聚,人以群分",在自然科学和社会科学中,存在着大量的分类问题.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法.聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的. 分类和聚类算法一直以来都是数据挖掘,机器学习领域的热门课题,因此产生了众多的

Centos 7.3下 Linux For SQL Server安装及配置介绍

Centos 7.3下Linux For SQL Server安装及配置介绍 说到SQL Server服务,我们大家都知道是Microsoft公司的数据库服务,当然说到数据库,现在主要分为三大商:1:Oracle.2:Msql Server.3:Mysql:三种数据库在当下环境受到不了不同程度的关注:比如oracle主要应用到大型的商业比较多,比如银行:SQL Server主要在常见的互联网公司使用:mysql主要应用于小型的企业或者服务商使用:当然从费用上来说,Oracle是最贵的,也是最为稳