版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/love905661433/article/details/82289883
Redis单机问题
- 机器故障
- 容量瓶颈
- QPS瓶颈
主从复制作用
- 数据副本
- 扩展读性能(读写分离)
主从复制限制
- 一个master(主)可以有多个slave(从)
- 一个slave只能有一个master
- 数据流向是单向的,master到slave
主从复制配置
执行命令
主从复制 : 从节点执行slaveof ip port,会清除从节点数据
取消复制 : 从节点执行 slaveof no one,不会清除从节点数据
配置实现
slaveof ip port : 设置Redis为哪个节点的从节点
slave-read-only yes : 设置从节点只读
两种方式对比
方式 | 命令 | 配置 |
---|---|---|
优点 | 无需重启 | 统一配置 |
缺点 | 不便于管理 | 需要重启 |
全量复制开销
- bgsave时间
- RDB文件网络传输时间
- 从节点清空数据时间
- 从节点加载RDB的时间
- 可能的AOF重写时间
部分复制
- slave丢失链接
- master将之后数据写入复制积压缓冲区
- slave重新连接到master
- slave执行psync命令将自己的offset(偏移量)传给master
- master判断如果偏移量在缓冲区范围之内,则进行部分复制,否则进行全量复制
- 将master复制积压缓冲区数据复制到slave
故障处理
slave故障
master故障
开发与运维中的问题
读写分离 : 读流量分摊到从节点
可能遇到问题 :
- 复制数据延迟
- 读到过期数据
- 从节点故障
主从配置不一致
- 如maxmemory不一致 : 丢失数据
- 如数据结构优化参数(hash-max-ziplist-entries) : 内存不一致
规避全量复制
- 第一次全量复制 :
- 第一次不可避免
- 小主节点,低峰执行
- 节点运行ID不匹配 :
- 原因 : 主节点重启
- 策略 : 故障转移(哨兵或集群等)
- 复制积压缓冲区不足
- 网络中断,部分复制无法满足
- 增大复制缓冲区配置rel_backlog_size,”网络”增强
- 第一次全量复制 :
规避复制风暴
概念:
主节点重启导致多个从节点都要进行全量复制
单主节点复制风暴,如下图
- 问题 : 主节点重启, 多从节点复制
- 解决 : 更换复制拓扑
单机器复制风暴
单一主机上部署大量master,机器宕机后,大量全量复制
主节点分散多机器
主从复制问题
- 手动故障转移
- 写能力和存储能力受限