当前位置: 首页 > 网络应用技术

一篇文章带您充分了解Redis

时间:2023-03-05 19:35:31 网络应用技术

  主和从副本是REDIS分发的基石,它也是高可用redis的保证,REDIS中,复制的服务器称为主服务器(Master),并且复制到主服务器的服务器称为服务器(从)。

  主和从副本的配置非常简单,有三种方法(其中哪种IP-Main Server IP地址/Port-Main Server Redis服务端口):

  REDIS的主要复制机制不像开始时的6.x版本那样完整,而是从版本的版本中进行迭代。它通常通过三个版本的迭代版本:

  随着版本的增长,复制机制的重新副本逐渐改善。但是他们的本质是两个操作:同步(同步)和命令传播(命令传播)::

  2.1.1同步2.8版,从服务器从服务器到主服务器的同步,Sync命令从服务器完成:

  2.1.2命令传播同步工作完成后,主和关注需要通过命令提出数据状态的一致性。

  如下图所示,在服务器之间完成当前工作后,主服务将接收客户端的DEL K6指令并删除K6。目前,服务器仍然有K6。主要数据状态不一致。为了维持主服务器状态的一致性,主服务器将传播导致数据状态更改为服务器执行的命令。当服务器也执行相同的命令时,主服务器和从服务器之间的数据状态将保持一致。

  2.1.3缺陷看不到先前版本的前版本的前版本的耶和华的缺陷和Sheng的缺陷。这是因为我们没有考虑过网络波动的状况。理解分布的兄弟肯定会听到上限理论。上限理论是分布式存储系统的基石。在CAP理论中,必须存在P(分区网络分区),并且REDIS的复制也不例外。当主服务器之间发生网络故障时,它无法在一段时间内在服务器和主服务器之间进行通信。当主服务器从服务器重新连接时,如果数据状态在此期间发生变化,则将在服务器之间发生状态。

  在redis 2.8之前的预复制版本中,解决此数据状态的不一致的方法将通过重新发送Sync命令来实现。尽管同步可以确保主要数据状态是一致的,但很明显,SYNC确定是一个非常消耗的资源操作。

  同步命令执行,主服务器需要占用资源:

  从上面的三个点来看,可以看出,同步命令不仅会导致主服务器的响应能力下降,而且还会导致服务器拒绝在此期间从外部提供服务。

  2.2.1先前版本的2.8的改进点,redis在2.8之后改进了服务器之后的数据状态。改进的方向是减少完整同步同步的发生,并尽可能多地使用部分重新同步。,psync命令取代了同步操作的同步命令。Psync命令具有全量同步和增量同步的函数:

  2.2.2如何实现Psync以实现三个辅助参数,以在连续连接服务器断开连接后实现增量同步:

  2.2.2.1副本偏移将维护主服务器和服务器中偏移的副本

  正常同步情况如下:

  通过比较主电源和服务器之间的复制和偏移是否相等,我们可以知道主电源和服务器之间的数据状态是否保持一致。

  假设此时A/B正常传播,则C与服务器断开了连接,则会发生以下情况:

  显然,在复制偏差之后,在断开服务器C之后,主服务器只需要从服务器发送100个字节数据。但是主服务器如何了解服务器中的这些数据?

  2.2.2.2复制积压缓冲区复制-up积压缓冲区是固定的长度队列,默认值为1MB大小。当主服务器的数据状态更改时,主服务器将数据将数据同步到服务器,而服务器将存放到服务器中。积压缓冲区。

  为了匹配偏移量,它不仅存储了数据内容,还记录了与每个字节相对应的偏移量:

  当从服务器重复使用服务器时,服务器将通过PSYNC命令通过服务器发送到主服务器,并且主服务器可以通过此偏移量或完整数量来判断增量传输。

  积压缓冲区的重新副本的大小为1MB。如果需要自定义,应该如何设置?

  显然,我们希望尽可能多地使用增量同步,但是我们不希望缓冲区占用过多的内存空间。连接时间t,在服务断开连接后,REDIS主服务器每秒收到。

  s = 2 m t

  请注意,这里有一倍的空间,以确保大多数突破可以通过增量同步。

  2.2.2.3服务器运行ID,查看是否可以实现此功能,可以实现增量同步。您想运行什么?实际上,还有另一种不考虑的情况。当主服务器关闭时,从服务器中选举了某个站,以成为新的主服务器。在这种情况下,我们可以通过运行ID来区分。

  2.2.3完整的Psync完整Psync进程非常复杂,并且已在2.8-4.0 Master的复制版本中进行完善。Psync命令发送的参数如下:

  psync

  当服务器没有复制任何主服务器(不是主服务器的第一次复制,因为主服务器可能会更改,而是第一次从服务器上进行更改),服务器将从服务器发送:

  psync?-1

  完整的Psync过程在一起如下所示:

  Redis 2.8-4.0版本中仍然有一些改进的空间。当主服务器开关时,可以将其与增加同步?

  Psync2.0放弃了服务器的运行ID,然后使用Replid和replid2。Replid存储了当前主服务器的运行ID。Replid2保存了最后一个主服务器运行。

  通过Replid和replid2,当主服务器切换时,我们可以解决增量同步的问题: