雷迪斯哨兵vs集群

我知道redis sentinel是在多个redis实例中configurationHA(高可用性)的一种方式。 正如我所看到的,在任何时候都有一个redis实例主动提供客户端请求。 还有两台服务器处于待机状态(等待发生故障,因此其中一台服务器可以再次启动)。

  • 浪费资源吗?
  • 有没有更好的方式来充分利用可用的资源?
  • Redis集群是Redis sentinel的替代scheme吗?

我已经查阅了redis文档来定位和聚类 ,请有经验的人解释一下。

Redis sentinel中的主从设备配置 - 发生故障之前

主人失败,奴隶开始行动

UPDATE

好。 在我真正的部署场景中,我有两台专用于redis的服务器。 我有另一台服务器我的Jboss服务器正在运行。 运行在Jboss中的应用程序被configuration为连接到Redis主服务器(M)。

故障切换情况

理想情况下,我认为当主caching服务器失败(Redis进程停机或机器故障)时,Jboss中的应用程序需要连接到从caching服务器。 我将如何configurationRedis服务器来实现这一目标?

+--------+ +--------+ | Master |---------| Slave | | | | | +--------+ +--------+ Configuration: quorum = 1 

首先,让我们谈谈哨兵。

Sentinelpipe理故障转移,它不为HAconfigurationRedis。 这是一个重要的区别。 其次,您发布的关系图实际上是一个糟糕的设置 – 您不希望在与其pipe理的Redis节点相同的节点上运行Sentinel。 当你失去了主机,你都输了。

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

运行两个奴隶的另一个原因是分割读取。 再一次,如果你需要它,那不会是浪费。

至于“有没有更好的方法来充分利用现有的资源?” 我们不能回答,因为它太依赖于你的具体情况和代码。 这就是说,如果要存储的数据量是“小”,命令率不是非常高,那么记住你不需要把一台主机专用于Redis。

现在是“Redis集群Redis sentinel的替代品吗?”。 这完全取决于你的用例。 Redis集群不是一个高可用性解决scheme – 它是一个多作家/大于RAM的解决scheme。 如果你的目标只是HA,那么它可能不适合你。 Redis集群具有一些局限性,特别是在多键操作方面,所以它不一定是一个简单的“仅仅使用集群”操作。

如果您认为有三台主机运行Redis(并且三台运行的哨兵)是浪费的,那么您可能会更需要Cluster,因为它需要更多的资源。

您提出的问题可能过于宽泛,以意见为基础,以书面forms生存。 如果您有特定的案例/问题,请进行更新,以便我们提供具体的帮助和信息。

更新细节:

为了在您的scheme中进行正确的故障转移pipe理,我将使用3个哨兵,一个运行在您的JBoss服务器上。 如果你有3个JBoss节点,那么每个节点都有一个。 我会在不同的节点上有一个Redis pod(master + slave),让sentinelpipe理故障转移。

从那里开始,JBoss / Jedis使用Sentinel进行信息和连接pipe理是一件很麻烦的事情。 因为我没有使用这些快速search,所以Jedis支持它,你只需要正确configuration它。 我发现的一些例子是寻找Jedis与Sentinel和https://github.com/xetorthio/jedis/issues/725的; 一个例子,它讨论了JedisSentinelPool是使用池的路线。

当Sentinel执行故障切换时,客户端将被断开,Jedis将(应该)通过询问Sentinels谁是当前主控人员来处理重新连接。

这个build议无处不在,就是从奇数个开始,而不是使用两个或两个倍数。 这被纠正了,但让我们纠正其他一些问题。

首先,说Sentinel提供没有HA的故障转移是错误的。 当你有故障转移时,你有HA的应用程序状态被复制的额外好处。 区别在于,您可以在没有复制的系统中拥有HA(这是HA,但不是容错)。

其次,在目标redis实例的同一台机器上运行一个标记并不是一个“糟糕的设置”:如果你丢失了你的标记,你的redis实例或者整个机器,结果是一样的。 这就是为什么这样的configuration的每个例子都显示在同一台机器上运行。

这并不是直接回答你的问题,但是认为这对Redis新手来说是有用的信息,就像我一样。 此外,这个问题出现在search“Redis集群VS哨兵”谷歌的第一个链接。

Redis Sentinel是Redis高可用性解决scheme的名称…它与Redis Cluster无关,旨在供不需要Redis Cluster的用户使用,而只是一种在主站点执行自动故障转移实例运行不正常。

取自Redis Sentineldevise草案1.3

当您刚刚熟悉Redis并实施故障转移解决scheme时,这不是一件容易的事情。 关于哨兵和集群的官方文件并没有相互比较,所以很难在不阅读大量文件的情况下select正确的方式。