Redis 08章——复制(replica)
一、是什么
- 官网地址:
- 一句话:
- 就是master以写为主,slave以读为主
- 当master数据变化时,自动将新的数据异步同步到其他slave数据库
二、能干嘛
- 读写分离
- 容灾恢复
- 数据备份
- 水平扩容支撑高并发
三、怎么玩
(1)配从(库)不配主(库)
(2)权限细节,重要
- master如果配置了 requirepass 参数,需要密码登录
- slave 需要配置 masterauth 来设置检验密码,否则的话master会拒绝slave的访问请求
(3)基本操作命令
四、案例演示
(1)架构说明
4.1.1一个Master两个Slave
(1)3台虚拟机每台都安装redis
(2)Master配置步骤
- 重新拷贝一份redis.conf到/opt/redis-7.0.0/myredis下,命名为redis6379.conf
- 后续所有改动都在redis6379.conf中进行
- 开启daemonize yes
- 注释掉 bind 127.0.0.1
- protected-mode no
- 指定端口号 port 6379
- 指定 dir(这里是指配置文件在哪个目录下)
- pid文件名字 pidfile
- log文件名字 logfile(因为配置文件是在myredis里,所以直接这么写)
- requirepass
- dbfilename dump.rdb
- appendonly yes和appendfilename appendonly.aof(但是目前我们先不开启)
(3)Slave配置步骤
- 修改ip地址(详细步骤参考linux的笔记):第一台slave的ip我修改成了192.168.200.131,第二台slave的ip我修改成了192.168.200.132
- 第一台slave的配置文件改名为redis6380.conf,第二台slave的配置文件改名为redis6381.conf
- salve的配置文件的修改步骤(第二台步骤一样的):
- 从机访问主机的通行密码masterauth,必须!从机需要配置,主机不用!!!(第二台slave也是这么配置)
- linux快捷键:比如我们想跳转到309行,就在一般模式下输入309,然后按Shift+g
- 注意:主机从机都要关闭防火墙!!!
4.1.2拷贝多个redis.conf文件
- redis6379.conf
- redis6380.conf
- redis6381.conf
(2)小口诀
- 三边网络相互ping通且注意防火墙配置
- 三大命令
- 主从复制(1)replicaof 主库ip 主库端口(2)配从(库)不配主(库)
- 改换门庭:slaveof 新主库ip 新主库端口
- 自立为王:slaveof no one
(3)常用3招
4.3.1一主二仆
(1)方案1:配置文件固定写死
- 配置文件里写好:replicaof 主库ip 主库端口(上面已经写过)
- 配从(库)不配主(库)(1)配置第一台从机6380(2)配置第二台从机6381
- 先master后两台slave依次启动
- 主从关系查看
- 日志(1)主机日志(vim 6379.log)(2)备机日志(后两张图)
- 命令
info replication
- 日志(1)主机日志(vim 6379.log)(2)备机日志(后两张图)
(2)主从问题演示
- Q:从机可以执行写命令吗?A:不可以,从机只能读
- Q:从机切入点问题?
- Q:主机shutdown后,从机会上位吗?
- Q:主机shutdown后,重启后主从关系还在吗?从机还能否顺利复制?A:主从关系依然存在,从机依旧是从机,可以顺利复制
- Q:某台从机down后,master继续,从机重启后它能跟上大部队吗?A:可以,类似于从机切入点问题
(3)方案2:命令操作手动指定
- 从机停机去掉配置文件中的配置项,3台目前都是主机状态,各不从属
- 3台master
- 预设的从机上执行命令:salveof 主库IP 主库端口
- Q:用命令使用的话,2台从机重启后,关系还在吗?A:不会存在了
(4)配置 VS 命令的区别
配置,持久稳定,永久生效;命令,当次生效
4.3.2薪火相传
- 我们直接在第二台slave中(此时配置文件中它的master还是6379)
- 虽然现在第一台从机也具有了master的身份,但是它仍然是主机的slave,所以也不能写入
4.3.3反客为主
五、复制原理和工作流程
(1)slave启动,同步初请
- slave启动成功链接到master后会发送一个sync命令
- slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除
(2)首次连接,全量复制
- master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集的命令并缓存起来,master节点执行RDB持久化完后,master将RDB快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步
- 而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化
(3)心跳持续,保持通信
(4)进入平稳,增量复制
master继续将新的所有收集到的修改命令自动依次传送给slave,完成同步
(5)从机下线,重连续传
- master 会检查backlog里面的offset,master和slave都会保存一个复制的offset怀有一个masterId
- offset 是保存在backlog 中的。master只会把已经复制的offset后面的数据赋值给slave,类似断电续传
六、复制的缺点
- 复制延时,信号衰减
- master挂了怎么办?