这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
高可用性
(为了避免单点故障,数据丢失,所以使用集群
主从模式
分为master / slave 服务器
-
采用读写分离模式,master承担 写操作 和 数据同步,slave只承担 读操作
(replicaof destIP destPort
-
层级主从,从服务器可以发展下线,成为他们的主服务器,同时可以接受主服务器的同步
这样,分担了主服务器的压力,也就是生成RDB文件的持久化过程,和网络传输RDB占用网络带宽
-
主从复制原理
数据复制原理
fully sync, partial sync
服务器用 runID offset 二元组 表示数据版本,
分三步
-
主从服务器 建立连接,确定数据版本号
psync ID?-1,fullysync runID offset
-
并采用 全量同步 fully sync,将快照以RDB文件传输给 从服务器,进行初始化。
-
期间,主服务器用 replication buffer 缓存新到达的 写命令,以快照格式发给 从服务器,保证数据一致性,即 基于TCP长连接传输命令
(replication buffer 缓存将要传播给从服务器的命令
主从之间 因为 网络连接断开并重连后,可以通过 增量同步 partial sync 来实现一致性。
- 从服务器发送 psync runID offset(>0),主服务器发送 countinue,并将增量数据发给 slave
主服务器通过 在环形缓存repl_backlog_buffer 中比对repl_offset(master_ VS slave_)
- 如果比对出增量数据,就 partial sync
- 如果不能,就 fullly sync
(在主服务器传输命令时,会向 repl_backlog_buffer 写入,并标记 offset (master_repl_offset)
(配置环形缓存大小,如 repl-backlog-size 1mb,来避免频繁的 全量同步
-
集群模式
在多个 redis 节点间 进行 data sharding 和 data replication,具备横向扩展能力,和高可用性
-
所有节点 使用 ping-pong 互联
-
超半数节点检测节点离线,则将该节点设置为Fail
-
数据分配策略:
key 使用 CRC和求余,映射到一个散列槽位 slot(一共16384个)
而redis会均衡的将 slots 映射到不同的节点中