memcached集群

memcached集群

方案

magent做代理:

Google废弃了此项目,目前已不再使用,可换成nginx、haproxy做4层代理即可
不支持缓存的复制功能

magent项目站点:https://code.google.com/archive/p/memagent/

twemproxy代理

twitter的成熟案例,主要配合是twemproxy+redis,与memcache配合使用的案例较少;
不支持缓存的复制功能

mcrouter

facebook的成熟案例;功能强大,支持Memcache实例分组、实例复制功能,实例宕机后可自动踢出
在峰值的时候,mcrouter处理接近50亿的请求/秒
一般用于ubuntu平台,在centos上安装较复杂

注意点:mcrouter管理的后端越多,性能下降越多,32个后端,性能下降15%,原因由网络和cpu处理有关

参考:https://blog.csdn.net/sdmei/article/details/78696868

特点
  1. 支持标准开源的memcached ASCII编码协议:支持memcahed协议的所有客户端无需做任何修改即可被mcrouter支持。
  2. 多种hash算法:支持consistent hashing算法,集群扩容只有少量数据需要迁移。也可根据需要自定义其他hash算法:weighted ch3,crc32,HostIdRoute 等。
  3. 前缀路由:mcrouter可以根据key前缀把客户端分配到不同的memcahed池,从而实现集群中的memcache实例分组。
  4. memcached池备份:通过将add\set\delete分发到两个池,而get只从其中一个池中获取数据,实现两个池的备份。当其中一个池有实例宕机时,可以从备份池中获取数据。
  5. 热加载:mcrouter监控它所有的配置文件,一旦检测到任何配置文件被修改,mcrouter的一个后台线程将自动的重新加载并分析这些文件。该过程对客户端完全透明。
  6. 自动故障转移:一旦某实例无响应,mcrouter将直接将相关请求转移到另一个可用的实例。同时,后台继续向无响应实例发送心跳请求,只要该实例恢复正常,mcrouter将会重新启用这个实例。该过程对客户端完全透明。
自动故障转移策略

Memcache实例异常将被mcrouter标记为"TKO" ("technical knockout")状态。

根据不同情况分为Soft TKO和Hard TKP两种状态:

Soft TKO:连续3次请求超时(failures_until_tko控制);
Hard TKO:发生1次connect error或1次connect timeout。

Memcache实例被标记为TKO状态后,原本应该Hash到该实例的请求将转发到”FailoverRouter”指定的备份实例;同时,mcrouter通过探针以一定频率(初始probe_delay_initial_ms默认10000,以50%左右的幅度增长,最大probe_delay_max_ms 默认60000)检测TKO状态的实例,只要该实例恢复正常,mcrouter将会重新启用这个实例。该过程对客户端完全透明

Repcached版本memcached:

repcached版本的memcached之间会自动同步数据,以保持数据一致性,即使其中的一台memcached故障也不影响业务正常运行,故障的memcached修复上线后再自动从另外一台同步数据即可保持数据一致性

由于是此软件是二次开发版,官方的memcache与repace-memcache只能用一个(使用时删掉刚刚做实验的官方memcached)

下载:http://repcached.sourceforge.net/

memcached程序

由于是二开版本,加入了新选项

memcached -h

-d 		后台运行
-m 1024		分配内存1024M,默认64MB
-p 11211	端口
-u 用户			运行身份
-c 2048		最大并发连接数
-x 远程ip		双向复制的另一端ip
memcached -d -u memcache -m 1024 -c 2048 -p 11211 -x 2.2.2.22 
搭建复制集群
节点 ip
A主机 2.2.2.22
B主机 2.2.2.42
1)2个主机安装repcached版的memcached

参考文章:memcached部署

2)A主机运行memcached
vim /etc/sysconfig/memcached-repcached
OPTIONS='-x 2.2.2.42'

systemctl restart memcached-repcached.service
3)B主机运行memcached
vim /etc/sysconfig/memcached-repcached
OPTIONS='-x 2.2.2.22'

systemctl restart memcached-repcached.service
4)测试
#连接A
telent 2.2.2.22 11211
>set key1 1 0 2
 v1

#连接B
>telent 2.2.2.42 11211
get key1
posted @ 2023-11-27 20:24  suyanhj  阅读(41)  评论(0)    收藏  举报