memcache集群 magent缓存代理

一、伪集群方案 
最常见的做法:memcache安装后,在一台机器或多台机器上启动多个实例,客户端配置memcache节点的ip,port即可。 
由客户端实现分布式缓存效果,其实是伪集群。 
memcache节点之间不通信,无数据备份,负载均衡由客户端实现,存在单点故障。 

客户端可设置故障恢复和故障转移机制。

二、magent缓存代理集群

Memcached如何处理容错的?

不处理!:) 在memcached节点失效的情况下,集群没有必要做任何容错处理。如果发生了节点失效,应对的措施完全取决于用户。节点失效时,下面列出几种方案供您选择:

* 忽略它! 在失效节点被恢复或替换之前,还有很多其他节点可以应对节点失效带来的影响。

* 把失效的节点从节点列表中移除。做这个操作千万要小心!在默认情况下(余数式哈希算法),客户端添加或移除节点,会导致所有的缓存数据不可用!因为哈希参照的节点列表变化了,大部分key会因为哈希值的改变而被映射到(与原来)不同的节点上。

* 启动热备节点,接管失效节点所占用的IP。这样可以防止哈希紊乱(hashing chaos)。

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

举例说明:

在客户端连接的部分写入多个服务器端的ip地址,客户端将会自动的把缓存数据分布的放在每个不同的机器上,如图所示:

memcache集群 magent缓存代理

缺陷说明:

如果其中一个缓存节点的机器down机,那么客户端存入的缓存数据将会丢失一部分,就是图中红色字体描述的“Losed 33% Cache Data”,也就是说那部分数据彻底没有了!如果是用户的关键性信息那么就玩大了,如图所示:

memcache集群 magent缓存代理

解决方案:采用缓存代理服务器

采用 Magent 缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存服务器,缓存代理服务器可以连接多台Memcached机器,如下图所示,配件清单如下:

Magent代理服务器:2台,分别为 192.168.1.2:12000、192.168.1.3:12000

Memcached主服务器:3台,分别为 192.168.1.4:11211、192.168.1.5:11211、192.168.1.6:11211 

Memcached备服务器:2台,分别为 192.168.1.7:11211、192.168.1.8:11211

memcache集群 magent缓存代理

搭建Memcahced服务器

在 192.168.1.4、192.168.1.5、192.168.1.6、192.168.1.7、192.168.1.8 上分别编译安装并运行Memcached ,


搭建Magent代理服务器

在 192.168.1.2、192.168.1.3 上分别 编译安装 

magent下载地址:https://download.****.net/download/wenjianbao/7994409

#编译安装安装magent到 /usr/local/ 下

1 cd /usr/local/
2 mkdir ./magent
3 cd ./magent
4 wget -c http://memagent.googlecode.com/files/magent-0.6.tar.gz
5 tar xzvf ./magent-0.6.tar.gz
6 /sbin/ldconfig
7 sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
8 make
9 cp ./magent /usr/bin/magent

注意:编译的过程中遇到了好几处错误,错误解决过程,请参考

CentOS6.3编译安装Memcached集群分布式缓存代理Magent-0.6出错汇总

magent命令详解:

  -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

在 192.168.1.2、192.168.1.3 上分别运行 magent:

1 magent -u root -n 51200 -l 192.168.1.2 -p 12000 -s 192.168.1.4:11211 -s 192.168.1.5:11211 -s 192.168.1.6:11211 -b 192.168.1.7:11211 -b 192.168.1.8:11211
连接的主机不是Memcached服务器了,而是 Magent代理服务器,给 addServer()方法传参时,传入的是Magent主机IP与端口!