您的位置:首页 > 数据库 > Memcache

Linux系统下Memcached缓存集群和magent代理服务器集群测试方案

2015-09-12 20:16 621 查看
Linux系统下Memcached缓存集群和magent代理服务器集群测试方案

1. Memcached如何处理容错的?

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

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

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

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

举例说明:

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

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

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

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

测试准备:

Magent代理服务器2台:192.168.75.3:12000;192.168.75.3:12001

Memcached主服务器3台:192.168.75.3:11211;192.168.75.3:11212;192.168.75.3:11213

Memcached备服务器2台:192.168.75.3:11214;192.168.75.3:11215

首先在192.168.75.3上安装memcached,这里使用的是同一台机器不同端口,实际应用中采用不同机器,则都要确保安装了memcached,参考安装手册。

然后再192.168.75.3上安装magent,这里同样使用了同一台机器不同端口,实际应用中采用不同机器,则都要确保安装了magent. 可参考安装手册。

如图所示:

测试举例:

memcached -m 1 -u root -d -l 192.168.75.3 –p 11211

memcached -m 1 -u root -d -l 192.168.75.3 -p 11212

memcached -m 1 -u root -d -l 192.168.75.3 -p 11213

memcached -m 1 -u root -d -l 192.168.75.3 -p 11214

memcached -m 1 -u root -d -l 192.168.75.3 -p 11215

magent -u root -n 51200 -l 192.168.75.3 -p 12000 -s 192.168.75.3:11211 -s 192.168.75.3:11212 –s 192.168.75.3:11213 –b 192.168.75.3:11214 –b 192.168.75.3:11215

magent -u root -n 51200 -l 192.168.75.3 -p 12001 –s 192.168.75.3:11211 -s 192.168.75.3:11212 –s 192.168.75.3:11213 –b 192.168.75.3:11214 –b 192.168.75.3:11215

分别在11211、11212、11213、11214、11215端口启动5个memcached进程,在12000、12001端口开启两个magent代理程序。其中11211、11212、11213端口为主Memcached,11214、11215端口为备份Memcached。

使用telnet链接12000端口的magent

链接成功:

使用add命令添加key为1-10的数据保存。

使用get命令查看。get后面跟key,可以跟多个key,空格分开。例如:get 1 2 3 4 5 6 7 8 9 10

使用quit退出telnet链接。

链接12001端口的magent,并使用get命令查看通过12000添加的数据。

通过12001端口再添加两组数据。

退出后,链接memcached的主服务器,端口11211,发现上面分布了key为3,6,9,10的数据。

退出后,链接memcached的主服务器,端口11212,发现上面分布了key为1,4,7,11的数据。

退出后,链接memcached的主服务器,端口11213

发现上面分布了key为2,5,8,12的数据。

退出后,链接memcached的备服务器,

端口11214

发现上面分布了key为1,3,5,7,9,10,12的数据。

退出后,链接memcached的备服务器,

端口11215

发现上面分布了key为2,4,6,8,11的数据。

故障测试:

此时将memcached主服务器11213断开后,通过magent代理,端口12000查询,依然可以查询到所有key的数据。原因是代理服务器发现memcached主服务器断开后会去通过memcached备服务器查找数据。

使用12001端口的magent同样可以查到。

存在问题:

当11213端口的Memcached重启复活后,连接到12000端口,magent会从11213端口取数据,由于这台重启后无数据,因此magent取到空值,尽管备机11214和11215有数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: