Redis哨兵vs集群

拉文德拉布

我了解redis前哨是一种在多个Redis实例之间配置HA(高可用性)的方法。如我所见,有一个Redis实例在任何给定时间主动服务于客户端请求。还有两个其他服务器处于待机状态(等待发生故障,因此其中一个可以再次运行)。

  • 浪费资源了吗?
  • 有没有更好的方法来充分利用可用资源?
  • Redis集群是Redis哨兵的替代品吗?

我已经查看了redis文档以进行标记集群,有经验的人可以请解释一下。

Redis哨兵中的主从配置-失败之前

主人失败,奴隶开始行动

更新

好。在我的实际部署方案中,我有两台专用于Redis的服务器。我的Jboss服务器正在运行另一台服务器。在Jboss中运行的应用程序被配置为连接到Redis主服务器(M)。

故障转移方案

理想情况下,我认为当主缓存服务器发生故障(Redis进程出现故障或计算机出现故障)时,Jboss中的应用程序需要连接到从属缓存服务器。我将如何配置Redis服务器来实现这一目标?

+--------+          +--------+
| Master  |---------| Slave  |
|         |         |        |
+--------+          +--------+

Configuration: quorum = 1
真实账单

首先,让我们谈谈哨兵。

Sentinel管理故障转移,它不会为HA配置Redis。这是一个重要的区别。其次,您发布的图实际上是一个错误的设置-您不想在与其管理的Redis节点相同的节点上运行Sentinel。当您失去该主机时,您将同时失去这两个主机。

至于“这是浪费资源吗?” 这取决于您的用例。在该设置中,您不需要三个Redis节点,只需两个。三可以增加您的冗余,但这不是必需的。如果您需要增加的冗余,那么这不会浪费资源。如果您不需要冗余,则只需运行一个Redis实例并称其为好-因为运行更多实例将被“浪费”。

运行两个从站的另一个原因是拆分读取。同样,如果您需要它,那将不是浪费。

关于“是否有更好的方法来充分利用可用资源?” 我们无法回答这个问题,因为它太依赖于您的特定方案和代码。也就是说,如果要存储的数据量“很小”并且命令速率不是很高,那么请记住您不需要将主机专用于Redis。

现在针对“ Redis是否在集群中替代Redis哨兵?”。这实际上完全取决于您的用例。Redis Cluster不是高可用性解决方案-它是一个多写入器/大于RAM的解决方案。如果您的目标只是HA,那么它可能不适合您。Redis Cluster具有局限性,尤其是在多键操作方面,因此不一定是直接的“ just use cluster”操作。

如果您认为让三台主机运行Redis(和三台运行哨兵)是浪费的,那么您可能会使Cluster变得更多,因为它确实需要更多资源。

您所提出的问题可能太笼统,无法根据书面意见生存。如果您有特定的案例/问题正在解决,请及时进行更新,以便我们提供特定的帮助和信息。

具体更新:

为了在您的场景中进行正确的故障转移管理,我将使用3个哨兵,其中一个在您的JBoss服务器上运行。如果您有3个JBoss节点,则每个节点一个。我将在单独的节点上有一个Redis pod(主节点+从节点),然后让哨兵来管理故障转移。

从那里开始,就可以连接JBoss / Jedis以使用Sentinel来进行信息和连接管理。因为我没有使用那些快速搜索功能,但Jedis支持它,所以您只需要正确配置它即可。我发现的一些示例是在《使用Sentinel查找Jedis的示例》https://github.com/xetorthio/jedis/issues/725上,它们讨论JedisSentinelPool了使用池的途径。

当Sentinel执行故障转移时,客户端将断开连接,Jedis将(应该?)通过询问Sentinels当前主服务器是谁来处理重新连接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章