美文网首页
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复制

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