详解redis(2):主从架构
一、什么是 Redis 高可用性(主从架构)
Redis 主从部署(Master–Replica) 是 Redis 实现高可用性的第一步。
一个 Redis 主节点(Master)
多个 Redis 从节点(Replica / Slave)
写操作:只能在主节点执行
读操作:可以在主节点或从节点执行
数据:由主节点同步到从节点
二、主从复制的工作机制
数据是如何同步的?
当客户端向 主节点写数据 时:
-
主节点在内存中执行写命令
-
主节点将该写命令复制一份
-
通过网络发送到所有从节点
-
从节点依次执行这些命令,保持数据一致
注意:
同步的是“写命令”,而不是结果数据
第一次同步(全量复制)
当一个从节点第一次连接主节点时:
-
从节点发送
PSYNC请求 -
主节点
fork()子进程 -
子进程生成 RDB 快照
-
主节点将 RDB 文件发送给从节点
-
从节点加载 RDB 到内存
-
主节点再发送同步期间的增量命令
至此,主从数据完全一致
之后的同步(增量复制)
主节点维护一个 复制缓冲区
只将新增写命令发送给从节点
效率高、网络开销小
三、主从架构下的读写流程
写请求流程
所有写操作集中在主节点
保证数据一致性
读请求流程
读操作可以分散到多个从节点
明显提升系统的读并发能力
四、主从架构带来的优势
读写分离,提高性能
主节点专注写
从节点分担读请求
非常适合 “读多写少” 的业务场景
数据冗余,提高安全性
数据在多个节点上保留副本
主节点宕机时,数据不会立即丢失
为高可用打基础
主从复制是:
哨兵模式的基础
Redis Cluster 的基础
五、主从架构带来的复杂性(分布式问题)
主节点宕机怎么办?
主节点不可用
从节点不会自动升级为主节点
系统仍然无法写入
主从模式本身并不等于高可用
数据一致性问题
主从复制是 异步的
主节点写成功 ≠ 从节点一定同步成功
可能出现:
读到旧数据
主节点刚写完就宕机,数据尚未同步
网络分区问题
主从之间网络中断
从节点以为主节点失效
客户端可能同时向不同节点写入
复制延迟问题
从节点落后于主节点
延迟越大,读到旧数据的概率越高
更多推荐



所有评论(0)