想请教下 Memcache 能实现故障恢复的功能吗?比如我把 Memcache 部署到两台服务器上,一台宕机后,客户端可以从另一台服务器上获取 x 需要的缓存数据。
如果 Memcache 本身没有这个功能,那么有什么方案(插件或机制)可以实现这种需求吗?能谈下思路吗?
我的开发环境是 .NET 。
1
lusyoe 2016-12-13 21:45:30 +08:00
zookeeper 可以了解一下
|
2
zzn 2016-12-13 21:49:39 +08:00
配成主从?
|
3
9hills 2016-12-13 22:26:11 +08:00 1
1. Memcache 本身是不支持 HA 的,需要外部的第三方工具,可以 Google 搜索 memcache HA 来看,方法不外乎主从 /VIP 等
2. 在绝大多数场景下,建议使用 Redis 替换 Memcache ,第一是 memcache 能做的, redis 也能做,做的也不差。第二是 Redis 的本身功能和第三方支持更加丰富。 比如 Redis 3.0 g 官方支持 cluster ,可以 auto failover ,欢迎踩坑,^_^ |
4
mckelvin 2016-12-14 00:06:05 +08:00 via iPhone 1
这个东西 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. |
5
dangyuluo 2016-12-14 00:12:32 +08:00
我觉得 Memcached 应该只做为缓存,也就是说即使所有 Memcached 节点都失效,程序应仍然具有从后台数据库中直接读取数据的能力。
|
6
ryd994 2016-12-14 07:21:43 +08:00 via Android 1
其实嘛用 haproxy 做 TCP failover 就行
反正缓存这个本来就是不保证可用性的 缺点是主服挂了后会有一大波请求打在从服和数据库上 可以考虑从服异步拉 |
7
douyang 2016-12-14 09:25:23 +08:00
repcached
http://repcached.lab.klab.org/ |