简单聊下Redis的主从复制和哨兵机制以及集群(面试题)

ChatGPT的简答:

  • Redis的主从复制(Master-Slave Replication)是指将一个Redis服务器的数据复制到其他Redis服务器的过程,其中一个服务器作为主节点(Master),而其他服务器作为从节点(Slave)。主节点负责接收写操作并将数据同步到从节点,从节点负责接收主节点的同步数据并提供读服务。主从复制可以提升系统的性能和可靠性,实现数据的备份和故障恢复。

  • Redis的哨兵机制(Redis Sentinel)是一种用于监控和管理Redis实例的分布式系统。哨兵系统由多个独立的哨兵节点组成,它们能够监控主节点和从节点的健康状况,并在主节点宕机或出现其他故障时自动进行故障转移。哨兵机制提供了自动发现、故障检测、故障转移和选主等功能,保证了Redis系统的高可用性。

  • Redis的集群(Redis Cluster)是一种分布式解决方案,用于实现高可用和数据分片。集群将数据分散存储在多个Redis节点上,并使用一致性哈希算法进行数据分片。集群中的每个节点都是独立的,它们通过相互通信进行数据同步和故障转移,实现了数据的高可用性和负载均衡。

通过主从复制和哨兵机制,可以实现Redis的高可用性和故障恢复。而Redis集群则提供了分布式存储和负载均衡的能力,适用于大规模数据存储和高并发访问的场景。根据实际需求,在Redis中选择合适的架构和部署方案,可以满足不同的业务需求和系统要求。


为什么要用集群?

在了解Redis集群之前,我们先来了解Redis的主从复制和哨兵机制。

Redis的主从复制主要有两个作用:
  • 读写分离,性能扩展,降低主服务器的压力
  • 容灾,快速恢复,主机挂掉时,从机变为主机
哨兵机制:
  • Redis 主从模式不具备自动容错和恢复功能,如果主节点宕机,Redis 集群将无法工作,此时需要人为干预,将从节点提升为主节点。
  • 哨兵机制作用主要是监控主从节点,当主节点挂掉,通过内部投票机制,从 从节点当中选出一个主节点,这样可以避免人工成本。

虽然主从+哨兵采用了多节点,但是他们存在的目的主要是解决容灾问题,而并非性能问题。

那目前Redis性能存在什么问题?
  • Redis 内存太大会导致 rdb文件过大,进一步导致主从同步时全量同步时间过长,在实例重启恢复时也会消耗很长的数据加载时间,特别是在云环境下,单个实例内存往往都是受限的。
  • 单个 Redis 实例只能利用单个核心,这单个核心要完成海量数据的存取和管理工作压力会非常大。
  • 单台redis内存容量限制,如何进行扩容?继续加内存、加硬件么?
互联网分布式架构设计,提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。
  • 垂直扩展:提升单机处理能力。增强单机硬件性能,例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G;

  • 水平扩展:只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的,如何在架构各层进行可水平扩展的设计,以及互联网公司架构各层常见的水平扩展实践,是本文重点讨论的内容。

在互联网业务发展非常迅猛的早期,如果预算不是问题,强烈建议使用“增强单机硬件性能”的方式提升系统并发能力,因为这个阶段,公司的战略往往是发展业务抢时间,而“增强单机硬件性能”往往是最快的方法。

单机性能总是有极限的。所以互联网分布式架构设计高并发终极解决方案还是水平扩展。

Redis性能问题如何解决?

正是在这样的大数据高并发的需求之下,Redis 集群方案应运而生。redis集群是对redis的水平扩容,即启动N个redis节点,将整个数据分布存储在这个N个节点中,每个节点存储总数据的1/N。

如下图:由3台master和3台slave组成的redis集群,每台master承接客户端三分之一请求和写入的数据,当master挂掉后,slave会自动替代master,做到高可用。

在这里插入图片描述


集群的介绍

为什么需要集群呢?

在之前的哨兵当中,一旦Main挂掉了,就势必会导致一段时间内的数据写不进去了,当并发量很大的时候这势必是一个比较大的问题

集群就说为了解决这个问题而诞生的。

在这里插入图片描述

什么是集群?
  • 由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。

  • Redis集群是一个提供在多个Redis节点间共享数据的程序集

  • Redis集群可以支持多个Master

在这里插入图片描述

