Memcache 能实现故障恢复的功能吗?

2016-12-13 21:42:06 +08:00
 Dic4000

  想请教下 Memcache 能实现故障恢复的功能吗?比如我把 Memcache 部署到两台服务器上,一台宕机后,客户端可以从另一台服务器上获取 x 需要的缓存数据。

  如果 Memcache 本身没有这个功能,那么有什么方案(插件或机制)可以实现这种需求吗?能谈下思路吗?

  我的开发环境是 .NET 。

3838 次点击
所在节点    .NET
8 条回复
lusyoe
2016-12-13 21:45:30 +08:00
zookeeper 可以了解一下
zzn
2016-12-13 21:49:39 +08:00
配成主从?
9hills
2016-12-13 22:26:11 +08:00
1. Memcache 本身是不支持 HA 的,需要外部的第三方工具,可以 Google 搜索 memcache HA 来看,方法不外乎主从 /VIP 等
2. 在绝大多数场景下,建议使用 Redis 替换 Memcache ,第一是 memcache 能做的, redis 也能做,做的也不差。第二是 Redis 的本身功能和第三方支持更加丰富。

比如 Redis 3.0 g 官方支持 cluster ,可以 auto failover ,欢迎踩坑,^_^
mckelvin
2016-12-14 00:06:05 +08:00
这个东西 memcached 本身不支持。如果是 Smart Client (这个 failover 逻辑在客户端做),可以看看 https://github.com/douban/libmc/blob/master/src/HashkitKetama.cpp 实现的 failover 机制;否则可以看看 https://github.com/facebook/mcrouter 是怎么在 Proxy 上做的。

如果你只想快速用上这个功能,那就搭个 mcrouter 然后客户端连 mcrouter, mcrouter 再去连两台 memcached server.
dangyuluo
2016-12-14 00:12:32 +08:00
我觉得 Memcached 应该只做为缓存,也就是说即使所有 Memcached 节点都失效,程序应仍然具有从后台数据库中直接读取数据的能力。
ryd994
2016-12-14 07:21:43 +08:00
其实嘛用 haproxy 做 TCP failover 就行
反正缓存这个本来就是不保证可用性的
缺点是主服挂了后会有一大波请求打在从服和数据库上
可以考虑从服异步拉
douyang
2016-12-14 09:25:23 +08:00
billowqiu
2016-12-14 18:20:06 +08:00
@douyang 这个比较轻量级,可惜已经不维护了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/327433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX