Redis的集群模式:主从 哨兵 分片集群

news2024/11/27 1:41:13
  • 基于Redis集群解决单机Redis存在的问题,在之前学Redis一直都是单节点部署

单机或单节点Redis存在的四大问题:

  • 数据丢失问题:Redis是内存存储,服务重启可能会丢失数据  =>  利用Redis数据持久化的功能将数据写入磁盘
  • 并发能力问题:单节点Redis并发能力虽然不错,但也无法满足如618这样的高并发场景  =>  搭建一主多从集群,实现读写分离
  • 单点故障 - 故障恢复问题:如果Redis宕机,则服务不可用,需要一种自动的故障恢复手段  =>  利用Redis哨兵,实现健康检测和自动故障恢复
  • 存储能力问题:Redis基于内存存储,单节点能存储的数据量难以满足海量数据要求  =>  搭建分片集群,利用插槽机制实现动态扩容,从理论上来讲,它的存储能力是没有上限的

1. Redis主从

  • 搭建主从架构
  • 主从数据同步原理

单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。

1.1.主从集群结构

  • Redis的集群往往都是主从集群,它往往会有一个Master主节点,多个Slave / Replica从节点。 

下图就是一个简单的Redis主从集群结构:

如图所示,集群中有一个Master主节点、两个Slave从节点(现在叫Replica) =>  起码要包含三个节点,要有三个Redis实例,一主两从

  • 在Redis 5.0以前,从节点是叫Slave的,后来改名叫Replica  =>  都是代表从节点 

当我们通过Redis的Java客户端访问主从集群时,应该做好路由:

  • 如果是写操作,应该访问Master主节点,Master主节点会自动将数据同步给两个Slave从节点

  • 如果是读操作,建议访问各个Slave从节点,从而分担并发压力

Master主节点可以执行set命令(写操作),Replica从节点只能执行get命令(读操作) 。

为什么Redis要做成这种主从的集群,而不是传统的负载均衡集群呢?

  • 这是因为Redis应用当中大多数都是读多写少的场景,也就是查询比较多,而增删改比较少,既然如此,我们更多要应对的是读的压力,那我做了主从以后,我们还可以去做读写分离, 也就是说,我在执行写操作时,我让它去访问Master主节点,但如果执行的是读操作,那我就把你的请求分发到各个Slave或Replica从节点,这样我们一主多从,多个从节点共同承担读的请求,我们的读并发能力就可以得到一个比较大的提升,所以这就是为什么要搭建主从集群的一个原因了。
  • 但是做主从集群,必须保证一点,就是客户端在读取的时候,不管访问到哪个Slave从节点,都必须要保证拿到相同的结果     =>    如何保证?  需要让Master主节点把它上面的数据同步给每一个Slave从节点,这就是Redis主从架构的一个基本模式了

1.2 搭建主从集群 

1. 准备实例和配置  
  • 我们会在同一台虚拟机中开启3个Redis实例,模拟主从集群。  
  • 我们会在同一个虚拟机中利用3个Docker容器来搭建主从集群。

  • 要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。

  • 在同一个机器下还要修改每个实例的端口

2. 启动 & 开启主从关系

分别启动多个Redis实例虽然我们启动了3个Redis实例,但是它们并没有形成主从关系,我们需要通过命令来配置主从关系:

# Redis5.0以前
slaveof <masterip> <masterport>
# Redis5.0以后
replicaof <masterip> <masterport>
有临时和永久两种模式:
  • 永久生效:在redis.conf文件中利用slaveof命令指定Master主节点的IP和端口

  • 临时生效:直接利用redis-cli控制台输入slaveof命令,指定Master主节点的IP和端口

INFO replication:查看集群的状态信息

这样,就可以实现读写分离了,如果在Slave从节点上执行set写操作,会报错:

假设有A、B两个Redis实例,如何让B作为A的Slave从节点?

  • 在B节点执行命令:slaveof       A的IP     A的Port端口 

1.3 数据同步原理 

 

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

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

相关文章

机器学习的分类与经典算法

机器学习算法按照学习方式分类&#xff0c;可以分为有监督学习&#xff08;Supervised Learning&#xff09;、无监督学习&#xff08;Unsupervised Learning&#xff09;、半监督学习&#xff08;Semi-supervised Learning&#xff09;、强化学习&#xff08;Reinforcement Le…

【LMM 004】LLaVA-RLHF:用事实增强的 RLHF 对齐大型多模态模型

论文标题&#xff1a;Aligning Large Multimodal Models with Factually Augmented RLHF 论文作者&#xff1a;Zhiqing Sun, Sheng Shen, Shengcao Cao, Haotian Liu, Chunyuan Li, Yikang Shen, Chuang Gan, Liang-Yan Gui, Yu-Xiong Wang, Yiming Yang, Kurt Keutzer, Trevor…

树莓派4B-Python使用PyCharm的SSH协议在电脑上远程编辑程序

目录 前言一、pycharm的选择二、添加SSH的解释器使用总结 前言 树莓派的性能始终有限&#xff0c;不好安装与使用高级一点的程序编辑器&#xff0c;如果只用thonny的话&#xff0c;本人用得不习惯&#xff0c;还不如PyCharm&#xff0c;所以想着能不能用电脑中的pycharm来编写…

软件测试面试总结,备战金三银四

测试技术面试题 1、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f; 参考答案&#xff1a; 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行&#xff0c;即是通常说的软件的可移植性。 兼容的类型&#xff0c;如果细分的话&#x…

【现代信息检索】国科大何苯老师现代信息检索课程作业 —— 第三次作业

