美文网首页
Redis复制

Redis复制

作者: 猪儿打滚 | 来源:发表于2021-02-11 10:04 被阅读0次

1、redis复制是什么?

redis复制,也就是我们所说的主从复制(master/slaver机制)。根据配置和策略,主机在数据更新后,会自动同步到从机上面。master以写为主,salave以读为主。

2、能干嘛?

  • 读写分离
  • 容灾恢复

3、复制的原理

1.Slave启动成功连接到master后会发送一个sync命令
2.Master接到sync命令后,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。
3.slave连接master后,会自动进行全量复制,然后当master有数据变更时,再进行增量复制:

  • 全量复制
    slave服务在接收到数据库文件数据后,将其存盘并加载到内存中
  • 增量复制
    Master继续将新的所有收集到的修改命令依次传给slave,完成同步

4、怎么玩?

1.配置

PS.配置只需要配置从库,不需要配置主库

  • 复制配置文件redis.conf
    cp
  • 开启后台启动:daemonize yes
  • 修改pid文件名(建议和conf文件名对应):pidfile /var/run/redis-xx.pid
  • 修改端口(因为要启动多个redis,所以端口不能冲突):port xxxx
  • 修改log名称:logfile "mylog-one"
  • 修改rdb名称:dbfilenmae dump-one.rdb
从库配置1 从库配置2 从库配置3
2.分别启动服务,检查配置是否正确
  • 启动4个服务:redis-server redis-xxx.conf
  • 分别启动客户端连接对应的服务:redis-cli -p 对应端口号
  • 检查各自的身份,此时都是master:info replication
  • 检查键,此时除了6379,其它都没有key:keys *
    检查
3.一主二仆

基于步骤1和2的基础上进行

  • 6380和6381的客户端,分别连接6379为master:slaveof 主机ip:redis端口

  • 检查各自的身份,此时两台变成了slave:info replication

  • slave机检查自己的key,此时已经同步了master的key:keys *

    一主二仆
  • 查看日志


    主机日志
从机日志
4.主从复制的一些问题
  • 切入点问题?比如:如果此时主机已经有k1、k2两个键,那么此时slave1从机连接主机,然后主机继续添加k3键,此时slave1的值的同步如何进行的?
    答:slave1连接上master时,k1和k2同步过来;当master继续添加k3时,k3也会同步过来给slave1。也就是说,主从复制是从头开始复制master的数据到slave的,并且之后的值也会继续复制

  • 从机是否可以写?set是否可以进行?
    答:从机不可以写,set不可以进行

    从机进行写操作报错
  • 主机如果shutdown了,情况会如何?从机是上位还是原地待命?
    答:使用info replication看身份,从机依旧是slave身份,也就是原地待命
  • 主机shutdown,重启后,主机继续新增记录,从机还能否顺利复制?
    答:可以顺利复制,一切照旧

  • 其中一台从机shutdown后情况如何?如果从机重启后,它还能跟上大部队吗?
    答:此时从机shutdown重启后,身份是master;因为从机和master断开了,再次启动时,除非配置到了redis.conf文件,否则它是独立的一台master。
    此时它需要重新和master建立连接(slaveof 主机地址:redis端口),只要再次连接了,那么它就变成了slave,内容依旧从头开始复制

  • 如果一台从机,中途变更挂到了新的主机下面,它的数据会如何处理?
    答:这台从机之前的数据会清除,然后再从新的主机那从头复制数据,以后跟它混

5.薪火相传

上一个slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master,可以有效减轻master的写压力(中间充当了master的slave,身份依旧是slave,但是它有链接它的slave)


薪火相传
6.反客为主slaveof no one

这个是基于一主多从的时候,主机挂了,这时候可以从多个从机中,手动把其中一个从机变成新的主机。
简单来说,就是使当前数据库停止与其它数据库的同步,转成主数据库。

  • 主机挂后,手动把其中一台从机变成主机
    从机使用slaveof no one命令,变成master(此时之前老大的小弟们还没挂靠这个新老大)
  • 之前老大的小弟们,需要手动挂靠这个新老大
    slaveof 主机ip:redis端口
    slaveof no one
  • 如果此时之前的主机重启了,会怎么样?
    答:此时之前的主机依旧是master,只不过如果之前的slave都跟了新的主机,那么此时它下面就没有slave了

5、sentinel/哨兵模式

  • 是什么?
    哨兵模式其实就是反客为主的自动版,根据配置,能够在后台监控主机是否故障,如果故障了,则根据配置的投票数,看哪台从机的投票数到了,则自动把该从机转成主机

  • 怎么玩?

    • 首先配好一主二仆模式:6379带着6380和6381
    • 新增sentinel.conf配置文件
      到放置redis.conf文件的目录下,新建sentinel.conf文件(名字不能错):touch sentinel.conf
    • 配置sentinel.conf一组sentinel能同时监控多个Master
      填写内容:sentinel monitor 被监控主机名字(自己起名字) 127.0.0.1 6379 1(1代表要达到的投票数,意思就是当主机127.0.0.1 6379挂了后,哪台从机得到1票,就接替成为新的主机)
    • 启动哨兵
      执行命令:Redis-sentinel xxxx/sentinel.conf(根据实际情况写路径)

下面是测试步骤

  • 首先测试正常的主仆模式是否正常

  • 然后让原本的主机挂掉:shutdown

    主机挂掉
  • 查看投票环节


    投票环节
  • 从机上位当主机,新的主仆关系建立,继续开工,使用info replication查看

    新的主仆关系
  • 问题:如果之前的master重启回来,会不会双master冲突?
    答:之前的master会成为现在主机的从机


    旧master重启

6、复制的缺点

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

相关文章

  • Redis主从复制

    Redis主从复制 一.主从复制介绍 1.Redis复制功能介绍 1)Redis 使用异步复制。从 Redis2....

  • redis主从复制和sentinel

    redis 主从复制 一. 复制 Redis 的复制(replication)功能允许用户根据一个 Redis服务...

  • redis-cluster 集群搭建方案

    下载redis 源码包,编译安装redis 修改redis 参数 复制几个不同的redis 服务节点 修改复制的服...

  • Redis|主从复制与哨兵机制

    1. Redis主从复制 1.1 Redis主从复制 Redis主从复制主要有两个角色,主机(master)对外提...

  • 【Redis学习笔记】13 Redis 主从复制

    1. Redis 主从复制特性 2. Redis 主从复制流程 3. Redis 主从复制操作 IP地址端口角色1...

  • Redis的复制(Master | Slave)

    Redis的复制(Master | Slave) 1.Redis复制简介 行话:也就是我们所说的主从复制,主机数据...

  • Redis复制

    1、redis复制是什么? redis复制,也就是我们所说的主从复制(master/slaver机制)。根据配置和...

  • k3s operator 方式 安装 redis 无中心集群

    redis有单机,复制,分片这几种方式 复制就是把一个redis的数据,复制到另外一个redis, 分片就是把ke...

  • redis(二)

    Redis用户认证 禁用危险命令 主从复制的过程 主从复制的部署 哨兵 Redis哨兵+主从+密码 Redis哨兵...

  • redis设计与实现-复制

    复制 redis主从集群使用复制功能实现,复制有如下特性 redis 2.8以前的复制功能不能高效地处理断线后重复...

网友评论

      本文标题:Redis复制

      本文链接:https://www.haomeiwen.com/subject/jooqxltx.html