redis学习(4) | 青训营笔记

56 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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 映射到不同的节点中