发布时间:2024-10-13 16:01
高可用有两个含义:一是数据尽量不丢失,二是保证服务尽可能可用。 AOF 和 RDB 数据持久化保证了数据尽量不丢失,那么多节点来保证服务尽可能提供服务。
一般在实际生产中,服务不会部署成单节点,主要是有三个原因.
为了实现高可用,通常的做法是,将数据库复制多个副本以部署在不同的服务器上,其中一台挂了也可以继续提供服务。Redis 实现高可用有三种部署模式:主从模式,哨兵模式,
集群模式。
既然一台服务宕机了会导致提供不可用,那是不是可以考虑多台就可以解决了。Redis 提供了主从模式。通过主从复制,将数据冗余一份复制到其他 Redis 服务器。
Master节点,负责读写操作,Slave节点,只负责读操作。
主从模式采用了读写分离,所有数据的写操作只会在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部分可以实现部分同步