一文吃透 Redis 所有核心知识点!【高可用篇】(ssrr节点)

一文吃透 Redis 所有核心知识点!【高可用篇】(ssrr节点) 高可用有两个含义:一是数据尽量不丢失,二是服务尽可能提供服务。AOF和RDB保证了数据持久化尽量不丢失,而主从复制就是增加副本,一

一文吃透 Redis 所有核心知识点!【高可用篇】(ssrr节点)

高可用有两个含义:一是数据尽量不丢失,二是服务尽可能提供服务。AOF和RDB保证了数据持久化尽量不丢失,而主从复制就是增加副本,一份数据保存到多个实例上。即使有一个实例宕机,其他实例依然可以提供服务。

本篇主要带大家全方位吃透 Redis 高可用技术解决方案之一主从复制架构。

核心知识点

1

开篇寄语

问题 = 机会。遇到问题的时候,内心其实是开心的,越大的问题意味着越大的机会。

任何事情都是有代价的,有得必有失,有失必有得,所以不必计较很多东西,我们只要想清楚自己要做什么,并且想清楚自己愿意为之付出什么代价,然后就放手去做吧!

2

主从复制概述

有了 RDB 和 AOF 再也不怕宕机丢失数据了,但是 Redis 实例宕机了怎么实现高可用呢?

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

前者称为主节点 (master),后者称为从节点 (slave);数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台 Redis 服务器都是主节点;且一个主节点可以有多个从节点 (或没有从节点),但一个从节点只能有一个主节点。

主从之间的数据如何保证一致性呢?

为了保证副本数据的一致性,主从架构采用了读写分离的方式。

读操作:主、从库都可以执行; 写操作:主库先执行,之后将写操作同步到从库;

为何要采用读写分离的方式?

我们可以假设主从库都可以执行写指令,假如对同一份数据分别修改了多次,每次修改发送到不同的主从实例上,就导致是实例的副本数据不一致了。

如果为了保证数据一致,Redis 需要加锁,协调多个实例的修改,Redis 自然不会这么干!

主从复制还有其他作用么?

故障恢复:当主节点宕机,其他节点依然可以提供服务; 负载均衡:Master 节点提供写服务,Slave 节点提供读服务,分担压力; 高可用基石:是哨兵和 cluster 实施的基础,是高可用的基石。

3

搭建主从复制

主从复制的开启,完全是在从节点发起的,不需要我们在主节点做任何事情。

怎么搭建主从复制架构呀?

可以通过 replicaof(Redis 5.0 之前使用 slaveof)命令形成主库和从库的关系。

在从节点开启主从复制,有 3 种方式:

配置文件 在从服务器的配置文件中加入 replicaof<masterip> <masterport> 启动命令 redis-server 启动命令后面加入 replicaof <masterip><masterport> 客户端命令 启动多个 Redis 实例后,直接通过客户端执行命令: replicaof <masterip> <masterport> 则该 Redis 实例成为从节点。

4

主从复制原理

主从库模式一旦采用了读写分离,所有数据的写操作只会在主库上进行,不用协调三个实例。 主库有了最新的数据后,会同步给从库,这样,主从库的数据就是一致的。

主从库同步是如何完成的呢?主库数据是一次性传给从库,还是分批同步?正常运行中又怎么同步呢?要是主从库间的网络断连了,重新连接后数据还能保持一致吗?

5

主从应用问题

5.1 数据过期问题

主从复制的场景下,从节点会删除过期数据么?

为了主从节点的数据一致性,从节点不会主动删除数据。我们知道 Redis 有两种删除策略:

惰性删除:当客户端查询对应的数据时,Redis 判断该数据是否过期,过期则删除。 定期删除:Redis 通过定时任务删除过期数据。

那客户端通过从节点读取数据会不会读取到过期数据?

Redis 3.2 开始,通过从节点读取数据时,先判断数据是否已过期。如果过期则不返回客户端,并且删除数据。

5.2 单机内存大小限制

如果 Redis 单机内存达到 10GB,一个从节点的同步时间在几分钟的级别;如果从节点较多,恢复的速度会更慢。如果系统的读负载很高,而这段时间从节点无法提供服务,会对系统造成很大的压力。

如果数据量过大,全量复制阶段主节点 fork + 保存 RDB 文件耗时过大,从节点长时间接收不到数据触发超时,主从节点的数据同步同样可能陷入全量复制->超时导致复制中断->重连->全量复制->超时导致复制中断……的循环。

此外,主节点单机内存除了绝对量不能太大,其占用主机内存的比例也不应过大:最好只使用 50% – 65% 的内存,留下 30%-45% 的内存用于执行 bgsave 命令和创建复制缓冲区等。

6

总结

1.主从复制的作用:AOF 和 RDB 二进制文件保证了宕机快速恢复数据,尽可能的防止丢失数据。但是宕机后依然无法提供服务,所以便演化出主从架构、读写分离。

2.主从复制原理:连接建立阶段、数据同步阶段、命令传播阶段;数据同步阶段又分为 全量复制和部分复制;命令传播阶段主从节点之间有 PING 和 REPLCONF ACK 命令互相进行心跳检测。

3.主从复制虽然解决或缓解了数据冗余、故障恢复、读负载均衡等问题,但其缺陷仍很明显:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制;这些问题的解决,需要哨兵和集群的帮助,我将在后面的文章中介绍,欢迎关注。

为了避免权属纠纷,特做如下说明:本站内容作品来自用户分享及互联网,仅供参考,无法核实真实出处,并不代表本网站赞同其观点和对其真实性负责,本网站仅提供信息存储空间服务,我们致力于保护作者版权,如果发现本站有涉嫌侵权的内容,欢迎发送邮件至youxuanhao@qq.com 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

原文标题:一文吃透 Redis 所有核心知识点!【高可用篇】(ssrr节点)

Like (0)
Previous 2024年8月6日 上午9:10
Next 2024年8月6日 上午9:14

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:youxuanhao@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信