为了避免单点故障,所以要将数据备份到其他服务器上。这样即使一台服务器发生故障了,其他服务器也可以使用。
redis 通过主从复制来保证多个服务器之间的数据一致性
1.全量复制
主从服务器第一次同步的时候,就是用的全量复制。这时候主服务器会有两个比较耗时的地方:生成RDB快照、传输RDB快照。为了避免多个从服务器和主服务器进行全量复制,所以把部分从服务器升级为【小组长】的角色,让【小组长】也可以管理部分从服务器。
分摊主服务器的压力。
2.基于长链接的命令传播
第一次同步完成后,主从服务器会维护一个长连接,主服务器在接收到写命令之后,会通过长连接将写命令传给从服务器,来保证主从服务器的数据一致性
3.增量复制
如果遇到网络断开,或者延迟,可以通过增量复制来维护主从服务器的数据一致性
原理是:
在主服务器内部维护了一个 repl_backlog_buffer 环形缓冲区,环形缓冲区上标记着主服务器写到的位置,从服务器读到的位置,两个位置之间的差距,就是增量数据,找到增量数据之后,将其读到主服务器的 replication buffer 里,然后通过命令传播,传给从服务器。
repl_backlog_size 可以设置环形缓冲区的大小,过小的话,从服务器想读的数据可能就会被覆盖,这时候就会触发全量复制。为了避免这种情况发生,要调大这个参数的值,降低全量复制的概率。