当前位置: 首页 > news >正文

redis-cluster集群模式

Redis-cluster集群

1

Redis3.0引入的分布式存储方案

2集群由多个node节点组成,redis数据分布在节点之中,在集群之中分为主节点和从节点
3集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读
4集群模式自带哨兵模式,可以自动实现故障切换,但是故障切换完成之前,整个集群都将不可使用,切换完毕之后,集群会立即恢复

集群的作用

集群有个特殊的地方,集群模式按照数据分片来的
1数据分区是集群的核心功能,每个主都可以对外提供读和写的功能,但是数据是一一对应写入主的对应从节点,在集群模式中,可以容忍数据的不完整
2高可用高可用是集群的主要目的

数据分片如何实现

1redis的集群引入了哈希槽的概念,redis集群当中共有16384个哈希槽位,从0开始计算   (0-16383)
2根据集群当中主节点数,分配哈希槽,每个主从节点只负责一部分的哈希槽位
3每次读写都涉及到哈希槽位,key通过CRC16(校验机制)校验之后,对16384取余数,余数值决定数据放入哪个哈希槽位,通过这个值去找到对应槽位所在节点,然后直接跳转到这个节点进行存取操作

redis-cluster集群主从复制

1主宕机之后,主节点原来负责的哈希槽位将会不可用,需要从节点代替主节点继续负责原有的哈希操作,保证集群正常工作
2这也是故障切换的过程中,会提示集群不可用的原因,切换完成之后,集群恢复后继续工作
在集群模式当中,只能选择0号库,集群是不能切库的

集群流程

1集群自带主从复制和哨兵模式
2每个主节点之间互相间隔,可以容忍数据的不完整,核心目的就是为了实现高可用
3哈希槽位决定每个节点的读写操作,在创建key时,系统已经分配好了指定槽位
4

面试题

MOVED不是报错,只是提醒客户端去分配好的槽位节点,获取数据

#6台redis同时操作,用多重执行
systemctl stop firewalld
setenforce 0#所有节点文件都需要操作,或者配置文件修改完毕后覆盖掉其他主机的redis配置文件
vim /etc/redis/6379.confbind 0.0.0.0
#70行,允许所有网段与我建立连接protected-mode no
#89行,保护模式要关闭掉port 6379
#93行,多实例不需要改端口,单示例需要改下端口daemonize yes
#137行,后台进程默认是打开的就不要动了appendonly yes
#700行,AOF持久化功能要打开,不打开会报错,哈希槽可能会分配失败cluster-enabled yes
#833行,取消注释cluster-config-file nodes-6379.conf
#841行,取消注释,这是集群的配置文件名称cluster-node-timeout 15000
#847行,取消注释,取消集群的超时时间设置,15秒内超时,将会执行主从切换[root@c1 redis]# /etc/init.d/redis_6379 restart
[root@c1 redis]# netstat -antp | grep redis主机1
[root@c1 redis]# redis-cli -h 192.168.233.66 --cluster create 192.168.233.66:6379 192.168.233luster-replicas 1
#replicas 1 规定一个主只能有一个从,主从的配合是随机的Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
#哈希槽分配Adding replica 192.168.233.70:6379 to 192.168.233.66:6379
Adding replica 192.168.233.71:6379 to 192.168.233.67:6379
Adding replica 192.168.233.69:6379 to 192.168.233.68:6379
#一个主对应一个从M: 1d66a340a048973f729745a643610c2ae33b3298 192.168.233.66:6379slots:[0-5460] (5461 slots) master
M: 4b7e1c65b1f090aa655963ebfdbf7be852f56522 192.168.233.67:6379slots:[5461-10922] (5462 slots) master
M: cd2e1c40d3df41db989de29f1bb9106465f4ab1b 192.168.233.68:6379slots:[10923-16383] (5461 slots) master
S: 75a179cffb4cd63e30980063341a6e82f0d0cb88 192.168.233.69:6379replicates cd2e1c40d3df41db989de29f1bb9106465f4ab1b
S: 011bbb8a7582c4319f9e0d2afb6b033c9c6f81ac 192.168.233.70:6379replicates 1d66a340a048973f729745a643610c2ae33b3298
S: e6c3f4199e97974db9f5103428e90bf7516a394b 192.168.233.71:6379replicates 4b7e1c65b1f090aa655963ebfdbf7be852f56522
#主的后面会有master,从是没有的Can I set the above configuration? (type 'yes' to accept): yes
#这样的分配是否接受,无特殊需求就yes[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
#表示集群创建成功#接下来只要验证集群的主从复制,读写分离,哨兵模式
CLUSTER nodes
#查看集群相关节点的详细信息127.0.0.1:6379> CLUSTER NODES
1d66a340a048973f729745a643610c2ae33b3298 192.168.233.66:6379@16379 myself,master - 0 0 1 connected 0-5460
#1d66a340a048973f729745a643610c2ae33b3298 表示编号,192.168.233.66:6379@16379 表示主机名,master 表示地位是主,0 0 1表示时间戳,connected 0-5460 表示当前主节点负责的哈希槽位127.0.0.1:6379> set test 1
(error) MOVED 6918 192.168.233.67:6379
#这个不是报错,表名客户端尝试读取键值对test,但实际槽位在6918,集群要求客户端移动到6918槽位所在的主机节点192.168.233.67,获取数据,系统只是提示创建键值时已被划分到6918哈希槽位,如果需要创建要去对应的哈希槽位操作127.0.0.1:6379> monitor
OK
#监控redis工作过程的实时日志,只有从在ping主,主不会ping从127.0.0.1:6379> monitor
OK
1700738454.422719 [0 192.168.233.66:6379] "PING"