1 docID判断 1判断 2100200311411510610710810901100111111211 表 1 评判情况 表 1 1 1 中是两个判定人员基于某个信息需求对 12 12 12 个文档进行相关性判定的结果&#xff08;0 不相关&#xff0c;1 相关&#xff09;。假定我们开发了一个 IR 系统&#xff0c;针对该…

【C语言】大小端字节序详解

文章目录 前言引入大小端字节序大小端字节序的定义为什么会出现大小端之分示例&#xff1a;设计一个小程序来判断当前机器的字节序改进写法&#xff08;利用联合体成员共用同一块内存空间的特点&#xff09; 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&…

假两件风衣外套,你喜欢吗?

这款假两件设计的连帽风衣外套,,姐妹们喜欢吗? 宽松版型对身材包容性很强&#xff0c;韩系慵懒风颜色很舒服 时尚百搭怎么穿都好看系列 做了腰部可调节抽绳&#xff0c;想要修身一点的可以自己调节哈 袖口处也做了金属按扣调节&#xff0c;防风保暖 这件风衣也很好搭配&a…

【C++】命名空间、输入输出、缺省参数和函数重载详解

文章目录 前言命名空间命名空间的定义命名空间的使用 C输入输出缺省参数缺省参数定义缺省参数分类 函数重载函数重载的概念函数名修饰规则extern "C"的使用 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; C 是一门强大而灵活的编程语言…

linux释放交换空间-Swap

确保剩余内存比swap内存空间大&#xff0c;再执行以下操作&#xff0c;否则会宕机&#xff01; 查看swap分区 swapon -s 会查看到你的swap分区位置 停止swap分区 停止swap分区是将swap内存释放到实际内存中 swapoff /dev/dm-1开启swap分区 swap分区内存成功释放到实际内…

ant-design-vue的form表单全局禁用不生效

文章目录 一、问题二、解决2.1、4.0之前的版本2.2、4.0开始的版本 三、最后 一、问题 ​ 实际使用ant-design-vue在开发表单的时候或许会遇到编辑与查看的需求&#xff0c;但是查看的时候表单不允许编辑&#xff0c;ant-design-vue的官方是没有像element一样提供全局disabled属…

message: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogra

第一步&#xff1a;修改 project.config.json 文件 "packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./miniprogram/"}], "packNpmManually": true 第二步&#xff1a;…

Linux--批量自动装机

实验环境 随着某公司业务不断发展&#xff0c;服务器主机的数量也迅速增长&#xff0c;对于功能变更或新采购的服务器&#xff0c; 需要重新安装CentOS7操作系统&#xff0c;为了提高服务器装机效率&#xff0c;要求基于PXE网络实现全自动无人值 守批量安装。 需求描述 > 服…

[蓝桥 2023] 位乘积计数

问题描述 给定两个正整数 n 和 m&#xff0c;请你计算出&#xff0c;从 1到 n 的所有整数中&#xff0c;满足每一位上的数字乘积小于等于 m 的数字的个数。 例如&#xff0c;当 n12&#xff0c;m3 时&#xff0c;满足条件的数字有 1,2,3,10,11,12 共 6 个。 输入格式 输出格…

TCP中的三次握手和四次挥手

TCP中的连接和断开可以说是在面试中经常被问到的问题之一&#xff0c;正好有空就总结一下&#xff0c;首先回顾一下TCP的相关知识点 1. TCP的基础知识 1.1 TCP的基本概念 我们知道TCP是运输层的面向连接的可靠的传输协议。面向连接的&#xff0c;指的就是在两个进程发送数据…

Pandas教程(四)—— 分层索引及数据联合

1.分层索引 分层索引就是在一个轴上拥有多个&#xff08;两个及以上&#xff09;索引级别&#xff0c;能以低维度形式处理高维度数据。 行索引有两层 1.1 分层索引的创建 1.1.1 方式一&#xff1a;直接设置 1&#xff09;在创建series、dataframe或读取文件时时&#xff0c;行…

《深入理解JAVA虚拟机笔记》垃圾回收器

JVM 判定 Java 对象是否为垃圾的方法 引用计数算法 很多教科书判断对象是否存活的算法是这样的: 在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1b;任何时刻计数器为…

新产品推广选品牌外包广州迅腾文化传播多渠道传播能力

在当今激烈的市场竞争中&#xff0c;新产品推广已成为企业发展的关键。选择具备多渠道传播能力的品牌外包服务提供商&#xff0c;有助于快速提升品牌知名度和市场占有率。作为行业领先者&#xff0c;迅腾文化凭借卓越的多渠道传播能力&#xff0c;成为企业新产品推广的理想合作…

GDPR对邮件营销的影响:合规要求与应对策略

在当今数字化的时代&#xff0c;电子邮件营销已成为企业与顾客联系的重要渠道之一。然而&#xff0c;随着全球数据保护法规的出台&#xff0c;特别是欧盟的GDPR&#xff08;通用数据保护条例&#xff09;&#xff0c;企业在进行邮件营销时需要更加关注隐私政策和用户数据保护。…

Big-endian与Little-endian详尽说明

大端与小端存储详尽说明 大端与小端存储详尽说明 大端与小端存储详尽说明一. 什么是字节序二. 什么是大端存储模式三. 什么是小端存储模式四. 大小端各自的特点五. 为什么会有大小端模式之分六. 为什么要注意大小端问题六. 大小端判定程序七. 大端小端的转换1&#xff09;16位大…

2023年12月编程语言排行榜

TIOBE Index for December 2023 December Headline: C# on its way to become programming language of the year 2023 2023年12月的TIOBE指数&#xff1a;12月头条:c#将成为2023年最佳编程语言 Yes, I know, we have been here before. At the end of 2022, it looked like …