【问题标题】:BLPOP and MISCONF Redis is configured to save RDB snapshotsBLPOP 和 MISCONF Redis 配置为保存 RDB 快照
【发布时间】:2015-12-16 17:05:48
【问题描述】:

我们在 ELK 堆栈中使用 Redis 来缓冲我们系统之间的消息 和弹性搜索。消息由自定义 log4j-appender 推送到 redis 并由 logstash 弹出。

现在问题来了:如果 redis 队列已满(因为例如 Elasticsearch 没有运行),redis 切换到不再允许持久更改的模式。这是有道理的,但是从 Redis 弹出消息(因为例如 ES 再次启动)会减少 redis 中队列的大小。

如果队列已满,是否可以配置 redis 以允许 blpop?

最好的问候 本杰明

【问题讨论】:

    标签: redis


    【解决方案1】:

    来自 redis.conf:

    默认情况下,如果启用 RDB 快照,Redis 将停止接受写入 (至少一个保存点)并且最近一次后台保存失败。 这将使用户(以一种艰难的方式)意识到数据没有持久化 正确保存在磁盘上,否则很可能没有人会注意到 灾难会发生。

    在您的情况下,您应该禁用此选项:

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

    更改此选项后不要忘记重新启动redis。

    【讨论】:

    • 这种选项很有效,但不是很健壮。如果仍有消息被推入redis而没有被弹出(这种情况),redis稍后会崩溃。我认为问题在于 Redis 将 BLPOP-Operation 归类为 mutating(当然是这样),并且如果队列/redis 已满,则会像 RPUSH 操作一样阻止它。这对于消息队列来说不是一个好的行为。如果队列已满,它应该只阻止推送额外的数据。另一个想法?
    • 您在 Redis 中没有其他选择。注意确保您在磁盘上有一个位置来保存 RDB 快照。如果遇到错误,请尝试手动保存。或者使用 stop-writes-on-bgsave-error 并希望 Redis 下次尝试保存 RDB 时会成功。
    猜你喜欢
    • 2013-11-04
    • 2020-06-29
    • 1970-01-01
    • 2018-01-09
    • 2019-01-02
    • 2020-05-23
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    相关资源
    最近更新 更多