首先,让我们谈谈哨兵。
Sentinel管理故障转移,它不会为HA配置Redis。这是一个重要的区别。其次,您发布的图实际上是一个错误的设置-您不想在与其管理的Redis节点相同的节点上运行Sentinel。当您失去该主机时,您将同时失去这两个主机。
至于“浪费资源吗?” 这取决于您的用例。在该设置中,您不需要三个Redis节点,只需两个。三可以增加您的冗余,但这不是必需的。如果您需要增加的冗余,那么这不会浪费资源。如果您不需要冗余,则只需运行一个Redis实例并称其为好-因为运行更多实例将被“浪费”。
运行两个从站的另一个原因是拆分读取。同样,如果您需要它,那将不是浪费。
关于“是否有更好的方法来充分利用可用资源?” 我们无法回答,因为它太依赖于您的特定方案和代码。也就是说,如果要存储的数据量“很小”并且命令速率不是很高,那么请记住您不需要将主机专用于Redis。
现在针对“ Redis是否在集群中替代Redis哨兵?”。这实际上完全取决于您的用例。Redis Cluster不是高可用性解决方案-它是一个多编写器/大于内存的解决方案。如果您的目标只是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当前主服务器是谁来处理重新连接。