Redis主从复制原理

在这里插入图片描述
首先我们会有一个master, 它是一个单独的一个节点。随后呢我们还会有一个slave,slave是一个独立节点,就是专门处理一些读的请求的。

首先我们先会启动master,使用完master以后,我们随后会去做一个配置。配置是配置到这个slave这个节点里面的。这是两个不同的服务器。

当我们的这一台配置并且启动以后,它其实会发送一个ping包发送给我们的master。这个slave我会告诉他,我现在已经是启动了,启动了以后,你应该要交给
我一些任务去处理。所以呢这个时候他会把一些数据提交给他,让slave去做一个处理。这个过程其实就是一个数据复制。它是一个全量的数据复制。这个数据其实就是一个RDB,也就是他的一个文件。他要把这个RDB的文件全部的都会拿出来。拿出来的过程,他其实会先拷贝一份新的放在我们的一个磁盘里面。放在磁盘里面,这是从内存里面拿出来的。

然后呢,通过它内网的一个网络传输,它会传给我们的slave,slave去拿到RDB以后,它并不是直接把它读到它的内存里面去掉,而是把这个RDB先相当于是进行了一个下载,下载到自己的一个硬盘里以后,随后他才会。把这个RDB再一次的加载到他的这个slave的内存里面去。这样子其实就是完成了它的一个复制的过程。这个过程是它的第一次过程。第一次过程其实就是一个init,就是一个初始化的一个过程。

在第一次以后,第二次第三次,只要是有一些相应的写的请求进来,只要是写操作,有一条写一条,他会把相应的一个命令会同步的传输给我们的slave。
这样子,slave就会去修改他自己的一个内存中的数据。如此他们之间就能够做到一个数据的同步了。
这样子,我们的一个slave就可以为外部去提供一些额外的读的请求,读的操作了。

另外呢它的一个数据在做同步的一个过程,其实呢它是不会去影响或者说是阻塞它master的一个写操作,也不会去阻塞它slave的一个读操作的。这主要是因为他们会使用老的数据来提供服务。如果说数据一旦同步完成以后,就会替换掉我们老的数据使用我们新的数据来提供相应的服务了。这样子,其实他们的一个数据呢就能够做到一个同步。

在这里呢,我们可以再举一个例子,就是说我们这个master和这个slave打个比方。

这个master他可能是一个在客服部的一个部门经理,然后slave呢可能就是一些普通的打电话的一些客服人员。
这个时候可能有一个新人入职。新人入职,首先会告知我们的这个经理说,我现在是新入职的人员,其实就相当于是聘了一下,告知了我们的领导以后,这个时候领导会跟我们的实力不错。既然你是一个新的入职员,所以呢我有一些相应的文档,有一些新的一些电话号码我会给到你。这个时候他会把他现有的所有的一些数据,所有的一些文档,所有的一些客户的一些电话号码都会给到我们的slave,让slave去看。然后呢,让他去拨打电话去做相应的一个业务。这个其实就是第一次的一个数据的复制的过程,它是一个全量的。

如果说我们在后续的一些过程,一旦我们的这个master,也就是他的一个领导收到更多的一些客户的信息以后收到一个,他就会递交给我们的下面的客服人员,一个一个的去分发给他们,让他们去做相应的一个拨打电话的一个动作。也就是他有了相应的写操作。读就让我们的slave去做一个处理。这个其实就是咱们的一个数据复制数据同步的一个过程。

在这里面我们一定要注意,初次第一次它是一个全量的数据同步。如果说是我们第二次以后,第二次开始它的一个数据的一个同步过程,它是一个增量式的。

在这里面如果说我们的一个slave,这个slave如果说宕机重启,对于我们的一个数据呢是一开始他会做一个增量的恢复。也就是说现在我们停了一个小时,在停了一个小时的这一段的数据,其实都会在咱们的master。一旦他恢复了以后,我们的master就会把一部分缺失的一个数据同步给我们的slave。

这个其实也跟我们的客服打电话是一样的。如果说你的客服人员生病了几天没有来,肯定会有很多的一些额外的一些客户数据。等到你来了之后,我才会把些新增的一些客户数据给到你,你再去做你自己的业务。这也是同样的一个道理,ok在我们的主从里面,其实有一点我们是必须要去注意的。就是说我们要使用主从复制主从架构,在我们的这个master它必须要开启持久化。

如果说你不去开启它的持久化,一旦我们的一个master停掉,虽然停掉了以后,咱们的这个slave它还是能够去提供一些读的服务的,我们的master它能够恢复,但是恢复了以后,由于它是没有持久化,它内存里面是没有任何数据的。所以它重启以后,它再次的做数据同步的时候,master会把slave里面的数据给清空的。所以呢这一点一定要注意,必须要开启master的一个持久化机制。因为你不去开启,一旦的数据被清空了以后,这简直就是一个灾难性的。

在这里插入图片描述

随后呢我们可以再来看一下主从实现的一个模式,它其实会分为三种形态。
第一种来看一下。第一种是master和一个slave,它们是一主一从,其实就是一对一这样一个关系。他们的一个读写他们就比较平均嘛,就是一比一嘛。

随后再有一个slave2,这样子其实就是一个一主二从。一主二从是我们在平时使用的过程中最多的一种组成复制的模式。,所以说我们其实也是扩展了。我们的一个独立请求,独立请求它可以支持原来的两倍。但是呢我们却不会构建太多,我们不可能会去构建一组多重。

所以说我们在这个master的下面,挂了很多很多的slave,你挂上了10台,几十台不可能会这么做的。因为在我们的一个内网里面,我们的master他要去做一个组成复制,要去把数据同步给其他的slave的时候,它其实就相当于是一个上传和下载。一旦你的客户端,你的slave比较多了,其实他们做同步的时候,其实就会一直在使用,一直在占用我们的一个内网的网络的带宽。很显然这样子就不太好,因为你的slave实在是太多了。

所以呢一般来说我们要使用主从,我们使用一主二从,使用两个就可以了。这个就相当于是我们在古代的时候娶妻的一个道理,就说你娶老婆,你娶了多个老婆,可能你会忙不过来。你只有一个老婆,两个老婆,还可以就像韦小宝样,就是说你老婆太多了,肯定会忙不过来嘛。

随后我们可以再来看一下我们下一种模式,这种模式其实是一种树状的模式,可以看得出来。在我们这里面就是包含了两个主从。
一个组成是我们的一个左侧这一块,另外一部分是右侧这一块master和slave two,另外是slave two和2-1和2-2这样子做的一个目的其实就相当于是我们第一部分的一个组成。

它其实可能会有一个同步的压力。有了这样的压力之后,他会把同步的压力交给我们的第二个主从,让他去做到一个相应的分摊。
这种模式,其实我们又可以称之为是一个树状,对?

或者说其实他们又相当于是一种祖孙三代,就是爷爷辈、父亲辈和儿子辈,祖孙三代,子子孙孙无穷尽远。
这样子就能够为我们的一个整个压力做到一个降低。这种模式,其实呢在企业里用的也不会很多,用的最多最常见的还是一个一主二从。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Escape2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值