Redis复制(replica)
1. 介绍
就是主从复制,master以写为主,slave以读为主, 当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。
2. 用途
读写分离、容灾恢复、数据备份、水平扩容支撑高并发
3. 主丛复制缺点
- 复制有延时
由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。 - master挂掉导致不可用
默认情况下,不会在slave节点中自动重选一个master,需要人工干预。
4. 主从复制流程
- slave启动成功连接到master后会发送一个sync命令。slave首次连接master次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除。
- master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后master将rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步。而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。
- master默认10秒发出PING包的周期,对slave进行心跳检测。
- master继续将新的所有收集到的修改命令自动依次传给slave,完成增量同步。
- 如果slave下线后再次上线,master会检查backlog里面的offset,master和slave都会保存一个复制的offset还有一个masterIdoffset是保存在backlog中的。Master只会把已经复制的offset后面的数据复制给Slave,类似断点续传
5. 主从搭建
5.1 搭建计划
角色 | 主 | 从 |
---|---|---|
机器 | mysql01 | mysql02 |
5.2 单机搭建
按照redis单机安装笔记分别在mysql01、mysql02上搭建redis。
5.3 配置master
- 编辑redis.conf文件,添加如下内容:
ini
dbfilename dump_6379.rdb
appendonly yes
appendfilename "appendonly.aof"
appenddirname "/opt/module/redis-7.2.4/data"
- 创建主从复制的用户
sh
acl setuser replica_user on >123456 +replconf +psync +sync +ping +config|get ~* +@read