集群能干什么呢?
  • Redis集群支持多个Master,每个Master又可以挂载多个Slave
    • 读写分离
    • 支持海量数据的高可用
    • 支持海量数据的读写存储操作
  • 由于Cluster自带Sentinel的故障转移机制,内置了高可用的支持,无需再去使用哨兵功能
  • 客户端和Redis的节点连接,不再需要连接集群中所有节点,只需连接集群中的任意一个可用节点即可(一个有所有都有了
  • 槽位slot负责分配到各个物理服务节点,由对应的集群来负责维护节点、插槽和数据之间的关系

集群的实现

slot 槽位映射的三种算法

1、哈希取余分区(小厂)
2、一致性哈希(中厂)
3、哈希槽分区

关于集群的算法之分片&槽位slot详解参考:
集群的算法之分片&slot槽位、slot 槽位映射的三种算法

实现数据分片的三种方案
  1. 客户端分片:客户端通过固定的Hash算法,针对不同的key计算对应的Hash值,然后对不同的Redis节点进行读写。说白了就是自己实现分片算法。这样对于程序代码侵入性太强,一般也很少有人会这么搞。
  2. 代理分片:理解为业务只连一个代理应用,代理应用后面会控制连接哪些实例。对于代理现在已经有两个现成可使用的,分别是Twemproxy、Codis。
  3. Redis Cluster:Redis3.*自带的应用。Redis Cluster将所有Key映射到16384个Slot中,集群中每个Redis实例负责一部分,业务程序通过集成的Redis Cluster客户端进行操作。客户端可以向任一实例发出请求,如果所需数据不在该实例中,则该实例引导客户端自动去对应实例读写数据。

在这里插入图片描述

在早期搭建集群很多都是采用代理分片,因为当时redis cluster发布得比较晚(2015年才发布正式版 ),各大厂等不及了,陆陆续续开发了自己的redis数据分片集群模式,比如:Twemproxy、Codis等。都属于当时的产物,现在codis已经彻底不更新了,而Twemproxy更新速度非常缓慢。所以基本上现在搭建集群都是使用官方的Redis Cluster!

关于集群之数据分片的三种方案实现详解参考:
Redis 集群方案应该怎么做?都有哪些方案?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/106134.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

行业追踪,2023-10-26

自动复盘 2023-10-26 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

【Note详细图解】中缀表达式如何转为后缀表达式?数据结构

中缀表达式 中缀表达式(中缀记法)是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3 4),中缀表达式是人们常用的算术表示方法。 前缀或后缀记法不同的是&#xf…

HackTheBox-Starting Point--Tier 1---Sequel

文章目录 一 题目二 实验过程 一 题目 Tags Vulnerability Assessment、Databases、MySQL、SQL、Reconnaissance、Weak Credentials译文:漏洞评估、数据库、MYSQL、SQL、侦察、凭证薄弱Connect To attack the target machine, you must be on the same network.C…

机架式服务器介绍

大家都知道服务器分为机架式服务器、刀片式服务器、塔式服务器三类,今天小编就分别讲一讲这三种服务器,第一篇先来讲一讲机架式服务器的介绍。 机架式服务器定义:机架式服务器是安装在标准机柜中的服务器,一般采用19英寸的标准尺寸…

Spring Cloud之微服务

目录 微服务 微服务架构 微服务架构与单体架构 特点 框架 总结 SpringCloud 常用组件 与SpringBoot关系 版本 微服务 微服务:从字面上理解即:微小的服务; 微小:微服务体积小,复杂度低,一个微服…

python读取Excel到mysql

常见问题: 1.数据库密码有特殊字符 使用urllib.parse.quote_plus 编译密码 mysql_engine create_engine((f"mysqlpymysql://root:%s10.0.0.2:3306/mydb")%urllib.parse.quote_plus("passaaaa")) 2.设置字段类型 设置特定类型,和指…

Python第三方库 - Flask(python web框架)

1 Flask 1.1 认识Flask Web Application Framework( Web 应用程序框架)或简单的 Web Framework( Web 框架)表示一个库和模块的集合,使 Web 应用程序开发人员能够编写应用程序,而不必担心协议,线…

ElasticSearch中关于Nasted嵌套查询的介绍:生动案例,通俗易懂,彻底吸收

题注:随着对ES接触的越来越深入,发现此前了解的ES知识点有点单薄,特此寻来ES知识点汇总成的一个思维导图,全面了解自己掌握了哪些,未掌握哪些。此外,作者斌并没有足够的精力学习ES全部的知识点,…

