redis集群详细搭建方式(含原理、操作指令、异常处理)

news2024/11/18 11:43:30

目录

1.概述

2.配置

2.1.配置文件

 2.2.合体

 2.3.进入cli

3.集群操作

3.1.查看集群信息

 3.2.集群中录入值

 3.3.查询集群中的值

 4.故障处理


1.概述

概念:

redis集群是从3.0版本开始支持的一个功能,是redis的一种水平扩展方式,将全局数据分散的存储在N个结点上,从而来将请求流量打散到各个结点上,减轻单结点压力。

实现原理:

redis的集群进行数据散列时使用了一致性hash算法的思想,如果对一致性hash算法有兴趣可以参照博主的另一篇文章:

一致性hash算法__BugMan的博客-CSDN博客

具体实现上,1个redis集群包含16384个槽位(solt),编号0-16384,将这些槽位分段给各个结点。如果要操作某个数据,CRC16(key)%16384计算出槽位号,如果这个槽位号在当前结点就直接在当前结点进行处理,如果在其它结点就使用重定向的方式将操作指令重定向到对应结点上去。redis将CRC16算法当作自己的hash函数的实现来使用。

以下以一个查找操作为例:

为什么能分担流量压力:

如果一个操作请求从业务代码发送过来,因为存在请求重定向机制的存在,所以请求随便发给一个redis结点都行。

环境依赖:

需要注意的是,5.0版本以前需要ruby环境,5.0版本以后不需要。

2.配置

2.1.配置文件

redis的配置文件redis.conf中关于集群的主要配置项有三个:

  • cluster-enabled,是否开启集群模式。

  • cluster-config-file,本届点生成的集群文件的名称。

  • cluster-node-timeout,失联等待时间,主要用于主节点失联后其他从节点何时开始重新竞选出主节点。

 2.2.合体

配置好后的各个结点还是相互独立的,集群处于未启动状态,各个结点还没分配各自的插槽号,需要使用指令来启动集群,并完成各节点插槽号的分配。

在5.0版本之前要使用redis-trib.rb命令来进行合体,在5.0以后合体命令继承在了redis-cli中,redis-cli支持了多种参数,在启动集群时对集群做一些初始化的配置:

注意:有多结点时,多个IP:port间以空格分隔。

命令格式命令说明
redis-cli --cluster create IP:port以默认的方式启动集群
redis-cli --cluster create IP:port --cluster-replicas 1创建带主从关系的集群,主从关系由redis随机创建

使用redis-cli启动集群时创建的主从关系是无法指定的,如有需要的话可以在创建后手动调整。

命令格式命令说明
redis-cli --cluster add-node IP:port新增主结点
redis-cli --cluster add-node IP:port --cluster-slave --cluster-master-id 主节点的id新增从结点

以下使用默认的方式启动集群,启动时redis会主动询问自动生成的集群配置是否满意:

 合体成功后可以使用cluster nodes来查看当前集群的信息:

 2.3.进入cli

集群模式下最好使用./redis-cli -c来进入集群模式下的客户端,因为进入普通模式的客户端的话很多集群功能不支持,比如说无法重定向,一旦进行存放值的操作时运算出来的hash值不在当前节点所管的范围,会直接报错。

3.集群操作

3.1.查看集群信息

cluster nodes

如果存在主从关系,通过编号消息可以看出主从关系。

 3.2.集群中录入值

一致性hash算法会将数据尽量均匀分布到集群中各个节点上去,但是不同节点上的数据不能进行批量操作,如mget、mset等。

如果想要强制指明将多个值都存放在一个节点上,以实现可以批量操作,可以使用{}来定义组。同组的数据,会在运算的时候强制将hash值算到一个范围中去。

 3.3.查询集群中的值

 4.故障处理

某组主从集体掉线以后,对应的这段插槽号集体失效,不会被均分到其他节点上。redis默认所有插槽都正常的时候才会对外正常提供服务,一旦出现上面的情况3,redis默认会无法正常进行工作,在配置文件中将cluster-require-full-coverage从注释中放出来,改为no即可修改默认机制。

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

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

相关文章

NNDL 作业12:第七章课后题

习题7-1在小批量梯度下降中,试分析为什么学习率要和批量大小成正比. 在小批量梯度下降中: 令,则: 因此我们要使得参数最优,则为最优的时候的常数,故学习率要和批量大小成正比。 习题7-2在Adam算法中,说明指数加权平均…

以太网 传统STP生成树的BPDU介绍、STP端口状态介绍与切换过程,STP详细的工作过程。

2.10.1 以太网 传统STP生成树(STP BPDU、STP端口状态、STP工作过程) STP生成树协议的之间的交互通过STP BPDU(根协议数据单元,Bridge Protocol Data Unit)进行。 传统STP生成树2.10.1 以太网 传统STP生成树&#xff0…

《码出高效》五 异常与日志

前言 本章主要是讲异常处理,关于异常主要有三个问题: 哪里发生异常 谁来处理异常 如何处理异常 围绕这三个问题就有了一套异常处理机制 异常分类 通常异常时针对不稳定代码的,并且需要区分类型 throw和throws的区别: 以此段代…

session条件竞争

PHP SESSION 的存储 Session会话存储方式 PHP将session以文件的形式存储服务器的文件中,session.save_path来控制 默认路径 /var/lib/php/sess_PHPSESSID /var/lib/php/sessions/sess_PHPSESSID /tmp/sess_PHPSESSID /tmp/sessions/sess_PHPSESSID session文件默…

