Redis的主从复制

2021/7/12 19:36:15

本文主要是介绍Redis的主从复制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、什么是主从复制

  1. 主服务器用于写入数据,从服务器用于读取数据,master/slaver机制,master写,slaver读
    在这里插入图片描述
  2. 有什么作用
    1. 实现读写分离,减缓服务器压力
    2. 容灾快速恢复

二、实现组从复制(一台服务器模拟)

  1. 新建myredis文件夹并将redis配置文件复制到该目录下
    在这里插入图片描述
  2. 配置一主俩从,创建三个配置文件:redis6379.conf、redis6380.conf、redis6381.conf,先将刚才复制文件的AOF关闭
  3. 创建并编辑3个配置文件,直接使用vim创建
    在这里插入图片描述
    在这里插入图片描述
  4. 启动三个服务
    在这里插入图片描述
  5. 此时3个服务没有主从关系,使用info replication可以查看
    ·在这里插入图片描述
  6. 配置从机slaveof <ip> <port>,成为某个实例的从服务器。在6380和6381上执行,完成后查看6379信息
    在这里插入图片描述
  7. 测试,在主机上存数据,在从机上读取,从机上写数据会报错

在这里插入图片描述
在这里插入图片描述
8. 注意:如果从服务器挂掉了,在从服务器从挂掉到重启的时间内,主服务器又添加了数据,从服务器还是可以获取这些数据的。从服务器挂掉后重启并不会成为从服务器,还需要手动加入到集群中

6381挂掉以后主服务器又添加了2条数据
在这里插入图片描述
重启6381并查看信息,发现是主服务器,并不是从服务器
在这里插入图片描述
将6381添加到从服务器中并获取key可以发现挂掉之后主机新存入的key也存在
在这里插入图片描述
一主二仆:slave1和slave2复制时机是从头开始复制,比如从k4进来,k1,k2,k3也可以复制,在从机挂掉后,重启从机需要手动将从机加入集群,主机挂掉后从机并不会替代主机的位置,而是等待主机重启,重启后主机依然有俩个从机。

三、复制原理

  1. 从服务器连上主服务器后,相主服务器发送一个进行数据同步的消息;
  2. 主服务器收到消息后会将主服务器的数据持久化(RDB),发送给从服务器,从服务器拿到RDB读取;
  3. 每次主服务器进行写操作后,会和从服务器进行数据同步;

薪火相传
 设置一台从服务器为另一台从服务器的主服务器,主服务器将数据同步到这个服务器上,这个服务器再将数据同步到子服务器上,可以减轻主服务器的压力。设置方法和设置主服务器相同。遵循一主二仆,但是作为主机的slave挂了,后面的slave都无法备份。

反客为主
 当主服务器挂掉后,让一台从服务器变成主服务器,slaveof no one,注意,变成这个主服务器的从服务器需要是其他从服务器的主服务器。

四、哨兵模式

是什么

 反客为主的自动版,能够监视后台主机是否故障,如果出现故障根据投票数自动将主机转化为从机。

怎么做:
 首先将结构转化为一主二仆6379带着6380和6381,在myredis目录下新建一个名字为sentinel.conf文件
在这里插入图片描述
sentinel:哨兵
monitor:监控
mymaster:主机名字(自己取得名字)
最后的1表示有多少个哨兵同意迁移的数量。
redis-sentinel sentinel.conf执行哨兵,再将主机停掉,查看输出:

哨兵监视到6379挂了:
在这里插入图片描述
选择6381为新主机:
在这里插入图片描述
将6380和6379设置为从机:即下一次启动6379,无需手动设置从机,6379自动为从机
在这里插入图片描述
哨兵选择主机的机制

  1. 选择优先级靠前的 优先级在conf文件中默认配置replica-priorify 100,值越小优先级越高
  2. 选择偏移量大的 指和主机同步值最高的
  3. 选择runid最小的服务 每个redis实例启动后都会随机生成一个40为的runid


这篇关于Redis的主从复制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程