redis集群模式

集群模式

1.主从模式

一主多从模式。主节点可以负责:读操作,写操作。 从节点只能负责读操作,不能负责写操作。把读的压力从主节点分摊到从节点,以减少主节点的压力。

在这里插入图片描述

复制流程如下图,

在这里插入图片描述

从节点挂了?

从节点挂了在恢复,从上一次挂的缓冲区(backlog:默认1m)的偏移量位置进行断点续传。如果缓冲区偏移量没有,则全量复制。

主从复制风暴

多个从节点同时复制主节点导致主节点压力过大。

解决办法:从节点下面在分从节点

在这里插入图片描述

2.哨兵模式

哨兵模式基于主从复制,是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的。哨兵顾名思义,就是用来监控的,主要作用就是监控主从集群,自动切换主备,完成集群故障转移。

Redis哨兵高可用架构

当主节点挂了(半数哨兵认为挂了)之后,哨兵会从从节点中选举出主节点,推送给客户端。

在这里插入图片描述

主节点挂了,哨兵模式会出现访问瞬断问题。

3.cluster 模式

cluster 模式是redis官方提供的集群模式,使用了Sharding 技术,不仅实现了高可用、读写分离、也实现了真正的分布式存储。

在这里插入图片描述

Redis集群原理

Redis Cluster将所有数据划分16382个slots槽位,每个节点负责其中一部分的槽位,槽位的信息存储在每个节点之中。

当Redis Cluster客户端链接集群时,他会一份集群槽位配置信息且缓存到本地,这样客户端要查找某个key时,可以定位到目标节点。若槽位存在客户端与服务端不一致的情况,还需要纠正机制实现槽位的校验调整。

槽位定位算法

Cluster默认会对key之使用CRC16算法进行hash得到一个整数值,然后用这个整数对16384取模得到具体的槽位。

HASH_SLOT=CRC16(key) mod 16384

跳转重定向

当客户端向错误节点发出命令的时候,节点发现指令的key不属于自己管理,他会向客户端发送一个特殊的跳转携带目标主机地址的操作,告诉客户端去连这个节点获取数据,客户端收到命令后,会跳转正确的节点去操作,还会同步更新纠正本地的槽位映射表缓存,后续所有操作使用新的槽位映射表。

redis通信机制

redis cluster节点之间采用的是gossip协议进行的通信。

gossip协议包括各种消息,例如ping pong meet fail。

gossip协议内部通信端口为服务端口加10000(故配置集群的时候需要关闭防火墙).

集群选举原理

过程如下:

  1. slave发现master变成FAIL
  2. 将自己记录的集群currentEpoch加一,并广播FAILOVER_AUTH_REQUEST信息
  3. 其他节点收到该信息,只有master响应,判断请求合法性,并发送FAILOVER_AUTH_ACK,对每个epoch只发送一次ack
  4. 尝试failover的slaver手机master返回的FAILOVER_AUTH_ACK
  5. slave收到超过半数master的ack后变成新的master
  6. slave广播pong消息通知其他集群节点

延时计算公式:

DELAY=500ms+rand(0~500ms)+slave+rank*1000ms

rank越小代表复制的数据越新

这种方式,持有最新数据的slave将会发起选举(理论上)。

集群脑裂丢失数据

网络分区导致脑裂后多个主节点对外提供服务,一旦网络恢复,会将一个主节点变成从节点,这是会有大量数据丢失。规避这种问题,可以在redis里面加上参数

min-slaves-to-write 1

但是在一定程度上提升了一致性,但是如果从节点都挂了,主节点就不能对外提供服务了,可用性就下降了,此配置需要权衡使用。

集群完整才能对外提供服务?

redis.conf配置cluster-require-full-coverage为no时,表示一个集群下线且没有从节点顶上,整个集群仍然可用,设置为yes集群不可用。

加入新节点

需要执行迁移槽位的命令

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

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

相关文章

