简单聊下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 集群方案应该怎么做?都有哪些方案?

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python转yuyv422到jpg

import cv2 as cv import yuvio import os import cv2 as cv import numpy as np#参考:https://pypi.org/project/yuvio/yuv_frame yuvio.imread("my.yuv", 720, 640, yuyv422)y yuv_frame.y u yuv_frame.u v yuv_frame.vcv.imshow(y,y)reshaped_y y…

Docker操作总结

Docker安装 安装CentOS 7 VirtualBox安装CentOS 7,网络设置为桥接网卡,确保虚拟机能访问外网,且宿主机与虚拟机能相互ping通 安装docker yum update -yyum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager -…

加上boot程序,FreeRTOS就跑不起来了

一、问题描述 bootloader跳转到APP时,app执行完初始化程序后死机 二、分析问题 第一步,执行app时死机死到哪里?通过DEBUG调试发现死到hardfault_handler()函数中,硬件错误,导致硬件错误的原因一般都是中断异常引起的。…

【python入门】异常、文件操作

【大家好,我是爱干饭的猿,本文重点介绍python入门的异常、文件操作。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上一篇文章:《【python入门】函数&#xff…

Linux系统镜像备忘

阿里镜像源: ubuntu ubuntu-releases安装包下载_开源镜像站-阿里云 centos centos-stream安装包下载_开源镜像站-阿里云

李宇航

该篇文章仅用作能直接在百度搜索到我的csdn,进入我的主页,没有实际意义. 进入李宇航博客方法 通过百度搜索"李宇航" 链接: https://blog.csdn.net/llllyh812 1.电脑端进入方法 输入网址链接: https://blog.csdn.net/llllyh812 或者 进入csdn主页,搜索"李宇…

口袋参谋:实时监测竞争对手的流量来源!

​ 在竞争激烈的淘宝天猫上运营店铺,如果想快速了解竞争对手的销售情况。 则可以通过口袋参谋同类目竞店透视工具,来剖析对方的数据信息,全面了解竞争对手的营销策略。 口袋参谋【同类目竞店透视】功能: 支持一键透视任意竞品…

双指针解决数组问题(python)

1、快慢指针 快慢指针&#xff0c;常用于原地修改数组 删除有序数组中的重复项 def removeDup(nums):slow, fast 0, 1while fast < len(nums):if nums[slow] ! nums[fast]:slow 1nums[slow] nums[fast]fast 1return slow1# nums[:slow1]给定一个已排序的链表&#xff0…

redis的实际使用

Redis是一种内存数据库&#xff0c;常用于缓存、会话管理、消息队列等。在项目中合理使用Redis可以提高系统性能和可扩展性。以下是一些使用Redis的建议&#xff1a; 1. 缓存常用数据&#xff1a;将经常使用的数据缓存在Redis中&#xff0c;以减少数据库的读取次数&#xff0c…

Rockchip RK3399 - DRM crtc基础知识

一、LCD硬件原理 1.1 CRT介绍 CRT是阴极射线管(Cathode Ray Tube)的缩写,它是一种使用电子束在荧光屏上创建图像的显示设备。CRT显示器在过去很长一段时间内是主流的显示技术,现已被液晶显示屏或其他新兴技术所替代。 在CRT显示器中,扫描电子束从左到右、从上到下移动,照亮…

laravel 中 npm run 同时执行多个命令

在使用laravel 启动项目时 经常需要同时运行两个命令。 1.前端既是 npm run dev 2.后端php则是 php artisan serve 可以安装 使用 concurrently 进行并行启动 concurrently - npm npm install concurrently --save 之后修改 package.json 在 scripts 中增加 &#xff08;多条…

算法|每日一题|掷骰子等于目标和的方法数|动态规划

1155.掷骰子等于目标和的方法数 原题地址&#xff1a; 力扣每日一题&#xff1a;掷骰子等于目标和的方法数 这里有 n 个一样的骰子&#xff0c;每个骰子上都有 k 个面&#xff0c;分别标号为 1 到 k 。 给定三个整数 n , k 和 target &#xff0c;返回可能的方式(从总共 kn 种…

useLayoutEffect和useEffect的区别

使用方式 这两个函数的使用方式其实非常简单&#xff0c;他们都接受一个函数一个数组&#xff0c;只有在数组里面的值改变的情况下才会再次执行 effect。所以对于使用方式我就不过多介绍了&#xff0c;不清楚的可以先参考官网 。 差异 useEffect 是异步执行的&#xff0c;而…

一招解决“请在微信客户端中打开链接”

一招解决“请在微信客户端中打开链接”-遇见你与你分享 在浏览器访问网站&#xff0c;却提示“请在微信客户端打开链接”。虽然这个情况你可能从未遇到过&#xff0c;但对于爱折腾的小伙伴&#xff0c;确是一道拦路虎 其实解决办法很简单&#xff0c;就是新建一个UA&#xff1…

ubuntu vbox 5.2 资源 virtualbox-dkms

各种 linux 包 https://pkgs.org/search/?qpython3.6 配置 python 默认版本 查看已安装python $ u82:~/Py_demo$ ls /usr/bin/python* /usr/bin/python2 /usr/bin/python2.7 /usr/bin/python3 /usr/bin/python3.8设置默认版本 $ u82:~/Py_demo$ sudo update-alternatives…

产品使用说明书小程序开发制作方案

使用说明书小程序定位为一个用户友好、易于操作的指南工具。它旨在为用户提供清晰、简洁的设备使用说明&#xff0c;帮助他们更好地理解和使用各种智能设备。 一、使用说明书小程序可以在以下场景中使用&#xff1a; 购买新设备后&#xff0c;用户可以通过小程序快速了解设备的…

Ubuntu 22.04配置/etc/rc.local开机自启文件

1.查看系统版本 rootbogon-virtual-machine:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jammy rootbogon-virtual-machine:~ 2. 解决 /etc/rc.local 开机启动问题 看rc-loc…

BP神经网络

BP神经网络 B P BP BP神经网络1.激活函数常用的激活函数 2.神经网络结构符号约定 3.损失函数回归问题分类问题 4.反向传播求解梯度矩阵梯度下降法反向传播公式推导&#xff08;四个基础等式&#xff09;等式一 输出层误差等式二 隐藏层误差等式三 参数变化率等式四 参数更新 反…

linux重置root密码

重启Linux系统主机并出现引导界面时&#xff0c;按下键盘上的e键进入内核编辑界面 然后再lvrhel/swap 后面加上 rd.break 然后按下ctrlx组合键运行修改后的内核程序,大约30s过后&#xff0c;系统会进入紧急救援模式 然后依次输入以下命令&#xff1a; mount -o remount,rw …

UI 自动化测试框架:PO模式+数据驱动

1. PO 设计模式简介 什么是 PO 模式&#xff1f; PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类&#xff0c;并以页面为单位来写测试用例&#xff0c;实现页面对象和测试用例的分离。 PO 模式的设计思想与…