uniapp vue2、vue3 页面模板代码块设置

本文分享 uniapp vue2、vue3 页面模板代码块设置 设置路径 HBuilder X -> 工具 -> 代码块设置 -> vue代码块 -> 自定义代码块 如上图操作后在打开的 vue.json 文件的右侧“自定义代码块”中复制如下代码(可全选替换也可添加到代码中) 示…

HarmonyOS 音频开发指导:使用 OpenSL ES 开发音频播放功能

OpenSL ES 全称为 Open Sound Library for Embedded Systems,是一个嵌入式、跨平台、免费的音频处理库。为嵌入式移动多媒体设备上的应用开发者提供标准化、高性能、低延迟的 API。HarmonyOS 的 Native API 基于Khronos Group开发的OpenSL ES 1.0.1 API 规范实现&am…

buuctf_练[CISCN2019 华东南赛区]Web4

[CISCN2019 华东南赛区]Web4 文章目录 [CISCN2019 华东南赛区]Web4掌握知识解题思路代码分析正式解题 关键paylaod 掌握知识 ​ 根据url地址传参结构来判断php后端还是python后端;uuid.getnode()函数的了解,可以返回主机MAC地址十六进制;pyt…

记录锁,间隙锁,临键锁还在傻傻分不清楚?一招教你直达行级锁本质

引入记录锁,间隙锁,临键锁的目的是为了干嘛?是为了解决幻读问题,也就是防止一个事务A在查询的时候,另一个事务B在它查询的区间内插入,删除,修改数据,导致事务A前后查询到的行数不一致…

vue+golang上传微信头像

<button class"avatar" open-type"chooseAvatar" chooseavatar"onChooseAvatar"><image :src"avatarUrl" class"avatar-img"></image></button> // 微信头像修改onChooseAvatar(e) {this.uploadFil…

有用过成绩查询系统的老师吗?

是不是有时候觉得手动查询成绩是一件超级繁琐的事情&#xff1f;有了这个成绩查询系统&#xff0c;你就可以告别手动时代啦&#xff01; 先来了解一下什么是成绩查询系统。成绩查询系统是一种可以自动查询学生成绩的系统。通过这个系统&#xff0c;学生可以输入自己的学号或姓名…

【软件教程】如何用C++检查TCP或UDP端口是否被占用

一、检查步骤 使用socket函数创建socket_fd套接字。使用sockaddr_in结构体配置协议和端口号。使用bind函数尝试与端口进行绑定&#xff0c;成功返回0表示未被占用&#xff0c;失败返回-1表示已被占用。 二、CODE 其中port需要修改为想要检测的端口号&#xff0c;也可以将代码…

单元测试到底是什么?应该怎么做?

一、什么是单元测试&#xff1f; 单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围&#xff0c;并没有一个明确的标准&#xff0c;“单元”可以是一个函数、方法、类、功能模块或者子系统。 …

ios ipa包上传需要什么工具

​ 目录 前言 一、IPA包的原理 二、IPA包上传的步骤 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包IPA包 6.上传IPA包 三、总结 前言 iOS IPA包是iOS应用程序的安装包&#xff0c;可以通过iTunes或者其他第三方应用商店安装到iOS设备上。…

手把手教你安装配置『Oracle Database 19c』

前言 本文将会讲解如何在 Windows 系统上安装 Oracle Database 19c 数据库&#xff0c;适合初学者学习 Oracle 快速入门和实践练习&#xff0c;比较方便快捷 官方安装文档&#xff1a;Preinstallation Considerations for Installing Oracle Database 对于企业级的数据库&am…

网络协议--UDP:用户数据报协议

11.1 引言 UDP是一个简单的面向数据报的运输层协议&#xff1a;进程的每个输出操作都正好产生一个UDP数据报&#xff0c;并组装成一份待发送的IP数据报。这与面向流字符的协议不同&#xff0c;如TCP&#xff0c;应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联…

提高数据研究效率,优化成果分享及复用|ModelWhale 版本更新

秋高气爽、金桂飘香&#xff0c;十月末&#xff0c;我们又迎来了 ModelWhale 新一轮的版本更新。 本次更新中&#xff0c;ModelWhale 主要进行了以下功能迭代&#xff1a; 新增 添加模型服务到知识库&#xff08;专业版✓ 团队版✓&#xff09; 新增 自动生成数据引用信息&am…