Redis主从复制

Redis主从复制


一、简介

1)主从复制是什么?
Redis主从复制是指主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。
2)主从复制可以干什么?
·读写分离,性能扩展;(写操作在主服务器,读操作在从服务器)
·容灾快速恢复(比如有一台从机down掉,可以,从另一台从机读取)缺点:主服务器down掉无法恢复,解决办法:集群。
在这里插入图片描述

二、搭建一主两从(模拟)

1、前期准备工作:
1)在根目录下创建一个myredis目录:
在这里插入图片描述
2)把redis的配置文件复制一份到myredis目录下:
在这里插入图片描述
3)创建三个配置文件(分别为三台虚拟机的配置文件)
在这里插入图片描述
4)把redis.conf导入到三个 配置文件中(例如导入到redis6379.conf中,并修改某些内容,其他两个文件操作一样):
在这里插入图片描述
2、启动三台redis服务器:
1)启动

在这里插入图片描述
2)查看是否启动成功
在这里插入图片描述
注意:如果之前安装的redis的时候配置了自启,需要先关闭自启的那个redis服务器,不然6379端口会被占用:
在这里插入图片描述
停止自启的服务器:
在这里插入图片描述
3、查看三个主机的运行情况
1)先连接上redis服务器(端口为6379的服务器为例,其他操作一样):
在这里插入图片描述
如果有密码需要输入密码:
在这里插入图片描述
输入info replication命令查看redis6379服务器运行情况:
在这里插入图片描述
redis6380运行情况:
在这里插入图片描述
redis6381运行情况:
在这里插入图片描述
可以看到三个服务器的role的值都是master,说明三个服务器都是主服务器,并没有从机,所以我们需要配置那个是主机,哪个是从机,下面开始配置。
2)例如把6379配置为主机,6380和6381为从机:
从机使用slaveof< ip >< port >命令:
ip:主机的IP地址
port:主机的端口号
在这里插入图片描述
查看一下redis6380的运行情况:
在这里插入图片描述
可以看到从机的role的值已经变成slave了,说明它已经成为了6379的从机。
再查看一下redis6379的运行情况:
在这里插入图片描述
可以看到role的值是master,说明是主机,connected_slaves的值是1,说明已经有一台从机连接上主机了。
最后再把6381redis也连接上主机:
在这里插入图片描述
再查看redis6379的运行情况:
在这里插入图片描述
connected的值已经变为2了,说明从机已经有了两台,同样三从,四从也是同样的方法,但是主机只能有一台。
注意:如果redis配置了密码,需要在配置文件中添加masterauth xxx(密码),否则连不上主机。

三、测试主从复制的操作

(1)一主二仆

1、先查看三台服务器的键值对情况:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到三个服务器都是空的。
2、在主机插入一对键值对,再查看三台服务器情况:
在主机插入k1 v1 键值对:
在这里插入图片描述
查看其他两台服务器:
在这里插入图片描述
在这里插入图片描述
可以看到键值对已经同步到两台从机上了。
注意:只能在主机上进行写操作,不能在从机上进行写操作,如果在从机上进行写操作,则会发生:
在这里插入图片描述

2、假如一主二从中的一台从机突然关闭,而在这个从机关闭之后主机进行了写入操作,在这台从机重启之后会发生什么?
例如:
关闭redis6380从机:
在这里插入图片描述
查看主机的运行情况:
在这里插入图片描述
现在只有一台从机。
在主机进行写入几个键值对:
在这里插入图片描述
在另一台从机查看键值对情况:
在这里插入图片描述
现在重启redis6380服务器并查看运行情况:
在这里插入图片描述
可以看到redis6380服务器的role值为master,说明它又成为了一台独立的主机。
查看redis6380的键值对情况:
在这里插入图片描述
只有之前作为从机的键值对,并没有后面redis6379写入的键值对。
把redis6380重新作为redis6379的从机再查看键值对情况:
在这里插入图片描述
可以看到redis6380同步了主机所有的键值对。
总结:假如一台从机突然关机,那么在关机期间主机写操作的数据从机都不会同步,从机重启之后会变成一台独立的主机,并不会还原到原来主机的从机,需要手动加入原来的主机,作为原来主机的从机后,会同步所有新写入的数据。

3、假如主机关机会发生什么情况?
例如:将redis6379关闭:
在这里插入图片描述
在查看其他两台从机的运行情况:
在这里插入图片描述
在这里插入图片描述
可以看到两台从机仍然作为从机,并能检测到主机的状态已经变为down了:master_link_status:down。
现在将redis6379重启并查看运行情况:
在这里插入图片描述
可以看到它仍然作为两台从机的主机,再查看两台从机的运行情况:
在这里插入图片描述
在这里插入图片描述
可以看到它们又检测到主机的状态变为up了:master_link_status:up。
总结:当主机关闭后,从机仍然作为从机,主机仍然作为主机,从机可以检测到主机的状态,当主机重启后,无需让从机重新加入。

(2)薪火相传

上一个slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为链条中下一个的master,可以有效减轻master的写压力,去中心化减低风险。
缺点:一旦某个slave的宕机,后面的slave都没法备份,主机挂了,从机还是从机,无法写数据了。

(3)反客为主

当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改,用slaveof no one将从机变为主机。
将redis6379shutdown:
在这里插入图片描述查看一下redis6380的运行情况:
在这里插入图片描述
目前还是从服务器,使用slaveof no one再查看运行情况:
在这里插入图片描述
可以看出已经变为主服务器了:role的值为master。

缺点:需要手动完成。
解决:哨兵模式(sentinel)

(4)主从复制原理

1、当从服务器连上主服务器之后,从服务器向主服务器发送进行数据同步信息;
2、主服务器接到从服务器发送过来同步信息,把主服务器数据进行持久化,rdb文件,把rdb文件发送到从服务器,从服务器拿到rdb进行读取;
3、每次主服务器进行写操作之后,和从服务器进行数据同步。

注意:从服务器只在第一次主动请求同步,后面都是主服务器发起的,每次进行写操作,都会去主动同步从服务器。

四、哨兵模式(sentinel)

1、哨兵模式是什么?
反客为主自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
2、测试哨兵模式
1)先把模式切换为一主二仆
2)在自定义的 /myredis目录下新建sentinel.conf文件,名字不能错:
在这里插入图片描述
3)在文件里面写入:
在这里插入图片描述
其中mymaster为监控对象起的服务器名称,1 为至少有多少个哨兵同意迁移的数量。
4)启动哨兵,使用redis-sentinel sentinel.conf命令启动哨兵:

在这里插入图片描述
可以看到最后三行的第一行是说明监控哪台主机的,后面说明的是有哪些从机,假如主机宕机就从这些从机挑一台作为主机。
5)令redis6379宕机,观察效果:
在这里插入图片描述
可以看到主机已经从redis6379变成redis6380了,原来的redis6379则变为从服务器,不过是已经挂掉的状态,当redis6379重启的时候就作为从服务器而不是主服务器了。
在这里插入图片描述

缺点:复制延时,由于所有操作都是在master上操作,然后同步更新到slave上,所以从master同步到slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。
6)主机宕机后如何选择从机作为主机?
在配置文件redis.conf中从机有一个slave-priority 100这样的值,这个值越小则优先级越高;
当优先级一样时,选择偏移量最大的,就是数据与主机同步值最高的;
当同步值也一样,选择runid最小的从服务器,每个redis实例启动后都会随机生成一个 40位的runid。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值