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

本文详细介绍了Redis实现高可用的三种模式:主从模式、哨兵模式和集群模式。主从模式通过读写分离实现数据冗余,但故障切换需手动处理。哨兵模式通过自动故障转移提升可用性,但可能引发脑裂问题。Redis 3.0引入的Cluster集群模式采用数据分片,实现真正的分布式存储,解决了在线扩容问题,但增加了系统复杂性。
摘要由CSDN通过智能技术生成

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

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

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

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

集群模式

一、主从模式

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

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

1、主从复制原理

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

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

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

(1) 全量同步

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

完成上面几个步骤后就完成了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> <offset>, runID 是上次复制保存的Master节点 runID,offset 是上次复制截至时Slave节点保存的复制偏移量。
  1. Master节点根据接受到的psync命令和当前服务器状态,决定执行全量复制还是部分复制:
  • runID 与Slave节点发送的 runID 相同,且Slave节点发送的 slave_repl_offset 之后的数据在 rep
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值