怎么实现Redis的高可用?(主从、哨兵、集群)

发布时间:2024-10-13 16:01

怎么实现Redis的高可用?(主从、哨兵、集群)_第1张图片

高可用有两个含义:一是数据尽量不丢失,二是保证服务尽可能可用。 AOF 和 RDB 数据持久化保证了数据尽量不丢失,那么多节点来保证服务尽可能提供服务。

一般在实际生产中,服务不会部署成单节点,主要是有三个原因.

  1. 容易出现单点故障,导致服务不可用
  2. 单节点处理所有的请求,吞吐量有限
  3. 单节点容量有限

为了实现高可用,通常的做法是,将数据库复制多个副本以部署在不同的服务器上,其中一台挂了也可以继续提供服务。Redis 实现高可用有三种部署模式:主从模式哨兵模式

集群模式

一、主从模式

既然一台服务宕机了会导致提供不可用,那是不是可以考虑多台就可以解决了。Redis 提供了主从模式。通过主从复制,将数据冗余一份复制到其他 Redis 服务器。

Master节点,负责读写操作,Slave节点,只负责读操作

1、主从复制原理

主从模式采用了读写分离,所有数据的写操作只会在Master库上进行,Master库有了最新的数据后,会同步给Slave库,这样,主从库的数据就是一致的。

这里要思考是主从库同步是如何完成的?Master库数据是一次性传给Slave库,还是分批同步的?正常运行中又怎么同步呢?要是主从库间的网络断连了,重新连接后需要再次全量同步还是只需部分同步呢?

主从复制包括全量复制,增量复制两种。redis2.8版本之后还支持部分同步。

(1) 全量同步

一般当Slave第一次启动连接Master,认为是第一次连接,就采用全量复制,全量复制流程如下:

怎么实现Redis的高可用?(主从、哨兵、集群)_第2张图片

完成上面几个步骤后就完成了Salve节点初始化的所有操作,Slave服务器此时可以接收来自用户的读请求。

redis2.8版本之后,已经使用psync来替代sync,因为sync命令非常消耗系统资源,而且不支持部分同步,psync的效率更高,支持部分同步,有关部分同步下面细说。

(2) 增量同步

Redis增量复制是指Slave初始化后开始正常工作时,Master服务器发生的写操作同步到Slave服务器的过程。

增量复制的过程主要是Master服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

(3) 部分同步

在redis 2.8版本之前,并不支持部分同步,当主从服务器之间的连接断掉之后,Master服务器和Slave服务器之间必须进行全量数据同步,此时Slave服务器会清空所有数据,

再次加载Master的RDB文件。但是从redis 2.8开始,即使主从连接中途断掉,也不一定需要进行全量同步,它可以支持部分同步,来提高效率。

它的工作原理大致是这样的:

通过这个图我们再来理解下 为什么2.8部分可以实现部分同步

  1. Slave节点根据当前状态,发送 psync 命令给 Master节点:
  • 如果Slave节点从未执行过 replicaof,则Slave节点发送 psync ? -1,向Master节点发送全量复制请求;
  • 如果Slave节点之前执行过 replicaof 则发送 psync , runID 是上次复制保存的Master节点 runID,offset 是上次复制截至时Slave节点保存的复制偏移量。

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号