nginx实现代理

在nginx节点配置,实现负载均衡!
stream {upstream redis_cluster {server 192.168.233.7:6379;server 192.168.233.8:6379;server 192.168.233.9:6379;}server {listen 6379;proxy_pass redis_cluster;proxy_connect_timeout 1s;proxy_timeout 1s;proxy_responses 1;}
}

nginx代理

Proxy_responses 1;在集群之中只要有一个节点相应,然后代理服务器就会把响应传递给客户端,可以增加整个系统的稳定性,只要有一个节点响应,那么客户端就可以继续发起请求,不会因为某个节点失效,导致整个请求失效
nginx是否可以提供多端口服务可以提供多端口服务

相关文章:

redis-cluster集群模式

Redis-cluster集群 1 Redis3.0引入的分布式存储方案 2集群由多个node节点组成,redis数据分布在节点之中,在集群之中分为主节点和从节点3集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读4集群模式自带哨兵模式,可…...

带你用uniapp从零开发一个仿小米商场_10. 首页开发

图标菜单栏开发 轮播图开发完成后,就是图标菜单栏了 可以看出这些图标都是一样的样式,所以可以勇哥flex布局让他们每个占百分之20 代码如下,既然都是一样的那就直接用个循环嵌套一下 data数据如下 同样,为了能让这段代码能在别的地方也用到,我直接把它封装成组件 <templ…...

常使用的定时任务

常使用的定时任务 一、 linux自带的定时任务 1、crontab 有这样一个需求&#xff1a;我们使用Java写一个工具jar包在系统空闲的时候去采集已经部署在Linux系统上的项目的一 些数据&#xff0c;可以使用 linux 系统的 crontab。 运行crontab -e&#xff0c;可以编辑定时器&…...

【人工智能Ⅰ】实验2:遗传算法

实验2 遗传算法实验 一、实验目的 熟悉和掌握遗传算法的原理、流程和编码策略&#xff0c;理解求解TSP问题的流程并测试主要参数对结果的影响&#xff0c;掌握遗传算法的基本实现方法。 二、实验原理 旅行商问题&#xff0c;即TSP问题&#xff08;Traveling Salesman Proble…...

Hadoop集群升级(3.1.3 -> 3.2.4)

升级前确认 旧版本&#xff1a;3.1.3 升级版本&#xff1a;3.2.4 旧版本安装路径&#xff1a;/ddhome/bin/hadoop/ 新版本安装路径&#xff1a;/ddhome/bin/hadoop-3.2.4 安装新版本hadoop 解压安装 # 解压安装包到相应目录下 tar -zxvf /ddhome/tools/hadoop-3.2.4.tar.gz…...

(一)基于高尔夫优化算法GOA求解无人机三维路径规划研究(MATLAB)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…...

ESP32-Web-Server编程-建立第一个网页

ESP32-Web-Server编程-建立第一个网页 HTTP 简述 可能你每天都要刷几个短视频&#xff0c;打开几个网页来娱乐一番。当你打开一个网络上的视频或者图片时&#xff0c;其实际发生了下面的流程&#xff1a; 其中客户端就是你的浏览器啦&#xff0c;服务器就是远程一个存放视频或…...

csgo/steam游戏搬砖项目的五大认知误区

