Redis、ZooKeeper、MySql的复制模式

原创
2019/11/21 17:31
阅读数 415
AI总结

Redis

redis.conf配置文件里面关于复制的描述: 

# 1) Redis replication is asynchronous, but you can configure a master to
#    stop accepting writes if it appears to be not connected with at least
#    a given number of slaves.
# 2) Redis slaves are able to perform a partial resynchronization with the
#    master if the replication link is lost for a relatively small amount of
#    time. You may want to configure the replication backlog size (see the next
#    sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
#    network partition slaves automatically try to reconnect to masters
#    and resynchronize with them.

总结一下, Redis为了追求极致性能, 主从复制是异步的, 这个没得商量, 客户端和服务端的交互过程如下:

你可能有疑问, “如果slave失联了, master还一直接受写, 岂不造成数据不一致? ”

所以Redis提供了一个可选配置项,当master和多少个slave失去联系之后, 就拒绝再接受写请求了.

即使及时止损, 数据还是可能会出现一定程度的不一致, 怎么办?

其实redis有一套非常重要的机制, 那就是当slave和master失去了联系之后, slave会自动重连并执行再同步(resynchronization), 以确保数据的最终一致性.

ZooKeeper

与Redis追求极致性能不同, ZK主从复制是同步的, 虽然是同步复制,但只要有“一半以上”的从节点复制成功就行了, 所以也不会太耗性能, 客户端和服务端的交互过程如下:

MySql

MySQL的复制比较多样化, 支持‘异步’、‘全同步’、‘半同步’. 

异步参考Redis, 同步参考ZK, 其中半同步只要求有一台以上的slave复制成功就行了, 全同步要求所有slave都复制成功才行.

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
AI总结
返回顶部
顶部