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
特点
- 支持标准开源的memcached ASCII编码协议:支持memcahed协议的所有客户端无需做任何修改即可被mcrouter支持。
- 多种hash算法:支持consistent hashing算法,集群扩容只有少量数据需要迁移。也可根据需要自定义其他hash算法:weighted ch3,crc32,HostIdRoute 等。
- 前缀路由:mcrouter可以根据key前缀把客户端分配到不同的memcahed池,从而实现集群中的memcache实例分组。
- memcached池备份:通过将add\set\delete分发到两个池,而get只从其中一个池中获取数据,实现两个池的备份。当其中一个池有实例宕机时,可以从备份池中获取数据。
- 热加载:mcrouter监控它所有的配置文件,一旦检测到任何配置文件被修改,mcrouter的一个后台线程将自动的重新加载并分析这些文件。该过程对客户端完全透明。
- 自动故障转移:一旦某实例无响应,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

浙公网安备 33010602011771号