当前位置: 首页 > article >正文

Redis 08章——复制(replica)

一、是什么

  1. 官网地址
  2. 一句话
    1. 就是master以写为主,slave以读为主
    2. 当master数据变化时,自动将新的数据异步同步到其他slave数据库

二、能干嘛

  1. 读写分离
  2. 容灾恢复
  3. 数据备份
  4. 水平扩容支撑高并发

三、怎么玩

(1)配从(库)不配主(库)

(2)权限细节,重要

  1. master如果配置了 requirepass 参数,需要密码登录
  2. slave 需要配置 masterauth 来设置检验密码,否则的话master会拒绝slave的访问请求

(3)基本操作命令

四、案例演示

(1)架构说明

4.1.1一个Master两个Slave

(1)3台虚拟机每台都安装redis
(2)Master配置步骤
  1. 重新拷贝一份redis.conf到/opt/redis-7.0.0/myredis下,命名为redis6379.conf
  2. 后续所有改动都在redis6379.conf中进行
  3. 开启daemonize yes
  4. 注释掉 bind 127.0.0.1
  5. protected-mode no
  6. 指定端口号 port 6379
  7. 指定 dir(这里是指配置文件在哪个目录下)
  8. pid文件名字 pidfile
  9. log文件名字 logfile(因为配置文件是在myredis里,所以直接这么写)
  10. requirepass
  11. dbfilename dump.rdb
  12. appendonly yes和appendfilename appendonly.aof(但是目前我们先不开启)
(3)Slave配置步骤
  1. 修改ip地址(详细步骤参考linux的笔记):第一台slave的ip我修改成了192.168.200.131,第二台slave的ip我修改成了192.168.200.132
  2. 第一台slave的配置文件改名为redis6380.conf,第二台slave的配置文件改名为redis6381.conf
  3. salve的配置文件的修改步骤(第二台步骤一样的):
  4. 从机访问主机的通行密码masterauth,必须!从机需要配置,主机不用!!!(第二台slave也是这么配置)
  5. linux快捷键:比如我们想跳转到309行,就在一般模式下输入309,然后按Shift+g
  6. 注意:主机从机都要关闭防火墙!!!

4.1.2拷贝多个redis.conf文件

  1. redis6379.conf
  2. redis6380.conf
  3. redis6381.conf

(2)小口诀

  1. 三边网络相互ping通且注意防火墙配置
  2. 三大命令
    1. 主从复制(1)replicaof 主库ip 主库端口(2)配从(库)不配主(库)
    2. 改换门庭:slaveof 新主库ip 新主库端口
    3. 自立为王:slaveof no one

(3)常用3招

4.3.1一主二仆

(1)方案1:配置文件固定写死
  1. 配置文件里写好:replicaof 主库ip 主库端口(上面已经写过)
  2. 配从(库)不配主(库)(1)配置第一台从机6380(2)配置第二台从机6381
  3. 先master后两台slave依次启动
  4. 主从关系查看
    1. 日志(1)主机日志(vim 6379.log)(2)备机日志(后两张图)
    2. 命令
      info replication

(2)主从问题演示
  1. Q:从机可以执行写命令吗?A:不可以,从机只能读
  2. Q:从机切入点问题?
  3. Q:主机shutdown后,从机会上位吗?
  4. Q:主机shutdown后,重启后主从关系还在吗?从机还能否顺利复制?A:主从关系依然存在,从机依旧是从机,可以顺利复制
  5. Q:某台从机down后,master继续,从机重启后它能跟上大部队吗?A:可以,类似于从机切入点问题
(3)方案2:命令操作手动指定
  1. 从机停机去掉配置文件中的配置项,3台目前都是主机状态,各不从属
  2. 3台master
  3. 预设的从机上执行命令:salveof 主库IP 主库端口
  4. Q:用命令使用的话,2台从机重启后,关系还在吗?A:不会存在了
(4)配置 VS 命令的区别

配置,持久稳定永久生效;命令,当次生效

4.3.2薪火相传

  1. 我们直接在第二台slave中(此时配置文件中它的master还是6379
  2. 虽然现在第一台从机也具有了master的身份,但是它仍然是主机的slave,所以也不能写入

4.3.3反客为主

五、复制原理和工作流程

(1)slave启动,同步初请

  1. slave启动成功链接到master后会发送一个sync命令
  2. slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除

(2)首次连接,全量复制

  1. master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集的命令并缓存起来,master节点执行RDB持久化完后,master将RDB快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步
  2. 而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化

(3)心跳持续,保持通信

(4)进入平稳,增量复制

master继续将新的所有收集到的修改命令自动依次传送给slave,完成同步

(5)从机下线,重连续传

  1. master 会检查backlog里面的offset,master和slave都会保存一个复制的offset怀有一个masterId
  2. offset 是保存在backlog 中的。master只会把已经复制的offset后面的数据赋值给slave,类似断电续传

六、复制的缺点

  1. 复制延时,信号衰减
  2. master挂了怎么办?

http://www.kler.cn/a/550147.html

相关文章:

  • Golang | 每日一练 (2)
  • 【Golang学习之旅】如何在Go语言中使用Redis实现分布式锁,并解决锁过期导致的并发问题?
  • Linux软件编程(3)
  • PCDN技术的工作原理
  • GitHub基本操作及Git简单命令
  • 队列+宽搜(典型算法思想)—— OJ例题算法解析思路
  • 亲测有效!使用Ollama本地部署DeepSeekR1模型,指定目录安装并实现可视化聊天与接口调用
  • 在Nodejs中使用kafka(三)offset偏移量控制策略,数据保存策略
  • 通过网线将Keysight DSOX4154A示波器信号传输至电脑的Step
  • 【jar包启动命令简单分享】
  • LeetCode1299
  • Selenium+Pytest自动化测试框架实战
  • springboot接入ShardingJDBC
  • 科技引领未来,中建海龙C-MiC 2.0技术树立模块化建筑新标杆
  • 高校体育场管理系统系统|体育场管理系统小程序设计与实现(源码+数据库+文档)
  • 在 Python 里,None 可能是调用者主动传入的值,所以不能用 None 来判断参数是否被提供。
  • .NET软件开发框架简记
  • 软件定义汽车时代的功能安全和信息安全
  • 知识文档管理系统哪个好?对比25年主流11款
  • SpringBoot(7)-Swagger