magent是一款开源的Memcached代理服务器软件,其项目网址为:
  http://code.google.com/p/memagent/
  1. 一、安装步骤: 
  2. 1、编译安装libevent: 
  3. wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz 
  4. tar  zxvf libevent-1.4.9-stable.tar.gz 
  5. cd libevent-1.4.9-stable/ 
  6. ./configure  --prefix=/usr 
  7. make && make install 
  8. cd ../ 
  9.  
  10. 2、编译安装Memcached: 
  11. wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz 
  12. tar  zxvf memcached-1.2.6.tar.gz 
  13. cd memcached-1.2.6/ 
  14. ./configure  --with-libevent=/usr 
  15. make && make install 
  16. cd ../ 
  17.   
  18. 3、编译安装magent: 
  19. mkdir magent 
  20. cd magent/ 
  21. wget http://memagent.googlecode.com/files/magent-0.5.tar.gz 
  22. tar  zxvf magent-0.5.tar.gz 
  23. /sbin/ldconfig 
  24. sed -i "s#LIBS = -levent#LIBS =  -levent -lm#g" Makefile 
  25. make 
  26. cp magent /usr/bin/magent 
  27. cd ../ 
  28.   
  29.   
  30. 二、使用实例: 
  31. memcached -m 1 -u root -d -l 127.0.0.1 -p 11211 
  32. memcached -m 1 -u root  -d -l 127.0.0.1 -p 11212 
  33. memcached -m 1 -u root -d -l 127.0.0.1 -p  11213 
  34. 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 
  35.   
  36.  
  37. 1、分别在11211、11212、11213端口启动3个Memcached进程,在12000端口开启magent代理程序; 
  38. 2、11211、11212端口为主Memcached,11213端口为备份Memcached; 
  39. 3、连接上12000的magent,set  key1和set  key2,根据哈希算法,key1被写入11212和11213端口的Memcached,key2被写入11212和11213端口的Memcached; 
  40. 4、当11211、11212端口的Memcached死掉,连接到12000端口的magent取数据,数据会从11213端口的Memcached取出; 
  41. 5、当11211、11212端口的Memcached重启复活,连接到12000端口,magent会从11211或11212端口的Memcached取数据,由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管11213端口的Memcached还有数据(此问题尚待改进)。 
  42.   
  43. 三、整个测试流程: 
  44. [root@centos52 ~]# telnet 127.0.0.1 12000 
  45. Trying  127.0.0.1... 
  46. Connected to 127.0.0.1. 
  47. Escape character is  '^]'. 
  48. stats 
  49. memcached agent v0.4 
  50. matrix 1 -> 127.0.0.1:11211, pool  size 0 
  51. matrix 2 -> 127.0.0.1:11212, pool size 0 
  52. END 
  53. set key1 0 0  10 
  54. guzhiqiang 
  55. STORED 
  56. set key2 0 0  10 
  57. guzhiqiang 
  58. STORED 
  59. quit 
  60. Connection closed by foreign host. 
  61.  
  62. [root@centos52 ~]# telnet 127.0.0.1 11211 
  63. Trying  127.0.0.1... 
  64. Connected to 127.0.0.1. 
  65. Escape character is '^]'. 
  66. get  key1 
  67. END 
  68. get key2 
  69. VALUE key2 0  10 
  70. guzhiqiang 
  71. END 
  72. quit 
  73. Connection closed by foreign host. 
  74.  
  75. [root@centos52 ~]# telnet 127.0.0.1 11212 
  76. Trying  127.0.0.1... 
  77. Connected to 127.0.0.1. 
  78. Escape character is '^]'. 
  79. get  key1 
  80. VALUE key1 0 10 
  81. guzhiqiang 
  82. END 
  83. get  key2 
  84. END 
  85. quit 
  86. Connection closed by foreign host. 
  87.  
  88. [root@centos52 ~]# telnet 127.0.0.1 11213 
  89. Trying  127.0.0.1... 
  90. Connected to 127.0.0.1. 
  91. Escape character is '^]'. 
  92. get  key1 
  93. VALUE key1 0 10 
  94. guzhiqiang 
  95. END 
  96. get key2 
  97. VALUE key2 0  10 
  98. guzhiqiang 
  99. END 
  100. quit 
  101. Connection closed by foreign host. 
  102.   
  103.  
  104. 模拟11211、11212端口的Memcached死掉 
  105. [root@centos52 ~]# ps -ef | grep  memcached 
  106. root      6589     1  0 01:25 ?        00:00:00 memcached -m 1 -u  root -d -l 127.0.0.1 -p 11211 
  107. root      6591     1  0 01:25 ?        00:00:00  memcached -m 1 -u root -d -l 127.0.0.1 -p 11212 
  108. root      6593     1  0 01:25  ?        00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11213 
  109. root       6609  6509  0 01:44 pts/0    00:00:00 grep memcached 
  110. [root@centos52 ~]# kill  -9 6589 
  111. [root@centos52 ~]# kill -9 6591 
  112. [root@centos52 ~]# telnet  127.0.0.1 12000 
  113. Trying 127.0.0.1... 
  114. Connected to 127.0.0.1. 
  115. Escape  character is '^]'. 
  116. get key1  
  117. VALUE key1 0 10 
  118. guzhiqiang 
  119. END 
  120. get  key2 
  121. VALUE key2 0 10 
  122. guzhiqiang 
  123. END 
  124. quit 
  125. Connection closed by  foreign host. 
  126.  
  127. 模拟11211、11212端口的Memcached重启复活 
  128. [root@centos52 ~]# memcached -m 1 -u  root -d -l 127.0.0.1 -p 11211 
  129. [root@centos52 ~]# memcached -m 1 -u root -d -l  127.0.0.1 -p 11212 
  130. [root@centos52 ~]# telnet 127.0.0.1 12000 
  131. Trying  127.0.0.1... 
  132. Connected to 127.0.0.1. 
  133. Escape character is '^]'. 
  134. get  key1 
  135. END 
  136. get key2 
  137. END 
  138. quit 
  139. Connection closed by foreign  host.