8

我们有一个用作缓存的 Redis 集群配置。现在由于写入主服务器和从服务器读取的正常模式(使用其他数据库),我们正在尝试对 Redis 集群做同样的事情。
经过一番调查,我们发现没有像 redisson、jedis 和 Spring Data Redis 这样的 Redis 客户端(在 java 中)支持这一点。我们似乎找到了一些解决方法,但它看起来很丑,现在我在想是否值得?

这是我的用例

  • 大约最高 QPS:1000
  • 有效负载大小:最大 1 MB(压缩后)
  • 集群大小 3 个主机,每个主机有 2 个从机(相当高规格的机器)
  • Cringe 部分:此集群的实际网络带宽为 Max 1GB(集群内通话分别为 1 GB)

考虑到这一点,我有以下问题:

  • 它(从奴隶读取)会以任何方式帮助我吗?
  • 有没有我应该避免的坑洞(任何特殊的服务器端配置)?
  • 狭窄的道路会成为问题吗?
  • 是否有正确执行此操作的标准方法(库/客户端)

非常感谢任何帮助(博客、案例研究、建议)。

4

2 回答 2

10

你对从读的期望是什么?

从奴隶中读取是可能的,也是一种常见的模式,但它带有一组效果。

  1. 从读取引入了陈旧的数据读取
  2. 从多个源读取允许控制读取源。这在处理可用性问题(例如,主服务器已关闭,因此您可以进行从设备读取以保持您的可用性)或延迟问题(例如,使用读取延迟最低的节点)时很有用
  3. 您可以使用从读取来分配服务器负载。虽然这是可能的,但 Redis 需要过大的负载才能看到一些效果

引用http://redis.io/topics/cluster-spec#scaling-reads-using-slave-nodes

通常,从节点会将客户端重定向到给定命令中涉及的哈希槽的权威主节点,但是,客户端可以使用从节点来使用READONLY命令扩展读取。

READONLY告诉 Redis Cluster 从节点,客户端可以读取可能陈旧的数据,并且对运行写入查询不感兴趣。

Jedis 没有内置支持从主节点以外的其他节点读取数据。Redissonlettuce提供了对 Master 和 Slave 读取的内置支持。Redisson 内部使用了一个平衡器(随机、循环、加权)来分配操作,lettuce 提供了一种偏好驱动(Master only,Master 首选,slave,最近)的方法。

Spring Data Redis 构建在 Jedis 和 lettuce 之上,但不提供从 slave 读取的通用特性。

一个好的经验法则是使用从站是为了可用性,而不是为了性能。

于 2016-05-29T19:55:30.560 回答
4

没有像 redisson 这样的 Redis 客户端(在 java 中)支持这个

Redisson提供了readMode可用于集群模式配置的设置。可用值为:

SLAVE- 从从节点
MASTER读取, - 从主节点读取, - 从主节点
MASTER_SLAVE和从节点读取

你需要SLAVE使用价值。

配置示例:

Config config = new Config();
config.useClusterServers()
      .setReadMode(ReadMode.SLAVE)
      .addNodeAddress(...);

Redisson redisson = Redisson.create(config);
于 2016-09-13T10:06:57.113 回答