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)?

17795 次点击
所在节点    Redis
79 条回复
gadsavesme
2020-08-07 12:44:27 +08:00
哨兵可以监控很多实例啊,有的公司 redis 需求有但是不高的情况,整那么多集群干嘛,简单的主从能防宕机就行了。几台哨兵能监控一大堆东西了,毕竟机器是要钱的。
Xusually
2020-08-07 12:44:45 +08:00
如果只单纯论高可用的话,是可以用集群替代哨兵的。
但是集群有集群的问题,分片并不是完全透明无痛的。
哨兵就是在原有结构基础上做的高可用切换而已,简单易用。
lewis89
2020-08-07 12:47:14 +08:00
一个是高可用,一个是高吞吐
monsterxx03
2020-08-07 12:52:28 +08:00
你附言里说的一主一从的 cluster 其实现在就能实现,所有 slot 分配到一个节点就行了,但这样没法实现 failover , 从 raft 的本质来讲,稳定的 failover 至少三节点起,目前 redis 实现里只有 master 会参与选举,如果以后 slave 能参与,一主两从实现高可用我觉得也是可行的
singerll
2020-08-07 13:25:35 +08:00
因为好多业务刚开发时完全用不到集群,随着业务的增加,最小的成本就是哨兵,业务再增加,就重构走集群。
ty89
2020-08-07 13:37:55 +08:00
哨兵是为了高可用设计的,集群是用来分布式扩容,完全两码事。
zliea
2020-08-07 13:51:27 +08:00
集群的问题我觉得是只有一个库。
哨兵的话,可以做到主写从读。
wangxiaoaer
2020-08-07 13:57:39 +08:00
不熟悉,但是感觉一个是低成本高可用,一个是高成本高负载?
robot1
2020-08-07 13:59:19 +08:00
当然是没有必要使用集群的时候啊,只需要一些高可用性,哨兵足够
zero47
2020-08-07 14:03:56 +08:00
@monsterxx03 你想表达的是只有 master 会参与投票吧? master 坏掉的 slave 是可以参选的。
rrfeng
2020-08-07 14:13:23 +08:00
sentinel 和 cluster 完全就是两码事。

sentinel 用在『 Redis 主从复制』架构下,帮助做故障恢复的,是个工具人。主从模式是用来提高可用性的。

cluster 是数据分片模式,是扩展容量 /吞吐量的,没有 sentinel 什么事。然后 cluster 模式的每个分片为了提高可用性,也可以使用主从模式,把 sentinel 工具人也用起来,就是终极模式了。
monsterxx03
2020-08-07 14:22:43 +08:00
@zero47 对,表述有问题,是这个意思
rrfeng
2020-08-07 14:27:27 +08:00
目前的问题是,集群至少需要 3 个 master 节点,很多情况只需要单节点,集群也只有一个数据库。
如果后续更新集群能做到 1 主 1 从,其实就能取缔了吧?
---------------------
你的『集群』是啥自己还没弄明白呢……
zero47
2020-08-07 16:58:22 +08:00
@rrfeng 大哥,咋总是说分不清集群和哨兵,我没有在说它们是一个东西啊,我是说用了集群,高可用其实就不需要哨兵了,因为 master 出事,slave 会参与选举顶上,怎么总说集群是用来分槽,哨兵用来高可用,我说的就不是这些事。
zero47
2020-08-07 17:03:53 +08:00
ES 的高可用方案就是集群,为啥到这里集群就只能起分片作用呢,除了分片它也可以用作高可用方案啊。
rrfeng
2020-08-07 17:18:54 +08:00
@zero47

集群和哨兵不是一回事 -> 为什么不用集群代替哨兵????
===
馒头喂人屎喂猪 -> 你为什么不吃屎代替馒头????
rrfeng
2020-08-07 17:19:23 +08:00
你是傻逼吗……刚才删掉了这句话,还是忍不住再发一次。
zero47
2020-08-07 17:23:31 +08:00
@rrfeng 好吧,我知道你听不懂人话了,谢谢你的答复
rrfeng
2020-08-07 17:27:23 +08:00
@zero47
看你态度不错再解释一下:

哨兵:解决高可用问题
集群:解决容量问题

你告诉我,一个解决容量问题的方案,怎么代替高可用方案?

如果还不明白那这个楼里应该没人会理你了。
zero47
2020-08-07 17:30:21 +08:00
@rrfeng 我想表达的是用了 redis-cluster,比如 3 个 master,3 个 slave, 当一个 master 出事了,对应的 slave 是会参与选举然后顶上的,这不就实现了高可用了吗?

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

https://tanronggui.xyz/t/696387

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

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

© 2021 V2EX