Redis-cluster集群架构

一、集群架构

        上述集群架构师一个由多个主从节点群组成的分布式服务器,具有复制、高可用和分片的特性。Redis集群不需要sentine哨兵也能完成节点移除和故障转移。官方文档称可以扩展上万个节点。推荐不超过1000个;从节点只担任备份的角色,不承担读写操作;

二、集群原理

        Redis Cluster将所有数据划分为16384个slots(槽位),每个节点负责其中一部分槽位,采薇的信息存储在每个节点中;当Redis Cluster的客户端连接集群时,它也会得到一份集群的槽位配置信息缓存在本地,这样可以根据key值定位到目标节点;槽位与服务端机器不一致问题需要纠正机制来实现槽位校验调整;

1 槽位算法

        HASH SLOT=CRC16(key) mod 16384

2 跳转重定位

        当客户端发出一个错误的节点指令到服务端,该节点会发现指令的key值的槽位并不归自己管理,这是它会向客户端发送一个跳转指令,携带目标节点地址,客户端收到指令后会跳转对应地址并纠正本地槽位映射缓存;

3 Redis集群节点间的通信机制

        节点间采用goss协议进行通信;

        维护集群元数据(集群节点信息,主从角色,节点数量,各节点共享数据等)有两种方式:集中式和gossio;

        集中式:优点在于元数据更新和读取湿陷性好,元数据改变会立即更新到集中式的存储中,缺点是元数据更新集中在一个地方;

        gossio

点对点慢慢通知,及时性差;

4 集群选主的过程

1.slave发现自己的master变为FAIL
2.将自己记录的集群currentEpoc 并广播FAILOVER AUTH REQUEST 信息
3.其他节点收到该信息只有master应,判断请求者的合法性,并发送FAILOVER AUTH ACK,对每一个epoch只发送一次ack
4.尝试failover的slave收集master返回的FAILOVER AUTH ACK

5.silave收到超过半数master的ack后变成新Master(这里解释了集群为什么至少需要三个主节点,如果只有两个,当其中一个挂了,只剩一个主节点是不能选举成功的)

6.slave广播Pong消息通知其他集群节点。

延时发送请求:

DELAY=500ms+random(0-500ms)+ SLAVE RANK*1000ms
'SLAVE RANK表示此slave已经从master复制数据的总量的rank,Rank越小代表已复制的数据越新,这种方式下,持有最新数据的slave将会首先发起选举(埋论上)。

5 集群脑裂问题

        red1s集群没有过半机制会有脑裂问题,网络分区导致脑裂后多个主节点对外提供写服务,一旦网络分区恢复,会将其中一个主节点变为从节点,这时会有大量数据丢失。
规避方法可以在redis配否里加上参数(这种方法不可能百分百避免数据丢失,参考集群leader选举机制):
min-slaves-to-write1 //写数据成功最少同步的s1ave数量,这个数量可以模仿大于半数机制配置,比如集料总共三个节点可以配置1,加上1eader就是2,超过了半数注意:这个配置在一定程度上会影响集群的可用性,比如save要是少于1个,这个集群就算!eader正常也不能提供服务了,需要具体场是权衡选择。

6 集群扩容

        1 节点加入集群(加入后节点默认都是master节点)

        2 槽位重新分配(连接任何机器 发起槽位分配,指定分配数量 ,指定分配到的机器,被分配的节点),数据也会跟着迁移;

        3 加入副本节点,将副本节点指定为刚刚节点的副本节点;

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

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

相关文章

JavaWeb过滤器

Javaweb过滤器是一种用于在Servlet处理请求之前或之后对请求进行预处理或后处理的组件。过滤器可以用于拦截请求、修改请求参数、过滤响应内容等操作。其主要作用包括: 拦截请求:过滤器可以拦截客户端请求,对请求进行验证、过滤或修改&#x…

STL-list的使用及其模拟实现

在C标准库中,list 是一个双向链表容器,用于存储一系列元素。与 vector 和 deque 等容器不同,list 使用带头双向循环链表的数据结构来组织元素,因此list插入删除的效率非常高。 list的使用 list的构造函数 list迭代器 list的成员函…

【Interconnection Networks 互连网络】Dragonfly Topology 蜻蜓网络拓扑

蜻蜓拓扑 Dragonfly Topology 1. 拓扑参数2. Topology Description 拓扑描述3. Topology Variations 拓扑变体 蜻蜓拓扑 Dragonfly Topology 1. 拓扑参数 Dragonfly拓扑参数: N N N: 网络中终端(terminal)的总数量 p p p: 连接到每个路由器的终端数量 a a a: 每…

Go语言并发控制

channel // cancelFn 数据通道关闭通知退出 func cancelFn(dataChan chan int) {for {select {case val, ok : <-dataChan:// 关闭data通道时&#xff0c;通知退出// 一个可选是判断data指定值时退出if !ok {fmt.Printf("Channel closed &#xff01;&#xff01;&…

Rest接口/Nginx日志记录和采集

文章目录 一、Rest接口日志二、Nginx日志三、采集日志四、夜莺查看Nginx日志五、夜莺查看Rest接口日志 一、Rest接口日志 记录日志字典定义 接口URL接口名称,类别,入参全记录,出参全记录,入参字段1:中文名1/入参字段2:中文名2,出参字段1:中文名1/test/api/login账户登录,登录…

