Redis源码、面试指南(5)多机数据库、复制、哨兵、集群(上)

简介: Redis源码、面试指南(5)多机数据库、复制、哨兵、集群

五、多机数据库

这个部分主要介绍跟多级数据库有关的复制、集群、sentinel。

复制功能

源码参见:replication.c

在Redis中可以使用SLAVEOF或者设置slaveof选项,使得一个服务器去复制另一个服务器。这种情形就是我们熟知的主从结构,一般用作读写分离,主服务器是负责读/写,从服务器负责读见下图。

新旧版本的复制对比

在Redis2.8版本之后的复制功能效率更高,安全系数更好,新旧版本复制功能对比如下(请点击或下载查看大图):


其中,旧版本的同步操作如下图所示:

注:在主服务器进行BGSAVE和发送RDB文件的时候,会将所有写命令写入发送缓冲区,在传输完毕之后将所有写命令发送给从服务器。

一个展示命令传播的示例如下图所示:

新版复制功能的部分同步如下图所示:

新版复制功能调用流程图如下:


进一步解释新版复制功能实现部分重同步的原理:

·服务器ID:当从服务器对某一服务器进行了同步操作时,该ID被设置为主服务器的ID。这是为了在从服务器断线重连主服务器时,判断上次所连接的是否是原来的服务器!

·复制偏移量:类似于TCP的SEQ,主从服务器都维护了一个复制偏移量offset:当主服务器给从服务器发送**N个字节(而不是命令)**时,该offset+N;当从服务器接收N个字节时,该Offset+N;这是实现部分同步的关键:让主服务器知道从服务器还差哪些命令没有获取!

·复制积压缓冲区:是主服务器端的一个固定长度(可调整,默认1M)的先进先出队列。这也是部分同步的关键:在该队列中,维护了复制偏移量offset与每一条写命令的对应关系,见下图。

如果从服务器需要的复制命令在该队列中,那么执行部分重同步即可;如果不在···那就只能完全重同步了!

复制的全过程

·设置主服务器的地址端口

·建立套接字连接

·发送PING命令(检查主服务器状态)


·进行身份验证(若设置了masterauth)

·发送端口信息,即从服务器将自身端口发送给主服务器(主要是为了打印信息)

·同步操作(在这个时候两者互为客户端,才可以进行写命令的传输)

·命令传播

在该阶段,从服务器会默认1s的时间给主服务器发送命令 REPLCONF ACK ,这是一种心跳检测,主要是为了检查网络连接或是否有命令丢失。

哨兵Sentinel

源码参见:sentinel.c

介绍

sentinal,哨兵是Redis多机架构中高可用性非常重要的一个组件,主要功能如下:

(1)集群监控,负责监控redis master和slave进程是否正常工作(心跳检测);

(2)消息通知,如果某个redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员;

(3)故障转移,如果master node挂掉了,会自动转移到slave node上;

(4)配置中心,如果故障转移发生了,通知client客户端新的master地址;

哨兵本身也是分布式的,作为一个哨兵集群去运行,互相协同工作

(1)故障转移时,判断一个master node是宕机了,需要**大部分(超过一半)**的哨兵都同意才行,涉及到了分布式选举的问题;

(2)即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就很不稳定了;

下面几幅图展示sentinel系统是如何实现监视Redis服务器的:

初始状态如下:

主服务器下线:

执行故障转移:

原主服务器上线并降级



 Redis源码、面试指南(5)多机数据库、复制、哨兵、集群(下):https://developer.aliyun.com/article/1508249

相关文章
|
存储 缓存 NoSQL
Redis常见面试题全解析
Redis面试高频考点全解析:从过期删除、内存淘汰策略,到缓存雪崩、击穿、穿透及BigKey问题,深入原理与实战解决方案,助你轻松应对技术挑战,提升系统性能与稳定性。(238字)
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
976 2
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
1414 5
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
1219 6
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
531 5
|
存储 NoSQL 定位技术
Redis数据类型面试给分情况
Redis常见数据类型包括:string、hash、list、set、zset(有序集合)。此外还包含高级结构如bitmap、hyperloglog、geo。不同场景可选用合适类型,如库存用string,对象存hash,列表用list,去重场景用set,排行用zset,签到用bitmap,统计访问量用hyperloglog,地理位置用geo。
813 5
|
缓存 NoSQL Java
Java Redis 面试题集锦 常见高频面试题目及解析
本文总结了Redis在Java中的核心面试题,包括数据类型操作、单线程高性能原理、键过期策略及分布式锁实现等关键内容。通过Jedis代码示例展示了String、List等数据类型的操作方法,讲解了惰性删除和定期删除相结合的过期策略,并提供了Spring Boot配置Redis过期时间的方案。文章还探讨了缓存穿透、雪崩等问题解决方案,以及基于Redis的分布式锁实现,帮助开发者全面掌握Redis在Java应用中的实践要点。
984 6