结构
一主一从
用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF
一主多从
针对“读”较多的场景,“读”由多个从节点来分担,但节点越多,主节点同步到多节点的次数也越多,影响带宽,也加重主节点的稳定
树状主从
减轻主节点推送的压力
数据同步机制
2.7版本之后采用全量复制、增量复制
- 全量复制:初次复制时(第一次建立SLAVE)
- slave启动并连接到master,向master发送一个sync命令
- master以RDB的方式全量、异步持久化生成rdb文件,期间将写命令进行缓存
- master将rdb文件发送给slave,slave存入磁盘
- slave将清空缓存数据,重新加载rdb文件数据
- master将缓存数据同步到slave
- master将再后来的写命令同步到slave
- 部分复制:slave故障后重连master时,主节点通过缓冲区和偏移量补发缺少的数据
- 增量复制:正常工作时,master将每个写命令发送给slave执行
缺点
- 不具备自动容错和恢复功能:主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启(slave)或者手动切换前端的IP(master)才能恢复
- 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP(因为slave不会竞升为master)后还会引入数据不一致的问题,降低了系统的可用性
- 主从复制过程(全量复制)会对集群的服务能力产生不小影响(master负载较高时)
- 只有 master 能写,写能力有限
- 存储能力有限
- 较难支持在线扩容
全量复制带来的问题
当数据量比较大时可能会发生一下问题:
- slave同步较慢
- 如果master负载很高,复制过程会给其带来压力
为此可以这样解决:
- 如果需要主从结构,事先配置好所有的slave,避免中途增加slave
- 选择在master低峰时增加slave
主从架构
Redis 主从架构 -> 读写分离 -> 水平扩容支撑读高并发.