首页 > 数据库 >Redis复制

Redis复制

时间:2023-12-09 21:44:07浏览次数:26  
标签:主库 slave Redis 命令 从机 复制 master

是什么

主从复制,master以写为主,slave以读为主。

当master数据变化的时候,自动将新的数据异步同步到其他slave数据库

能干嘛

  • 读写分离

  • 容灾恢复

  • 数据备份

  • 水平扩容支撑高并发

怎么玩

  • master如果配置了requirepass参数,需要密码登录,那么slave就要配置masterauth来设置校验密码,否则master会拒绝slave的访问请求

  1. 后台启动:默认daemonize no 改为 daemonize yes image-20231209102030291

  2. 关闭保护模式:默认protected-mode yes 改为 protected-mode no image-20231209102108303

  3. 注释掉bind 127.0.0.1 直接注释掉这行(默认bind 127.0.0.1只能本机访问)或改成本机IP地址,否则影响远程IP连接 image-20231209102126050

  4. 指定端口 image-20231209103019723

  5. 指定当前工作目录 image-20231209103054382

  6. pid文件名字 image-20231209103135044

  7. log文件名字 image-20231209103214403

  8. requirepass image-20231209103246639

  9. dump.rdb名字 image-20231209103319834

  10. aof文件 image-20231209103356802

  11. 从机增加的配置 image-20231209103428728

三种模式

一主二仆
  • 方案一:配置文件固定写死

    配置文件文件执行 replicaof 主库IP 主库端口

    配从(库)不配主(库)

    先master后两台slave依次启动

    image-20231209114829055

    主从关系查看

    • 日志

      主机日志 image-20231209114927660

      从机日志

      image-20231209115001327

    • 命令

      info replication 命令查看

      image-20231209115100233

      image-20231209115113759

      image-20231209115126252

主从问题演示:

  1. 从机可以执行写命令吗?

    image-20231209115707151

  2. slave是从头开始复制还是从切入点开始复制?

    从头开始一锅端!(首次一锅端,后续跟随,master写,slave跟)

  3. 主机shutdown后,从机 会上位吗?

    从机不动,原地待命,从机数据可以正常使用;等待主机重启动归来

  4. 主机shutdown重启后主从关系还在吗?从机还能否顺利复制?

    在,可以!

  5. 某台从机down后,master继续,该从机重启后还能跟上大部队吗?

    可以!

     

  • 方案二:命令操作手动指定

    slaveof 主库IP 主库端口

  1. 从机停机去掉配置文件中的配置项,3台目前都是主机(master)状态,各不从属

    image-20231209120322092

  2. 从机上执行命令 slaveof 主库IP 主库端口

    image-20231209120446727 image-20231209120457747

  3. 用命令设置的主从关系,2台从机重启后,关系还在吗?

    不在了!

 

配置 VS 命令

配置,持久稳定

命令,当次生效

 

薪火相传

上一个slave可以是下一个slave的master,slave同样可以接收其他slave的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻注master的写压力。

中途变更主机会清除之前的数据,重新建立拷贝最新的主机数据。

 

反客为主

SLAVEOF no one

使当前数据库停止与其他数据库的同步,转成主数据库

 

复制原理&工作流程

  1. slave启动,同步出请:

    • slave启动成功连接到master会发送一个sync的命令

    • slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master覆盖清除

  2. 首次连接,全量复制:

    • master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集的命令缓存起来,master节点执行RDB持久化完成后,master将所有rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步。

    • 而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。

  3. 心跳持续,保持通信:

    repl-ping-replica-period 10:master发出PING包的周期,默认是10秒

    image-20231209212922958

  4. 进入平稳,增量复制:

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

  5. 从机下线,重连续传:

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

 

缺点

  • 复制延时,信号衰减

    由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

    image-20231209213652536

  • master挂了,不会在slave节点中自动重选一个master

标签:主库,slave,Redis,命令,从机,复制,master
From: https://www.cnblogs.com/chenyonghua/p/17891544.html