【密码学引论】序列密码

第五章 序列密码 1、序列密码 定义: 加密过程:把明文与密钥序列进行异或运算得到密文解密过程:把密文与密钥序列进行异或运算得到明文以字/字节为单位加解密密钥:采用一个比特流发生器随机产生二进制比特流 2、序列密码和分组密…

java设计模式学习之【抽象工厂模式】

文章目录 引言抽象工厂模式简介定义与用途实现方式: 使用场景优势与劣势抽象工厂模式在spring中的应用银行和贷款服务示例代码地址 引言 在我们之前的讨论中,我们探索了工厂方法模式——一种简化单一产品创建的设计模式。现在,我们将视角转向…

Linux驱动开发笔记(五):驱动连接用户层与内核层的文件操作集原理和Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/134561660 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

1146:吃糖果(C语言)

题目描述 HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢连续两次吃一样的糖果,喜欢先吃一颗A种类的糖果,下一次换一种口味,吃一颗B种类的糖果,这样&…

开始使用Spring Boot Admin吧-使用Nacos注册SBA

什么是 Spring Boot Admin(SBA)? Spring Boot Admin 是 codecentric 公司开发的一款开源社区项目,目标是让用户更方便的管理以及监控 Spring Boot 应用。 应用可以通过我们的Spring Boot Admin客户端(通过HTTP的方式&#xff0…

技术人如何实现颠覆式成长

前言 颠覆式成长要求个人不断创新、承担风险,并抓住机遇。通过创新的方法,充分发挥个人的优势,并在个人成长中突破传统、发挥独特的方式和思考,从而实现个人创造力和效能的突破。 颠覆式成长需要不断学习和个人发展,…

C#:程序发布的大小控制

.net不讨喜有个大原因就是.net平台本身太大了,不同版本没有兼容性,程序依赖哪个版本用户就要安装哪个版本,除非你恰好用的是操作系统默认安装的版本——问题是不同版本操作系统默认安装的不一样。 所以打包程序就很头疼,不打包平台…

VScode集成python开发环境和基本插件下载配置

VSCode开发工具 下载VSCode VSCode官方首页:Visual Studio Code - Code Editing. Redefined 点击Download for Windows下载 安装过程一路下一步即可,其中建议勾选 将"通过Code打开"操作添加到Windows资源管理器目录上下文菜单方便我们直接通过…

【电路笔记】-电阻器颜色代码与阻值计算

电阻器颜色代码与阻值计算 文章目录 电阻器颜色代码与阻值计算1、概述2、计算电阻器颜色代码值3、贴片电阻器 电阻器颜色编码使用色带轻松识别电阻器的电阻值及其百分比容差。 1、概述 由于有许多不同类型的电阻器可用,我们需要形成电阻器颜色代码系统以便能够识别…

视频字幕处理+AI绘画,Runway 全功能超详细使用教程(4)

runway的视频字幕处理、AI绘图功能介绍,感觉完全就是为了做电影而布局,一整套功能都上线了!想系统学习的必收藏! 在深度研究Runway各个功能后,无论是AI视频生成及后期处理技术,还是AI图像生成技术&#xff…

手把手教会你--渗透实战--最开始的靶机演示--项目二:Lampiao

有什么问题,请尽情问博主,QQ群796141573 前言。。。知识1.1 开头介绍1.2 22/80端口1.3 nmap1.4 IP地址1.5 开启靶机--网络模式1.6 信息收集(1) 查看源代码(2) 查看常见漏洞(3) 随便点一点\改一改 1.7 robots.txt。。。实战1.1 确定目标(1) 查看自己的ip地…

从裸机启动开始运行一个C++程序(十五)

前序文章请看: 从裸机启动开始运行一个C程序(十四) 从裸机启动开始运行一个C程序(十三) 从裸机启动开始运行一个C程序(十二) 从裸机启动开始运行一个C程序(十一) 从裸机启…