redis 基础学习之主从复制

主动复制

主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主

1、作用

  • 读写分离,性能扩展
  • 容灾快速恢复

 

2、常用三招

  • 一主二从

    • 从服务器挂掉以后,重新开启,不会自动变成从服务器,二是默认成为一个新的主服务器
    • 当设置成为某个从服务器后,会把主服务器的所有内容复制过来
    • 主服务器挂掉以后,从服务器还是认,等主服务器重新启动,回到原先的状态
  • 薪火相传

    上一个Slave可以是下一个slave的Master,Slave同样可以接收其他 slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险。

    用 slaveof <ip><port>

    中途变更转向:会清除之前的数据,重新建立拷贝最新的

    风险是一旦某个slave宕机,后面的slave都没法备份

    主机挂了,从机还是从机,无法写数据了

  • 反客为主

    当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。

用 slaveof  no one  将从机变为主机。

 

3、复制原理

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

  • Master接到命令,把主服务器的数据进行持久化RDB,将RDB文件发送给从服务器,从从服务器读取数据并加载

  • 每次主服务器进行写操作,和从服务器进行同步

  • 但是只要是重新连接master,一次完全同步,全量复制将被自动执行

 

4、哨兵模式

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库

 

配置:

  • 新建sentinel.conf文件,名字绝不能错
  • 配置哨兵,填写内容  
    • sentinel monitor mymaster 127.0.0.1 6379 1
    • 其中mymaster为监控对象起的服务器名称, 1 为至少有多少个哨兵同意迁移的数量。
  • 启动哨兵
    • redis做压测可以用自带的redis-benchmark工具
    • 执行redis-sentinel /sentinel.conf
  • 当主机挂掉,从机选举中产生新的主机
    • 大概10秒左右可以看到哨兵窗口日志,切换了新的主机
    • 哪个从机会被选举为主机呢?根据优先级别:slave-priority
    • 原主机重启后会变为从机。

 

5、复制延时

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

 

6、故障恢复

 

  • 优先级在redis.conf中默认:slave-priority 100,值越小优先级越高,后来的版本中叫做replica-priority
  • 偏移量是指获得原主机数据最全的
  • 每个redis实例启动后都会随机生成一个40位的runid
posted @ 2022-05-03 21:58  r1-12king  阅读(34)  评论(0编辑  收藏  举报