2015-12-16 40 views
0

我們在ELK堆棧中使用Redis來緩衝我們的系統 和Elasticsearch之間的消息。消息由自定義的log4j-appender推送到redis中,並由logstash彈出。BLPOP和MISCONF Redis被配置爲保存RDB快照

現在出現了這樣的問題:如果redis隊列運行已滿(因爲Elasticsearch未運行),redis切換到模式不再允許持久性更改。這很有道理,但是從Redis彈出消息(因爲例如ES再次啓動)會減小redis中隊列的大小。

如果隊列已滿,是否可以選擇配置redis以允許blpop?

問候 本傑明

回答

0

從redis.conf:如果RDB快照啓用 (至少一個存盤點)和最新的後臺保存失敗

默認的Redis將停止接受寫入。 這將使用戶意識到(困難的方式)數據不會持續在磁盤上 ,否則很可能是沒有人會注意到並且會發生一些災難。

在你的情況,你應該禁用此選項:

config set stop-writes-on-bgsave-error no 

不要忘了重新啓動變更後的Redis此選項。

+0

這種選擇的作品,但不是很強大。如果仍然有消息被push到redis而沒有被佔用(這種情況),redis將在稍後崩潰。 我認爲問題在於Redis會將BLPOP-Operation分類爲變異(當然是這樣),並且在隊列/ redis已滿的情況下將其嚴格封鎖爲RPUSH操作。這對於消息隊列來說不是一個好的行爲。如果隊列已滿,它應該只阻止推送附加數據。 另一種想法? –

+0

您在Redis中沒有其他選項。請注意確保在磁盤上有一個位置以保存RDB快照。如果遇到MISCONF,請嘗試保存爲manualy。或者使用stop-writes-on-bgsave-error,並希望下次Redis嘗試保存RDB時,這將是成功的。 – misterion