`

magent:Memcached的集群代理服务器软件

阅读更多

 

magent是一款开源的Memcached代理服务器软件,其项目网址为:
http://code.google.com/p/memagent/

 

一、安装步骤:
  1、编译安装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 ../

 2、编译安装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 ../

 3、编译安装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 ../

 

二、使用实例:

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还有数 据(此问题尚待改进)。

命令详解:

  -h this message
  -u uid
  -g gid
  -p port, default is 11211. (0 to disable tcp support)
  -s ip:port, set memcached server ip and port
  -b ip:port, set backup memcached server ip and port
  -l ip, local bind ip address, default is 0.0.0.0
  -n number, set max connections, default is 4096
  -D do not go to background
  -k use ketama key allocation algorithm
  -f file, unix socket path to listen on. default is off
  -i number, max keep alive connections for one memcached server, default is 20
  -v verbose
 

 

三、整个测试流程:

 

[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.

 

========================================

项目主页上有人说,存在内存泄露问题,如果使用请注意!

=======20100708==================================

今天关注其issue,发现作者shellcode已经发现了这个问题并修改了这个问题,但只是修改了源代码并没有发布bin。

分享到:
评论

相关推荐

    Memcached 服务器集群安装配置和测试

    小结:Memcached 服务器集群的安装配置和测试是一个复杂的过程,需要安装和配置多个组件,包括 libevent、Memcached 和 magent。在配置防火墙和启动服务时,需要注意防火墙的设置和服务的参数。最后,需要验证服务...

    memcached-1.4.22.tar.gz,magent6,memadmin

    memadmin可能是另一个memcached的管理工具,通常这类工具提供图形化界面,方便用户更直观地管理和监控memcached集群。memadmin-master.zip可能是这个工具的源码包,可能需要解压后编译安装,然后通过Web界面进行操作...

    memcached-1.5.9

    Magent通常是指Magent,一个用于管理memcached集群的工具,能够帮助监控和调整memcached实例的性能。 **memcached详解** 1. **工作原理**:Memcached基于键值对存储,将数据存储在内存中,通过TCP或UDP协议提供...

    magent-0.6.tar.gz

    1. **magent.c**:这是 C 语言编写的源代码文件,很可能包含了 magent 主要的功能实现,如与 Memcached 服务器的通信、节点管理和故障检测等核心逻辑。 2. **ketama.c**:这可能是实现了 Ketama 分布式哈希算法的源...

    Memcache原理及实现

    - Magent代理:Magent是一个开源的Memcached代理,可以提高Memcached集群的可用性和性能。 - 客户端库:对于Java开发,常用的客户端库是memcached client for java(也称为spymemcached),它提供方便的API接口,...

    libevent+memc+magent+repacached.zip

    标题中的"libevent+memcached+magent+repacached.zip"是一个组合了多个软件和工具的压缩包,用于搭建一个基于Memcached的集群环境。这个压缩包包含了以下关键组件: 1. **Libevent**:这是一个事件通知库,主要用于...

    session共享tomcat7 memcached 文档

    - **Non-Sticky Mode**:在这种模式下,客户端的请求可以在集群中的任意一台服务器上被处理,这就需要通过Memcached或其他中央存储来同步Session数据。 #### 四、项目环境与实施步骤 在实际部署过程中,需要完成...

    Java开发中的Memcache原理及实现

    - **定义**:一款开源的Memcached代理服务器软件,用于构建高可用性的集群应用。 - **作用**:通过代理的方式提高Memcached的稳定性和性能。 - **获取方式**:访问其项目网站 (http://code.google.com/p/memagent/) ...

    memcache集群安装

    `magent`是一个简单的memcached代理,可以用来实现简单的负载均衡。安装magent(如文件`magent-0.6.tar.gz`所示),然后配置它作为客户端与多个memcache服务器之间的中间层。 ### 8. memcached升级 在文件`...

    Java开发中的Memcache原理及实现(带书签)

    Magent是一个开源的Memcached代理服务器软件,可以用来建立和管理缓存,能够支持高可用性的集群应用。Memcached客户端程序,推荐使用memcachedclientforjava,这是因为它提供了Java开发者常用的API,方便与Java应用...

    非关系数据库对比分析

    通过 Memcached 代理软件 Magent 可以构建内存集群,如一个由 10 台 4GB 内存服务器组成的集群总共可以提供 40GB 的可用内存。 3. **MongoDB**:适合大规模数据存储,依赖操作系统虚拟内存(VM)进行内存管理。为了...

    面试题redis面试题集合.pdf

    4. 分布式:虽然两者都可以通过客户端或者代理支持分布式的实现,但Redis自身从3.0版本开始支持多播方式的集群功能,而Memcached需要依赖其他组件如Magent来实现集群。 5. 使用场景:由于Redis提供了更多的功能和...

    京东面试问题

    - **Memcached** 通常需要借助第三方工具如 Magent 来实现集群功能。 **4. 安全性和灾难恢复** - **Redis** 通过持久化机制支持数据备份,即使在服务器故障时也能通过 RDB 或 AOF 文件恢复数据。 - **Memcached** ...

Global site tag (gtag.js) - Google Analytics