什么是主从复制
主从复制是 Redis 最简单的集群模式,主要是为了解决单点故障问题,将数据复制多个副本到从节点中。即使有一台服务器宕机,其他服务仍可提供服务。主从模式包含一个主节点(Master)和多个从节点(Slave),一般主节点负责读写操作,从节点负责读操作。当主节点发生故障,可将一个从节点升级为主节点,实现故障转移(需人工手动操作)。
[图:主从复制架构图]
**优点:**简单易用,适用于读多写少的场景。
缺点:
- 不具备故障自动转移的能力,无法做容错和恢复。
- 只有主节点进行写操作,无法负载均衡。
- 存储能力受到单机限制。
数据同步过程
- 全量复制:当主从服务器刚建立连接时,进行全量数据同步。
- 从服务器连接到主服务器,发送 PSYNC 命令(Redis 2.8 之前是 SYNC 命令)。
- 主服务器收到命令后,执行 BGSAVE 生成 RDB 快照文件发送给从服务器。
- 从服务器接收快照后,清空内存旧数据,将接收到的数据写入磁盘。
- 增量复制:全量复制结束后进行。
- 主服务器每执行一个写命令,向从服务器发送相同的写命令。
- 从服务器接收并执行收到的写命令。
优点:
- 数据热备份:主从复制实现了数据的热备份,是持久化之外的数据冗余方式。
- 故障恢复:如果 Master 宕掉,可手动提升新 Master。
- 负载均衡:实现读写分离,一个 Master 写,多个 Slave 分摊读压力。
缺点:
- 网络延迟:写操作先在 Master 上操作,然后同步到 Slave。
- 无法自动切换:普通主从模式无法自动切换 Master,需使用哨兵模式。
常见架构模式
主数据库 Master 以写为主,从数据库 Slave 以读为主,整体负责读写分离、容灾恢复。
一主二仆(中心化架构)
[图:中心化架构图]
常见问题:
- slave1、slave2 是从头开始复制还是从切入点开始复制?
- 答:从头开始复制;历史数据也可复制。
- 从机是否可以写?set 可否?
- 答:从机不可写,不可 set,主机可写。
- 主机 shutdown 后情况如何?从机是上位还是原地待命?
- 答:从机原地待命。
- 主机又回来了后,主机新增记录,从机还能否顺利复制?
- 答:能。
- 其中一台从机 down 后情况如何?
- 答:不能跟上,每次与 Master 断开之后都需要重新连接,除非配置进 redis.conf 文件(REPLICATION 部分)。
薪火相传(去中心化架构)
上一个 Slave 可以是下一个 Slave 的 Master,Slave 同样可以接收其他 Slaves 的连接和同步请求。该 Slave 作为链条中下一个的 Master,可有效减轻 Master 的写压力。中途变更转向会清除之前的数据,重新建立拷贝最新数据。
命令:slaveof 新主库 IP 新主库端口
反客为主(独立模式)
使当前数据库停止与其他数据库的同步,转成主数据库,形成一个中心点。
命令:SLAVEOF no one


