redis主从模式

后面格式有点乱,将就看吧,内容都没错

优点:

  1. 主从复制:写入master的数据会同步到slave(提高了数据可靠性)
  2. 读写分离:master可以读写,slave只能读(提高了性能)

缺点:

  1. 没有解决单点失效(如果主节点宕机,那就无法写入,可能自动选举主节点,需要人为修改)

如何配置主从模式?(配从不配主):

  1. redis.conf:slaveof (5.0之前的版本)
  2. redis.conf:replicaof (5.0之后的版本)

其余配置:

  1. 配置主服务密码:masterauth
  2. 设置自己节点的密码:requirepass
  3. replication buffer缓冲区大小:client-output-buffer-limit slave <32mb缓冲区大小> <8mb 60秒内写入超过次大小算作缓冲一处> <60秒>
  4. repl_backlog_buffer积压缓冲区大小:repl-backlog-size 1mb
  5. 主从增量同步延迟性:repl-disable-tcp-nodelay yes/no(yes redis会合并小的TCP包从而节省带宽,但会增加同步延迟,造成master与slave数据不一致;no 主节点会立即发送同步数据,延迟降到最低)
  6. 心跳从节点超时时间(超时后代表从节点掉了):repl-timeout <60 单位为秒>
  7. 主节点向从节点发送心跳频率:repl-ping-slave-period <10 单位为秒>
  8. 主从延迟大于n秒,拒绝写命令:min-slaves-max-lag
  9. 从服务少于n个,拒绝写命令:min-slaves-to-write

主从模式用到的命令:

  1. 查看从节点信息:info replication
  2. 客户端连接服务时输入密码(服务没有设置就不需要输入):auth
  3. 从节点关闭同步功能,不再连接主服务,自己变成了主服务,客户端可做读写操作,原本的数据不丢失:slaveof on one

节点数据的持久化:

  1. 每一个节点(主节点、从节点)的持久化数据方式都按各自节点的配置来走

sync、fsync数据同步命令:

        sync:

    • redis2.8版本之前(不包含2.8)
    • 全量数据同步

        fsync:

    • redis2.8版本之后(包含2.8)
    • 全量数据同步、部分数据同步

主从复制大致流程:

  1. 设置主节点的地址和端口
  2. 建立套接字连接
  3. 发送PING命令
  4. 权限验证
  5. 同步数据集
  6. 命令持续复制

全量复制、部分复制 判断条件:

        执行全量复制:

                从节点主动发送全量同步命令:

          1. 从节点没有复制过任何节点数据
          2. 从节点之前执行了slaveof on one后,再连接主节点

                主节点告诉从节点要全量同步:

          1. 从节点发送同步命令,主节点 判断run ID不对、offset复制偏移量 再积压缓冲区找不到

        执行部分复制:

        1. 从节点发送同步命令,run ID与当前主节点对应,offset复制偏移量可以再积压缓存区找到
        2. 心跳检测,从节点的偏移量和主节点偏移量不一致

主节点响应fsync:

      1. fullresync {runid} {offset},表示全量同步
      2. +continue部分同步
      3. -err,主节点redis版本低于2.8,无法识别psync,从节点会再发送sync,进行全量同步

两个缓冲区:

                replication buffer复制缓存区:

                        数量:主节点对每一个从节点都会创建一个此缓存区

                        作用:主节点再全量同步RDB时,之后写入的数据会存入此缓冲区,RDB同步完,发送此缓存区的数据给从节点进行同步

                repl_backlog_buffer积压缓存区:

                        数量:主节点只有一个公共的缓存区

                        作用:全量同步后,主节点每接收一个命令后,不仅会将命令发送给从节点,还会将命令存入此缓存区,用于再从节点与主节点断开连接后,从节点恢复连接可以通过从节点的复制偏移量,在此缓存区判断是否部分复制。

全量复制:

      1. 从节点发送全量复制命令
      2. 主节点收到命令,执行bgsave,后台生成RDB文件,同时使用 replication buffer复制缓冲区(记录生成文件后主节点写入的命令)
      3. 主节点发送rdb文件,从节点先清楚旧数据,再载入新数据(从节点阻塞,无法对客户端响应命令)
      4. 主节点发送复制缓冲区的内容,从节点载入
      5. 如果从节点开启AOF,会触发bgrewriteaof重写

部分复制(fsync <主节点运行ID> <从节点复制偏移量>):

      1. 从节点发送fsync命令
      2. 主节点判断是否符合部分复制,符合则将从节点偏移量-最新的数据发送给从节点
      3. 从节点进行部分数据同步

命令持续复制:

                主节点将命令异步发送给从节点(主节点不会等从节点同命令),从节点将命令同步

心跳检测:

                作用:        

        1. 检测从节点是否存活
        2. 通过从节点返回给主节点的复制偏移量,判断是否部分复制

                流程:

          1. 主节点每隔10秒(发送频率配置repl-ping-slave-period)向从节点发送ping命令,等待从节点恢复pong
          2. 从节点每隔一秒,发送replconf ack{offset}一次,其作用:
            1. 主节点判断 从节点的复制偏移量(偏移量不一样就部分复制)
            2. 检测主从网络是否通畅
            3. 主节点判断min-slaves-to-write、min-slaves-max-lag 检测判断是否继续执行写操作
          3. 双方超过60秒(配置repl-timeout)没有回复,判断对方掉了,断开连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值