Redis 主从复制
数据的复制是单向的 ,只能主节点到从节点 默认情况下 每台redis 服务器都是主节点
主要包括
- 数据冗余: 主从复制实现了数据的热部署 ,是持久化之外的一种数据冗余方式
- 恢复障碍 : 主节点出现问题,可以从从节点提供服务,实现快速的故障恢复 ,实际是一种数据冗余
- 负载均衡 : 在主从复制的基础上面 配合读写分离 可以由主节点提供写服务 由从节点提供读服务 分担服务器的负载 在写少读多的场景下 通过多个节点分当 负载 可以大幅度的提搞redis 服务器的性能
- 高可用(集群)基石 : 主从复制还是哨兵和集群能够使用的基础 主从复制可以提高redis高可用的基础
正常情况下 : redis 用于工程中 用一台redis 是不可能的
- 结构上: 单个redis 的服务器会发生单点故障 ,并且一台服务器需要处理所有的请求所有的负载,压力大
- 容量上: 单个redis 服务器容量有限 单个redis 的最大使用内存不应该超出20g
主从复制的原理:
当从库与主库建立主从关系后,会像主库发送sync命令;
主库接收到sync命令后会在后台开始保存快照(rdb过程),并将期间接收到的写命令缓存起来;
当快照完成后,主redis会将快照文件和缓存的写命令一起发送给从redis;
从redis接收到后,会载入快照和执行收到的缓存的写命令;
之后,每当主redis接收到写命令后都会发送给从redis,从而保证数据的一致。
无磁盘复制:
如果主库所在的服务器的磁盘io能力较差的话,那么主从复制就会遇到瓶颈。的redis2.8.18版本后引入了无磁盘复制。
原理:
redis在与从库进行复制初始化的时候不再将快照保存在磁盘,而是通过网络直接发送给从库,从而避免了io性能差的问题。
开启无磁盘复制:repl-diskless-sync yes
主从架构出现宕机怎么办?
如果在主从复制架构中遇到宕机的话,一般要分情况:
1.从redis宕机
这种情况相对来说比较简单,只需将从redis重启,重启后从redis会自动加入到主从架构中,完成数据的同步。而且从redis2.8开始还实现了主从断线后恢复的情况下实现增量更新的功能。
2.主redis宕机
需要完成两步,第一步是在从redis中执行SLAVEOF NO ONE 命令,断开主从关系并且提升为主库继续提供服务;第二步是将主库重新启动,执行SLAVEOF命令,将其设置为其他库的从库,这时数据就会更新回来。这个过程一般使用哨兵来监听。