相关文章

  • Redis7 发布订阅
    1、是什么是一种通信模式:发送者(PUBLISH)发送消息,订阅者(SUBSCRIBE)接收消息,可以实现进程间的消息传递Redis可以实现消息中间件MQ的功能,通过发布订阅实现消息的引导和分流2、能干啥Redis客户端可以订阅任意数量的频道,类似于微信关注多个公众号当有新消息通过PUBLISH命令发送给频......
  • 基于Redis的简易延时队列
    基于Redis的简易延时队列一、背景在实际的业务场景中,经常会遇到需要延时处理的业务,比如订单超时未支付,需要取消订单,或者是用户注册后,需要在一段时间内激活账号,否则账号失效等等。这些业务场景都可以通过延时队列来实现。最近在实际业务当中就遇到了这样的一个场景,需要实现一个......
  • centos7.9 编译安装redis 6.2.6
    参考地址:https://zhudo.net/server/linux/149.html 1.下载和安装下载redis需要其他版本去官网自行下载wget-chttps://download.redis.io/releases/redis-6.2.6.tar.gz//解压tar-zvxfredis-6.2.6.tar.gz//把安装包移动到安装目录,并且重命名为redismvredis-6.2.6......
  • Redis数据结构2:REDIS_STRING(SDS)
    REDIS_STRING(SDS)SDS全称SimpleDynamicString(简单动态字符串),是专为Redis设计的简易字符串实现。Redis并未采用C语言传统字符串char*,而是自己设计了一套字符串实现标准。传统字符串的缺陷C语言字符串实际上就是一个以'\0'结尾的字符数组。例如:char*myName="ErickRen";......
  • Redis学习记录第七天
        今天我们继续深入学习Redis,探讨了Redis的数据结构类型以及一些高级功能。首先,我们先来回顾一下Redis支持的数据结构类型:String(字符串):最基本的数据结构类型,可以存储字符串、数字等数据。Hash(哈希):键值对的集合,可以用于存储对象,支持添加、删除、获取单个或多个键值对。Lis......
  • 常见场景题-Redis的bitmap如何实现签到功能?
    Redis的bitmap实现签到系统?答:主要讲一下Redis原生的bitmap的使用方法,以及如何使用bitmap来实现签到功能先来看一下如何使用redisbitmap的原生命令实现签到功能:签到我们先来设计key:userid:yyyyMM,那么假如usera在2023年10月3日和2023年10月4日签到的话,使用以下命令:se......
  • Redis生产实战-Redis集群故障探测以及降级方案设计
    Redis集群故障探测在生产环境中,如果Redis集群崩溃了,那么会导致大量的请求打到数据库中,会导致整个系统都崩溃,所以系统需要可以识别缓存故障,限流保护数据库,并且启动接口的降级机制降级方案设计我们在系统中操作Redis一般都是通过工具类来进行操作的,假设工具类有两个RedisCache......
  • Redis基础(六)-Redis客户端
    Redis官方对Java语言的封装框架推荐的有十多种,主要是Jedis、Redisson。Jedis和Redisson都是Java中对Redis操作的封装。Jedis只是简单的封装了Redis的API库,可以看作是Redis客户端,它的方法和Redis的命令很类似。Redisson不仅封装了redis,还封装了对更多数据结构的支持,以及......
  • Redis基础(七)-Redis6的事务操作
    Redis的事务定义Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis的事务作用Redis事务的主要作用就是串联多个命令防止别的命令插队。Multi、Exec、discard从输入Multi命令开始,输入的命......
  • Redis数据结构分析1:Redis对象
    Redis数据结构分析本篇将涉及C语言,请确保您拥有C语言相关基础与计算机底层知识RedisObject(robj)robj是Redis对象的起点,所有的数据结构都封装到了robj之中。其源码如下:structredisObject{unsignedtype:4;unsignedencoding:4;unsignedlru:LRU_BITS;......