Redis多主复制

场景:我们有两个同时运行的数据中心(都提供stream量)。
每个人都有自己的整个基础设施,所以它可以在没有其他人的情况下运行。

也就是说,在networking条件允许的情况下,我们希望我们的Redis数据库能够在两者之间同步。 在networking分区期间丢失密钥是可以接受的,因为有重复的密钥 – 它只是caching数据。 但是,当两个数据中心都启动时(从15-20%的caching命中,到30-40%的caching命中),我们从caching中获得最大的收益。

经过一番四处搜寻,我找不到任何有效地给我们多主人的东西。 (主要说“不这样做”或“不支持”)。

最后,我写了一个客户端,连接到两个主人,订阅数据库的keyspace事件,然后将所有SET命令之间的数据库(我们所有的密钥都设置过期) – 与一些内部“最近看到”caching防止重播循环。

目前,这个工作很好 – 唯一真正的缺点是,在我们得到一个新的关键事件之后,我们必须发出一个GETEX来获得密钥,并且它已经到期 – 所以你最终得到第二次读取(因此约2倍远程DC的RTT延迟)。 这也仅限于支持SET。

我的问题是:有没有更好的方式来获得这种多主复制

我开始研究SYNC / PSYNC,但是这些协议没有太多的文档,也不确定客户端可能不会违反服务器的规定。

我也在寻找这个挑战的解决scheme,到目前为止,我发现: https : //github.com/Netflix/dynomite/wiki/Architecture也许… https://github.com/CodisLabs/codis或https ://github.com/twitter/twemproxy