java-单列集合List详解

一、List概述 ​​​​​​​List 接口继承自 Collection 接口。这意味着所有 List 类型的对象都是 Collection 类型的对象&#xff0c;它们共享 Collection 接口中定义的所有方法。 List集合的特点&#xff1a; 1、有序&#xff1a;存和取得元素顺序一致 2、有索引&#xf…

Java- Object根父类

在java中&#xff0c;所有的类都有一个公共的父类&#xff0c;这个java.lang.Object类 * * * Object所有类的根&#xff0c;成为超类。 1.证明Object是根 public class A_Object01 {public static void main(String[] args) {//证明Object是根//基本数据类型int a 0;Object…

【硬十宝典】——1.4【基础知识】电源完整性——理解与设计

定义&#xff1a; 电源完整性&#xff08;Power integrity&#xff09;简称PI&#xff0c;是确认电源来源及目的端的电压及电流是否符合需求。 电源完整性在现今的电子产品中相当重要。有几个有关电源完整性的层面&#xff1a;芯片层面、芯片封装层面、电路板层面及系统层面。…

18-Echarts 配置系列之:数据集 dataset

简介&#xff1a; 数据集&#xff08;dataset&#xff09;是专门用来管理数据的组件。简化在每一个系列中设置数据&#xff0c;这一个配置是在Echarts4 中开始支持。 通过数据集配置&#xff0c;避免为每一个系列创建一个数据&#xff0c;避免格式转化的痛苦。 简单举例&…

开启智慧之旅,AI与机器学习驱动的微服务设计模式探索

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#x1f525;&#xff1a;探索设计模式的魅力&#xff1a;开启智慧…

2024年腾讯云免费服务器最新申请入口链接

腾讯云免费服务器申请入口 txybk.com/go/free 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云百科txybk.com分享2024年最新腾讯云免费服务器申请入口、限制…

YOLOv8操作指南-下载+配置环境

下载&#xff1a;github&#xff0c;进入搜索YOLOv8 就这个&#xff0c;点开 下载就可以了&#xff0c;然后解压一下 配置环境&#xff1a; 安装Pytorch 先看一下这个&#xff1a; 如果电脑有GPU的话&#xff1a; 判断自己电脑GPU&#xff1a;打开任务管理器 我的是英伟达3…

sherpa + ncnn 离线语音识别

目录结构 前言音视频格式转为wavsherpa-ncnn编译LinuxWindowswindows编译中遇到的问题问题“nmake -? failed with: no such file or directory”编译失败原因 成功编译截图 可执行程序说明模型下载语言识别测试LinuxWindows 参考文献 前言 小编需要实现离线音视频语言部分识…

vulfocus靶场couchdb 权限绕过 (CVE-2017-12635)

Apache CouchDB是一个开源数据库&#xff0c;专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式&#xff0c;JavaScript作为查询语言&#xff0c;MapReduce和HTTP作为API的NoSQL数据库。应用广泛&#xff0c;如BBC用在其动态内容展示平台&…

完结撒花! java算法day60 | 84.柱状图中最大的矩形

84.柱状图中最大的矩形 思路&#xff1a; 这道题和接雨水很像&#xff0c;不过有两点差别&#xff1a; 这道题需要找到一个位置前一个比他小的数和后一个比他小的数&#xff0c;而接雨水是找到前一个和后一个比他大的数。需要在原数组前后各补上0&#xff0c;防止忽略一些边缘…

Excel数据处理:高级筛选、查找定位、查找函数(VLOOKUP)

高级筛选 先去选中筛选区域 如果筛选的条件在同一行那么就是且的关系 如果筛选的条件不在同一行那么就是或的关系 查找定位空值 使用VLOOKUP函数

C语言中, 文件包含处理,#include< > 与 #include ““的区别

文件包含处理 指一个源文件可以将另外一个文件的全部内容包含进来 &#xff23;语言提供了#include命令用来实现文件包含的操作 #include< > 与 #include ""的区别 <> 表示系统直接按系统指定的目录检索 "" 表示系统先在 "" 指定…

PACS/RIS影像管理系统源码,医院影像科室PACS系统源码,三维医学影像系统源码 支持图像后处理与重建

PACS/RIS影像管理系统源码&#xff0c;支持图像后处理与重建 医院影像科室PACS系统源码&#xff0c;三维医学影像系统源码 PACS&#xff0c;全称为Picture Archiving and Communication Systems&#xff0c;中文意思是医学影像存档与通讯系统。它主要是应用在医院影像科室中&a…

java算法day4

删除链表的倒数第N个结点链表相交环形链表 删除链表的倒数第N个结点 解法&#xff1a;双指针&#xff08;快慢指针&#xff09; 首先一定要有删除结点的思想。所以这个题是用虚拟头结点比较方便。 先上模拟图&#xff0c;然后看流程&#xff1a; 这里后移根据不同的想法有不同…

java优先级队列(堆)详解

一、优先级概念 什么是优先级&#xff1a;比如女士优先&#xff0c;个子低的优先排到前面去&#xff0c;有一部分数据具备优先级&#xff0c;要以优先级的顺序将顺序存储起来。 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#…