Redis主从服务设置以及复制原理

2019-10-09  本文已影响0人  躺在家里干活

Redis 主从服务设置以及复制原理

Redis服务可分为主节点从节点

从节点需要在配置文件中指定主节点:slaveof {masterHost} {masterPort}

一主三从配置文件

6379(主):

port 6379
databases 5
dir ./database/
appendonly yes
appendfilename setOrder.aof
save 10 1
dbfilename snapshot.rdb

7001(从):

port 7001
databases 5
dir ./database/
appendonly yes
appendfilename setOrder.aof
save 10 1
dbfilename snapshot.rdb
slaveof 127.0.0.1 6379 

7002(从):

port 7002
databases 5
dir ./database/
appendonly yes
appendfilename setOrder.aof
save 10 1
dbfilename snapshot.rdb
slaveof 127.0.0.1 6379 

7003(从):

port 7003
databases 5
dir ./database/
appendonly yes
appendfilename setOrder.aof
save 10 1
dbfilename snapshot.rdb
slaveof 127.0.0.1 6379 

演示:

主从演示

主从的复制过程

<img src="https://wang_ya_nan.gitee.io/pages/image/2018/05/14/swdcbh.svg"></img>

    psync {runId} {offset}
    runId : 主节点的运行ID
    offset:当前从主节点已复制的数据偏移量

全量复制

场景:大多用于第一次同步

  1. 从节点发送psync命令,由于是第一次复制,不知道主节点的runId,所以发送: psync ? -1
  2. 主节点先会保存RDB文件到本地,把RDB文件传输给从节点
  3. 从节点接收到全部数据后会清空自身旧数据,加载RDB文件
  4. 加载RDB完成后,如果从节点开启了AOF持久化,会立即做bgrewriteaof操作

部分复制

场景:主从节点之间出现网络闪断或者命令丢失等异常情况

  1. 当主从节点之间网络出现中断,中断期间主节点依然响应命令,但是无法发送命令给从节点
  2. 当主从连接恢复后,由于从节点,保存了自身的复制偏移量和主节点的运行ID,所以把它们当成psync的参数发个主节点,要求进行部分复制
  3. 主节点根据offset在自身复制积压缓冲区查找,如果偏移量在其中,则允许从节点进行主从复制
  4. 主节点发送缓冲区的数据给从节点,保证主从复制进入正常状态

可能存在的问题

  1. 数据延迟:主从节点采取异步复制的方式,可能会有数据延迟的问题
  2. 读到过期数据(两种删除方式:懒惰删除,定时删除),原因同上
  3. 复制风暴,多个从节点同时启动,同时去主节点做第一次同步数据

我的个人博客,有空来坐坐

上一篇下一篇

猜你喜欢

热点阅读