Redis主/从没有复制

时间:2017-12-13 05:59:01

标签: redis redis-sentinel

我是Redis的新手。我在SentinelReplication上阅读了他们的文档,其中他们讨论了奴隶如何尽可能地与主设备保持同步,但如果主设备在成功后失败仍然可能写,奴隶可能没有收到那个写。如果Sentinel将此从站标记为新主站,则从站可能会提供过时数据。

如果我不能失去一致性并且更喜欢它的可用性,我怎么能关闭复制,以便当Sentinel将新的奴隶标记为主时,所有第一个请求都是缓存未命中,我的缓存可以慢慢预热而不是返回可能陈旧的数据?

另外,这是一个好主意吗?还有其他好的选择吗?

1 个答案:

答案 0 :(得分:2)

  

我不能失去一致性,而不是可用性

目前尚不清楚redis自动故障转移是否适合您的应用。看起来每个客户都需要仔细跟踪服务器的可用性。

假设您有几个客户端,一个主服务器,M1和三个副本,R2,R3,R4。客户C5将新的银行账户余额写入M1,该账户余额立即永久失败,R2被提升为主M2。在回复客户之前,Master没有从副本获得确认。在将回复发送到C5之前,服务器之间没有类似paxos的共识协议。

C5可以记住每个写入请求中嵌入的计数器/时间戳,忘记写入有效负载,并检测过时读取。但客户C6不能,除非您在协议之外快速可靠地提供此类数据。 Nathan Fritz观察到您的应用可以发出一次写入然后发出PUBLISH事件,并监控该事件的LISTEN个多个副本,并将其成功报告延迟到最终用户。如果需要虚拟同步的可靠承诺,请考虑将derecho合并到您的应用中。 redis的生产版本针对问题空间的不同部分而不是您的主要兴趣。