Redis PUB/SUB 和高可用性

标签 redis high-availability

目前我正在研究分布式测试执行和报告系统。我打算使用 Redis PUB/SUB 作为消息队列和消息分发系统。

我是 Redis 的新手,所以我正在尝试阅读尽可能多的文档并尝试使用它。最重要的主题之一是高可用性。正如我所说,我不是专家,但我知道可能的选择 - 使用 Sentinel、复制、集群等。

我不清楚 Pub/Sub 功能和 HA 选项是如何相互关联的。使用 Redis 构建可靠的消息传递系统的最佳实践是什么?我所说的可靠是指如果我的 Redis 消息代理出现故障,应该有某种备份节点(从节点?)能够接管这个角色。

是否有纯粹的服务器端解决方案?或者我是否需要围绕 Redis 客户端创建一个智能包装器来处理这个问题? Sentinel 驱动的设置对我有帮助吗?

最佳答案

在具有故障转移功能的 Redis 中执行 pub sub 意味着要考虑客户端的其他因素。要理解的一个关键部分是订阅是按连接进行的。如果你订阅了一个节点上的 channel 并且它失败了,你将需要处理重新连接和重新订阅。因为订阅是在连接级别完成的,所以它不是可以复制的东西。

关于它的工作原理和您可以期待看到的内容的详细信息,以及解决它的方法,请参阅我今年早些时候在 https://objectrocket.com/blog/how-to/reliable-pubsub-and-blocking-commands-during-redis-failovers 上发表的一篇文章。

您可以通过订阅 slave 并发布到 master 来降低风险面,但是您需要订阅不可升级的 slave 并且仍然需要处理失去 slave 的问题——失去的机会同样多一个给定的奴隶就像有一个主人一样。

关于Redis PUB/SUB 和高可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38832167/

相关文章:

amazon-web-services - 如何在 AWS 上设置 Kubernetes Master HA

spring-boot - 使用 Consul 集群实现容错

amazon-s3 - S3 高可用性 + 备份可靠性

Java-Redis : Pool of 300+ connections possible?

spring - Ignite 与 Redis Websession 集群

api - Redis Booksleeve——如何正确使用Hash API

java - MapReduce 从 Redis 读取输入

雷迪斯(1.2.6): Slow queries

amazon-web-services - 使用 Terraform 在 AWS 上创建 HA NAT

mysql - Kubernetes 多数据库实例或 HA 单实例