Redis 的哨兵模式为什么还有人用?

2020-08-07 10:54:12 +08:00
 zero47

Redis 的高可用方案有两种,哨兵和集群。

个人浅薄理解,哨兵模式就是创建一个备胎,备胎同步 master 数据,在 master 出现异常的时候进行切换。

而集群则是创建一个 slave,slave 同步 master 数据,可用于客户端读取,在 master 出现异常的时候进行选举切换为 master 。集群模式要求最少 3 个 master 节点,master 节点间分槽管理数据。

在正常情况下,哨兵就是个吃白饭的,没有任何作用,而集群的 slave 则参与读操作。

怎么看都是集群完胜啊,为啥还有人在坚持维护哨兵模式呢(比如 helm 的 redis-ha)?

17798 次点击
所在节点    Redis
79 条回复
lhy0dyx
2020-08-07 17:32:16 +08:00
你说的哨兵应该是指主从模式,哨兵是用来监控的,一般和会主从模式结合,主节点挂了,把从节点升级成主节点,集群是为了扩容,通过哈希槽的方式来扩展整个 redis 的存储空间。大型使用一般是用集群,集群的节点用主从,同时配哨兵来检测主节点挂没挂,如果再考虑哨兵可能会挂,还可以配多哨兵,互相监控。
rrfeng
2020-08-07 17:36:22 +08:00
所谓的『高可用集群』就是把两个方案叠加起来,只是你看不到 sentinel 了而已。

要实现高可用至少要 3 节点,所以你说的 cluster 模式一主一从无法实现。
rrfeng
2020-08-07 17:37:29 +08:00
如果后续更新集群能做到 1 主 1 从,其实就能取缔了吧?
---------
不可能。结贴。
useben
2020-08-07 17:39:58 +08:00
@lhy0dyx 集群的节点用主从,同时配哨兵来检测主节点挂没挂,如果再考虑哨兵可能会挂,还可以配多哨兵,互相监控。这里你理解错了

集群没有哨兵这套, 而是内部实现故障转移的机制, 是基于 raft 那套
TypeError
2020-08-07 17:42:54 +08:00
一主一从搞个毛线集群啊
lhy0dyx
2020-08-07 17:52:28 +08:00
@useben 感谢指点
yidou9527
2020-08-07 17:56:51 +08:00
我觉得楼主理解是没有错的 前面人没细看楼主说的话 或者自己可能没太搞懂 redis cluster
zgzhang
2020-08-07 18:01:04 +08:00
@zero47 目前工作中绝大部分使用的都是集群部署,部分使用哨兵是需要 mget
whahuzhihao
2020-08-07 18:09:04 +08:00
楼主问的应该是,既然集群也能实现高可用,为啥还要用哨兵
msg7086
2020-08-07 18:45:50 +08:00
借贴问问题。

手里有一个场景,两台服务器在两个机房,服务器上有相应的应用需要对本机 Redis 节点做大量读取和异步写入,所以需要数据在两边都完整地存一份,支持两边同时读取和同时异步写入。这种场景现在 Redis Cluster 能实现吗?

现在是用 KeyDB 的双主节点异步 Replication 来做的,稳定性存疑,但是一直找不到替代方案。
zero47
2020-08-07 18:52:53 +08:00
@zgzhang 感谢回答
zero47
2020-08-07 18:53:28 +08:00
@whahuzhihao 一开始没想到这么大的歧义,感谢理解
zero47
2020-08-07 19:16:04 +08:00
@msg7086 不太了解具体需求,但感觉这不是最佳方案,redis cluster 是可以做到两边都完整存一份的,它可以实现机器 A 负责存储一部分数据,机器 B 存储一部分数据,然后各自设立对方 slave 来获得副本。但无法保证 A 只调用 A 的 redis,A 也可能调用 B 的 redis
msg7086
2020-08-07 19:34:46 +08:00
@zero47 唔,不能跨机房调用,性能问题。一台机器上每秒上万请求,跨机房访问必炸…
RedisMasterNode
2020-08-07 19:34:51 +08:00
@wangyanrui 你理解得不对,是不是以为 Redis Cluster 是几台机器组起来的集群,然而其实并不是,典型的架构是例如起 3 主 3 从的 Redis Cluster,这里面会包括有了当主节点挂掉的时候,从节点接替继续工作的 Feature,而不是挂了其中之一就挂掉,所以这两者是有可比性并且哨兵确实就是落后的。
RedisMasterNode
2020-08-07 19:36:00 +08:00
@wangyanrui 哨兵仅仅是 Redis 高可用的方案之一,而 Cluster 是同时做了高性能和高可用的方案,并不是只是组集群发挥更高性能而已,所以~建议下次指点别人之前确认自己的理解是正确的,不然就,hhh 蛮尴尬^_^
guagusi
2020-08-07 21:14:06 +08:00
集群的优点就不说了。1>单从成本来说,哨兵只需要部署两个服务:1master 和 1slave ;集群至少得 6 个服务:3 个 master 和 3 个 slave ; 2>从运维成本来说,哨兵更容易维护; 3>写效率来说,集群得对 key 进行哈希计算决定写入哪个 master,如果不是当前节点则会返回给客户端让客户端重新发起写去请求(类似于 HTTP 的 302 重定向)
GGGG430
2020-08-07 21:32:41 +08:00
不会还有人用 redis 哨兵吧? 不会吧 不会吧 .... 哈哈, 无知!
angryfish
2020-08-07 23:46:49 +08:00
用了集群,貌似事务特性就没了?还有好些指令不能用了。而很多应用,其实并发没那么高,redis 也基本不会宕机,没必要浪费那么多台服务器
wangyanrui
2020-08-08 00:01:57 +08:00
@RedisMasterNode 只是形象的举例

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

https://tanronggui.xyz/t/696387

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

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

© 2021 V2EX