单机版Redis问题
- 机器故障需要做数据手动迁移
 - 容量瓶颈
 - QPS瓶颈
 
引入正题
前面列出的容量瓶颈和QPS瓶颈是redis分布式要解决的问题,本篇还是主要解决
redis怎么实现高可用,机器故障的问题
主从复制介绍
作用:
- 流量分流和负载均衡
 - 提供多个数据分布
 - 扩展redis读性能
 
简单总结
- 一个master可以有多个slave
 - 一个slave只能有一个master
 - 数据流向是单向的,master到slave
 
主从复制操作
master节点:
1  | cp ${redis_src}/redis.conf redis-6379.conf  | 
改动项:
1  | daemonize yes  | 
slave节点:
1  | cp ${redis_src}/redis.conf redis-6380.conf  | 
改动项:
1  | daemonize yes  | 
启动:
1  | redis-server 6379.conf  | 
检查主从状态:
1  | redis-cli  | 
runid和复制偏移量
runid
redis每次启动后都会随机生成一个runid执行:
1  | redis-cli -p 6379 info server |grep run  | 
redis每次重启runid会发生变化,redis从节点每次会检测主节点runid变化来进行一次全量复制
偏移量
主节点和从节点都会记录执行一条命令时数据写入的字节数,当偏移量达到一致时,数据才会同步完成
全量复制

全量复制开销
- bgsave时间
 - RDB文件网络传输时间
 - 从节点清空数据时间
 - 从节点加载RDB时间
 - 如果配置AOF开启会有AOF重写时间
 
部分复制

开发运维中的问题
规避全量复制:
1:第一次全量复制
- 问题:第一次不可避免
 - 解决:小主节点,低峰
 
2:节点运行ID不匹配
- 问题:主节点重启runid变化
 - 解决:故障转移,例如哨兵或集群
 
3:复制积压缓冲区不足
- 问题:网络中断,部分复制无法满足
 - 解决:增大复制缓冲区配置rel_backlog_size
 
规避复制风暴:
1:单主节点复制风暴
- 问题:主节点重启,多从节点复制
 - 解决:更换复制拓扑(树形架构)
 
1:单机器复制风暴
- 问题:机器宕机后,大量全量复制
 - 解决:主节点分散多机器