CSGO/steam游戏搬砖项目的5大认知误区 1、卡价越高越难选品&#xff1f;越没利润&#xff1f; 2、明明buff卖价《 steam求购价&#xff0c;为什么还能赚钱&#xff1f; 3、实名资料少就没法批量操作账号&#xff1f; 4、本金少就没法玩&#xff1f; 5、这个项目的风险是不是很大…...

ASCII sorting

描述 输入一个字符串&#xff0c;对其字符进行排序&#xff0c;输出其字符按ASCII码升序排列。 输入 无空格字符串 输出 按ASCII码升序输出其字符。 样例输入 and 样例输出 adn code&#xff08;c版本&#xff09; #include<stdio.h> #include<stdlib.h> // qs…...

redis--高可用之持久化

redis高可用相关知识 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务(99.9%、99.99%、99.999%等等)。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&#xff0c;除了保证提供正常服务( 如主…...

『VUE3 の 要点摘录』

✅v-model 用法 v-model 原生方法&#xff1a; v-model computed &#xff1a; 更改名字&#xff1a; 多个 v-model 绑定 处理 v-model 修饰符 ✅TS项目报错 1、TypeScript 错误 “Module ‘…index’ has no default export” // tsconfig.json {...."compilerOpt…...

Buzz库python代码示例

Buzz库来编写一个下载器程序。 php <?php require_once vendor/autoload.php; // 引入Buzz库 use Buzz\Browser; use Buzz\Message\Response; $browser new Browser(); // 设置 $browser->setHttpClient(new HttpClientProxy([ host > , port > , ])…...

Django路由分发

首先明白一点&#xff0c;Django的每一个应用下都可以有自己的templates文件夹&#xff0c;urls.py文件夹&#xff0c;static文件夹&#xff0c;基于这个特点&#xff0c;Django能够很好的做到分组开发&#xff08;每个人只写自己的app&#xff09;&#xff0c;作为老大&#x…...

【UGUI】中Content Size Fitter)组件-使 UI 元素适应其内容的大小

官方文档&#xff1a;使 UI 元素适应其内容的大小 - Unity 手册 必备组件&#xff1a;Content Size Fitter 通常&#xff0c;在使用矩形变换定位 UI 元素时&#xff0c;应手动指定其位置和大小&#xff08;可选择性地包括使用父矩形变换进行拉伸的行为&#xff09;。 但是&a…...

第二十章Java博客

如果一次只完成一件事情&#xff0c;很容易实现。但现实生活中&#xff0c;很多事情都是同时进行的。Java中为了模拟这种状态&#xff0c;引入了线程机制。简单地说&#xff0c;当程序同时完成多件事情时&#xff0c;就是所谓的多线程。多线程应用相当广泛&#xff0c;使用多线…...

实验一 SAS 基本操作和数据表的导入 2023-11-29

一、上机目的 熟悉SAS的集成环境并掌握它的基本操作。理解SAS程序的结构&#xff0c;理解其中的过程&#xff0c;过程选项&#xff0c;语句&#xff0c;语句选项等概念&#xff0c;掌握SAS编程技术。 二、上机内容 主要有SAS操作界面、SAS窗口操作、SAS菜单操作、SAS按钮操作…...

YOLOv5改进之ShuffleNetV2

目录 一、原理 网络结构 二、代码 三、应用到YOLOv5 一、原理...

tcp/ip协议 error=10022 Winsock.reg Winsock2.reg

tcp/ip协议 error10022 这2个注册表选项千万不能删除&#xff0c;否则上不了网。 按下windows键R键&#xff0c;输入regedit&#xff0c;打开注册表&#xff0c;在文件目录里找到如下两个文件夹&#xff0c;删除这两个文件夹。 路径&#xff1a;HKEY_LOCAL_MACHINE\System\C…...

【Redis基础】Redis基本的全局命令

✅作者简介&#xff1a;大家好&#xff0c;我是小杨 &#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; Redis基本的全局命令 1&#xff0c;KEYS命令 语法&#xff1a;KEYS pattern KEYS命令用来查询服…...

Vite 了解

1、vite 与 create-vite 的区别 2、vite 解决的部分问题 3、vite配置文件的细节 3.1、vite语法提示配置 3.2、环境的处理 3.3、环境变量 上图补充 使用 3.4、vite 识别&#xff0c;vue文件的原理 简单概括就是&#xff0c;我们在运行 npm润dev 的时候&#xff0c;vite 会搭起…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...