簡體   English   中英

我應該從Redis Cluster從站讀取嗎?

[英]Should I read from a Redis Cluster slave?

我們有一個Redis集群配置用作緩存。 現在,由於寫入主機和從機讀取(與其他數據庫)的正常模式,我們正在嘗試對Redis集群執行相同的操作。
經過一些調查,我們發現像redisson,jedis和Spring Data Redis這樣的Redis客戶端(在Java中)均不支持此功能。 我們似乎已經找到了解決方法,但是看起來很丑,現在我在考慮是否值得?

這是我的用例

  • 大約最高QPS:1000
  • 有效負載大小:最大1 MB(壓縮后)
  • 集群大小為3個主機,每個主機有2個從機(相當高規格的機器)
  • 邊緣部分:此群集的實際網絡帶寬最大為1GB(群集內通話單獨為1GB)

考慮到這一點,我有以下問題:

  • (從奴隸那里讀取)對我有任何幫助嗎?
  • 我應該避免任何坑洞(任何特殊的服務器端配置)嗎?
  • 狹窄的道路會成為問題嗎?
  • 是否有正確執行此操作的標准方法(庫/客戶端)

任何幫助(博客,案例研究,建議)將不勝感激。

您對從屬讀取的期望是什么?

可以從奴隸那里讀取一種通常的模式 ,但是它帶有一組效果。

  1. 從屬讀取引入陳舊數據讀取
  2. 從一個以上的源進行讀取可以控制讀取的源。 這在處理可用性問題(例如,主服務器已關閉,以便您可以進行從屬讀取以保持可用性)或延遲問題(例如,使用讀取延遲最小的節點)時非常有用
  3. 您可以使用從屬讀取來分配服務器負載。 雖然這是可能的,但Redis需要過多的負載才能看到效果

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

通常,從節點會將客戶端重定向到給定命令所涉及的哈希槽的權威主機,但是,客戶端可以使用從節點來使用READONLY命令擴展讀取。

READONLY告訴Redis Cluster從屬節點,客戶端可以讀取可能過時的數據,並且對運行寫查詢不感興趣。

Jedis沒有內置支持可讀取除主節點以外的其他節點。 Redissonlettuce為“主”和“從”讀取提供內置支持。 Redisson內部使用平衡器(隨機,循環,加權)來分發操作,生菜提供了偏好驅動(僅Master,Master首選,slave,最接近)的方法。

Spring Data Redis構建在Jedis和生菜之上,但不提供從奴隸讀取的通用功能。

一個很好的經驗法則是使用奴隸來提高可用性,而不是為了提高性能。

沒有像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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM