Skip to content

Redis复制(replica)

Alt text

1. 介绍

就是主从复制,master以写为主,slave以读为主, 当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。

2. 用途

读写分离、容灾恢复、数据备份、水平扩容支撑高并发

3. 主丛复制缺点

  1. 复制有延时
    由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
  2. master挂掉导致不可用
    默认情况下,不会在slave节点中自动重选一个master,需要人工干预。

4. 主从复制流程

  1. slave启动成功连接到master后会发送一个sync命令。slave首次连接master次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除。
  2. master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后master将rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步。而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。
  3. master默认10秒发出PING包的周期,对slave进行心跳检测。
  4. master继续将新的所有收集到的修改命令自动依次传给slave,完成增量同步。
  5. 如果slave下线后再次上线,master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterIdoffset是保存在backlog中的。Master只会把已经复制的offset后面的数据复制给Slave,类似断点续传

5. 主从搭建

5.1 搭建计划

角色
机器mysql01mysql02

5.2 单机搭建

按照redis单机安装笔记分别在mysql01、mysql02上搭建redis。

5.3 配置master

  1. 编辑redis.conf文件,添加如下内容:
ini
dbfilename dump_6379.rdb
appendonly yes
appendfilename "appendonly.aof"
appenddirname "/opt/module/redis-7.2.4/data"
  1. 创建主从复制的用户
sh
acl setuser replica_user on >123456 +replconf +psync +sync +ping +config|get ~* +@read

5.4 配置slave