zoukankan      html  css  js  c++  java
  • 一站式学习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   单机器复制风暴

            主节点分散多机器

  • 相关阅读:
    ICE-3.5.1-错误记录
    windows下qtcreator添加ICE库文件
    LINUX下QT与C语言通过网卡名获取网卡IP与MAC
    Apache部署Django+Vue
    三次握手和四次挥手面试常问
    配置mysql时报错
    nosql的介绍以及和关系型数据库的区别
    redis的基本操作
    在Centos安装redis-孙志奇
    git的使用
  • 原文地址:https://www.cnblogs.com/jiang910/p/10026646.html
Copyright © 2011-2022 走看看