PS图层+移动工具(2)复制删除快捷键 图层分组 前景色填充

查看此文前 你需要先读 PS图层移动工具(1)图层概念-拖动操作-移动工具基础 其实显示变换控件 这个配置相对 是容易造成错误操作 不小心就把文件拖动了 当我们想调这些时 可以直接 按住键盘上的 CtrlT 然后点击图层 这个操作框就出来了 然后调好之后 还是 直接用鼠标双击图层 就…

荧光染料Sulfo-Cyanine 7 Tyramide,Tyramide-Sulfo-Cy7,磺酸基-花青素Cy7 酪酰胺

一:产品描述 1、名称 英文:Sulfo-Cyanine 7 Tyramide,Tyramide-Sulfo-Cy7 中文:磺酸基-花青素Cy7 酪酰胺 2、所属分类:Cyanine 3、分子式:C43H51N3O8S2 4、分子量:802.01 5、质量控制&am…

二叉树的序列化与反序列化

二叉树的序列化与反序列化 通俗的说就是给定一个二叉树的根节点,用某种方法将树结构的信息存到一个字符串中,并且还可以用这一个字符串还原这棵树。 本文介绍两种方法,分别为递归法和迭代法。 剑指 Offer 37. 序列化二叉树 递归法 序列化&a…

final域的内存语义

重排序规则 1. 在构造函数内对一个final域的写入,与随后把这个被构造对象引用赋值给一个引用变量,着两个操作不能重排序 2. 初次读一个包含final域的对象的引用,与随后初次读取这个final域,这两个操作不能重排序 以下面实例作说明…

基于ssm作业管理系统

随着计算机以及网络的普及,教师与学生对辅助教学方式的要求也越来越高,在教学辅助方式上追求质量及效率。作为教学核心组成之一的作业管理也趋向更加便 捷快速的方式。 经过调查,现阶段高校进行作业管理的方式主要有三种: 情况一&…

SSM学生宿舍管理系统(附源码)

本次介绍的是一个基于SSMJSP开发的学生宿舍管理系统的设计与实现,界面简洁、程序逻辑清晰,适合作为毕业设计的模板参考! 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家 …

阿里妈妈star论文重点记录

论文地址:https://arxiv.org/pdf/2101.11427.pdf 1:业务实际应用 自 2020 年底以来,STAR 已部署在阿里巴巴展示广告系统,点击率提升8.0%和RPM增加6% 2:特点 星型拓扑促进跨多个domain的有效信息转换,在…

MATLB|抽水蓄能电站系统的最优竞价策略研究

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清…

Python自动化测试面试题——接口篇

目录 网络模型 OSI有哪几层,分别包含哪些协议? 协议 TCP,UDP的区别? TCP如何确保可靠传输? 三次握手与四次挥手? HTTP有哪些请求方法? HTTP常见的状态码有哪些? GET和POST的区别? Cookie和Session的区别? Token和Session的区别? HTTP和HTTPS的区别? 接口…

JavaScript(二):变量、数据类型、类型转换

变量一、变量的使用1.声明变量2.赋值3.变量的初始化4.变量的更新5.同时声明多个变量6.声明变量的特殊情况7.变量的命名规则二、数据类型数字型1.数字型Number2.数字型范围3.数字型的特殊值4.isNaA()字符串型String1.字符串型格式2.字符串型引号嵌套3.字符串转义符4.字符串长度5…

R语言相关分析和稳健线性回归分析

介绍 下面以物种多样性为例子展示了如何在R语言中进行相关分析和线性回归分析。 怎么做测试 相关和线性回归示例 Data read.table(textConnection(Input),headerTRUE) 数据简单图 plot(Species ~ Latitude, dataData, pch16,xlab "Latitude", ylab "Specie…

web前端期末大作业:体育网页主题网站设计——体育兵乓球5页面HTML+CSS+JavaScript

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

ES运维常用指令,常用的故障诊断指令,es集群健康状况、集群节点分配信息、分片分配信息、分片未分配问题诊断、集群开启密码访问

目录 查询集群的健康状况 查看集群中所有节点的分配信息 查询集群/索引的文档总计数 查询集群的分片分配信息 查询集群中索引的分片数、文档数或集群中包含哪些索引 查询集群的快照存储信息 查看集群状态信息 查看集群统计信息 查看集群中所有节点的节点属性 查询分片…

javaScript 进阶之路 --- 《手写“回调地狱”》

前言: 可能初次看到这个标题,你会有些惊讶。我们不是要实现“手写 Promise ”吗?怎么变成了手写“回调地狱”了?“我老早看视频学习的时候就知道,我们要避免写成“回调地狱的格式,怎么到你这还要手写这玩意…

论文投稿指南——中国(中文EI)期刊推荐(第5期)

🚀 EI是国际知名三大检索系统之一,在学术界的知名度和认可度仅次于SCI!🎄🎈 【前言】 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊。其中&#xf…

智能优化算法:蜣螂优化算法-附代码

智能优化算法:蜣螂优化算法 摘要:蜣螂优化算法( Dung beetle optimizer, DBO), 是由 Jiankai Xue 等于2022 年提出的一种群体智能优化算法。其灵感来源于蜣螂的生物行为过程,具有寻优能力强,收敛速度快的特点。 1.蜣螂优化算法 …