一站式学习Redis 从入门到高可用分布式实践(慕课)第七章 Redis复制的原理与优化

  • 什么是主从复制
  • 主从复制的配置
  • 全部复制和部分复制
  • 故障处理
  • 开发运维常见问题

主从复制作用

数据副本

扩展读性能

简单总结:

1.一个master可以有多个slave

2.一个slave只能有一个master

3.数据流向是单向的,master到slave

主从复制的配置

两种实现方式:

         slaveof命令    slaveof   127.0.0.1 6379

 

断掉主从不会删掉数据,但是再找新的主时候会被清空

          配置

全部复制和部分复制

run_id:b75a2ccffc783a8379934046ad8d716e91740cd9

master_repl_offset:1079 偏移量

redis-cli -p 6382 info replication

全量复制的开销

1. redis什么时候会发生全量复制?

a) redis slave首启动或者重启后,连接到master时

b) redis slave进程没重启,但是掉线了,重连后不满足部分复制条件

2. redis什么时候会发生部分复制?

先来看部分复制需要的条件

a) 主从的redis版本>=2.8

b) redis slave进程没有重启,但是掉线了,重连了master(因为slave进程重启的话,run id就没有了)

c) redis slave保存的run id与master当前run id一致 (注:run id并不是pid,slave把它保存在内存中,重启就消失)

d) redis slave掉线期间,master保存在内存的offset可用,也就是master变化不大,被更改的指令都保存在内存

3. redis进程重启后会发生全量复制还是部分复制?

a) master重启时,run id会发生变化

b) slave重启时,run id会丢失

答:很显然,会发生全量复制,因为部分复制的条件之一run id已经不能满足

4.当全量复制或者同步复制完毕,增量是如何更新到slave的?

答:通过流式的命令更新,此时master就是slave的client,这样去理解。

5. run id如何查看?

答:通过info server命令查看

 故障处理

SLAVE宕机

 

MASTER宕机

 

 

 

 

开发运维常见问题

 1.读写分离  #读流量分摊到从节点,MySQL也是读写分离

            可能遇到的问题:

            复制数据延迟

            读到过期数据

            从节点故障  

 2.主从配置不一致

            例如maxmemory不一致:丢失数据 

            例如数据结构优化参数(hash-max-ziplist-entries):内存不一致

 3.规避全量复制

           3.1   第一次全量复制,不可避免     小主节点 、低峰

           3.2    节点运行ID不匹配  主节点重启(运行ID变化)

                   故障转移,例如哨兵或集群(sentinals和Redis Cluster)

           3.3   复制积压缓冲区不足

                  网络中断,部分复制无法满足

                  增大复制缓冲区配置rel_backlog_size 默认1m,网络“增强”。#10m

 4.规避复制风暴

             4.1   单主节点复制风暴

                     问题:主节点重启,多从节点复制

                     解决:更换复制拓扑

             4.2   单机器复制风暴

        主节点分散多机器

 

 

 

 

posted on 2018-11-27 15:27  明觉乃自清  阅读(545)  评论(0编辑  收藏  举报

导航