Redis系列之主从复制

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

Redis系列之主从复制


前言

上节我们介绍了Redis的持久化,今天我们再来看看Redis另一个高保障的话题,主从复制,读写分离;现在就开始我们的主从吧,看看Redis如何玩主从。

Redis系列之主从复制

Redis的主从是什么?

Redis的主从指的是,我们可以为了解决对缓存的请求压力时做的一种读写分离和分压的策略,我们可以通过部署多台Redis或者多个Redis实例,然后将其中一台设置为主服务器,另外的一台或者多台设置为从服务器,Redis的主从主要有下面几个特点:

  • Master可以拥有多个slave

  • Master负责写请求,slave负责读请求,实现读写分离

  • 主从复制不会阻塞master 在同步数据时,master可以继续处理client请求

  • 提供系统的伸缩性

Redis系列之主从复制


Redis系列之主从复制


主从复制的过程?

Redis系列之主从复制


Redis系列之主从复制


如何实现主从复制?

环境准备:3台Redis,1主2从     主(6379) 从(6378、6377)

主服务器配置文件基本没什么改动的,主要在于从服务器:

6377从服务器配置(6378类似):

Redis系列之主从复制

Redis系列之主从复制

然后启动主服务器,再启动从服务器

我们先看下主服务这边的日志:会发现主服务6379启动成功,从服务6377和6378启动后先是发送asks请求同步,然后后台开始同步,直到完成同步,这是一种全量同步,首次启动从服务会向主服务进行一次全量同步,后续主服务器进行数据变更时,从服务器就会进行增量同步。当然从服务器是可以主动申请进行全量同步的。

Redis系列之主从复制

从服务器启动后会先跟主服务进行连接并进行ping检测是否能进行通信,然后会向主服务器发送同步申请,主服务后台生成快照文件,从服务根据快照文件进行同步:

Redis系列之主从复制


我们再来检测下,是否成功完成主从数据库的同步,我们先看下主服务器的状态信息:我们会发现在6379中role为master,有2个从服务器保持连接,6378中role为slave,所对应的主为6379

Redis系列之主从复制

Redis系列之主从复制


现在我们来测试下是否数据真正做到了同步:连接客户端,这里我们需要注意一下,从服务器连接客户端需要指定端口号,

Redis系列之主从复制

我们在主插入数据key:name,在从都能直接同步过来,而且我们还会发现在6378从服务器进行写操作时,报了个error,说你不能进行写操作只能进行读;

Redis系列之主从复制

Redis系列之主从复制

Redis系列之主从复制


OK,目前为止主从就完成了,我们再来看看下面这种情况,当从服务器宕机时会发生什么?

我将6378这台从服务器停掉了:

Redis系列之主从复制

主服务器跟从服务器进行同步,此时发现6377正常同步成功,而6378并没有反应了,

Redis系列之主从复制

Redis系列之主从复制

同时6378这台服务器也不能获取数据了;

Redis系列之主从复制

当我们再次将6378恢复启动:主服务器6379检测到6378启动,重新连接并完成同步;

Redis系列之主从复制

6378也能重新拿到主服务器的数据

Redis系列之主从复制


我们再来看下如果主服务器宕机的情况:从服务器就会一直在连接,而且还会连接不上

Redis系列之主从复制

当主服务器重新启动时:从服务器正常连接同步

Redis系列之主从复制

Redis系列之主从复制


当然还可以当主服务器宕机时,手动指定从服务器升级为主服务器(slaveof NO ONE),这里就不继续讲解了,因为这种情况主从切换,和主服务器宕机重启都是手动,是不是特别麻烦,如果你觉得麻烦那就对了,下节我们将介绍哨兵,它就是来自动干这事的,我们下节再见!!!


原文始发于微信公众号(Justin的后端书架):Redis系列之主从复制