redis-cluster集群

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

集群由多个node节点组成,redis数据分布在这些节点之中,在集群之中分为主节点和从节点

数据流程图

redis-cluster集群的工作模式

集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读

集群模式自带哨兵模式,可以实现故障切换,但是在故障切换完成之前,整个集群都将不可用,切换完毕之后,集群会立刻恢复

集群模式按照数据分片

1、数据分区:是集群的核心功能,每个主都可以对外提供读、写的功能,但是数据时一一对应写入主的对应从节点,在集群模式中,可以容忍的数据的不完整

2、高可用:集群的主要目的

如何实现数据分片?

Redis的集群引入了哈希槽的概念

redis集群当中16384个哈希槽位(0-16383)

根据集群当中主从节点数,分配哈希槽位,每个主从节点只负责一部分的哈希槽位

每次读写都涉及到哈希槽位,key通过CRC16校验之后,对16384取余数,余数值决定数据放入哪个哈希槽位,通过这个值去找到对槽位所在的节点,然后直接跳转到这个节点进行存取操作

哈希槽位

哈希槽位的值连续的,如果出现不连续的哈希值,或者有哈希槽位没有被分配,集群将会报错

有主从复制的原因

主宕机之后,主节点原来负责的哈希槽位将会不可用,需要从节点代替主节点继续负责原有的哈希操作,保证集群正常工作

故障切换的过程中,会提示集群不可用,切换完成,集群恢复继续工作

实现cluster集群
#关闭防火墙和安全机制
redis1
vim /etc/redis/6379.conf70行
#监听地址为0.0.0.089行
yes---no
#保护模式关闭136行
#默认就行700行
#持久化打开833行
cluster-enabled yes
#取消注释841行
cluster-config-file nodes-6379.conf
#取消注释
#集群配置文件847行
cluster-node-timeout 15000
#取消注释#其他的服务器和redis配置是一样的sz 6379.conf(redis1)
#复制到桌面
#删除其他服务器6379.conf,把文件拖到/etc/redis目录下#重启服务
/etc/init.d/#redis1创建集群
redis-cli -h 20.0.0.20 --cluster create 20.0.0.20:6379 20.0.0.21:6379 20.0.0.22:6379 20.0.0.23:6379 20.0.0.24:6379 20.0.0.25:6379 --cluster-replicas 1Adding replica 20.0.0.24:6379 to 20.0.0.20:6379
Adding replica 20.0.0.25:6379 to 20.0.0.21:6379
Adding replica 20.0.0.23:6379 to 20.0.0.22:6379#replics 1 :规定一个主只有一个从
#主从的配合
#集群不能切换库的,只能使用默认库#进入库
redis-cli#查看集群的节点
cluster nodesset test1 1
keys *#在分配好的从节点上查看是否同步过去(error)MOVED 4768 20.0.0.20:6379
#表示客户端尝试读取键值对test1 ,但是实际槽位是4768,集群要求客户端移动到4768槽位所在的主机节点,获取数据#随机停止一台master节点的服务
#查看从是否顶替master节点#监控集群redis的日志
monitor
#从节点通过ping命令(哨兵模式)
集群流程

1、集群自带主从和哨兵

2、每个主从节点之间互相隔离的,可以容忍数据的不完整,目的:高可用

3、哈希槽位决定每个节点的读写操作,在创建key时,系统已经分配好了指定槽位

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

Nginx和客户端
Nginx服务器
全局配置中
stream {upstream redis_cluster {server 20.0.0.20:6379 weight=1;server 20.0.0.21:6379 weight=1;server 20.0.0.22:6379 weight=1;}server{listen 6379;proxy_pass redis_cluster;proxy_connect_timeout ls;proxy_timeout ls;proxy_responses 1;}
proxy_responses 1;
在集群之中只要有一个节点响应,然后dialing服务器就会响应传递给客户端,可以增加整个系统的稳定性
只要有一个节点可以响应,那么客户端就会
}客户端连接Nginx代理服务器
redis-cli -h 20.0.0.40 -p 6379

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

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

相关文章

<Linux> 文件理解与操作

目录 前言: 一、关于文件的预备知识 二、C语言文件操作 1. fope 2. fclose 3. 文件写入 3.1 fprintf 3.2 snprintf 三、系统文件操作 1. open 2. close 3. write 4. read 四、C文件接口与系统文件IO的关系 五、文件描述符 1. 理解文件描述符 2. 文…

蓝桥杯官网算法赛(蓝桥小课堂)

问题描述 蓝桥小课堂开课啦! 海伦公式(Herons formula),也称为海伦-秦九韶公式,是用于计算三角形面积的一种公式,它可以通过三条边的长度来确定三角形的面积,而无需知道三角形的高度。 海伦公…

同旺科技 USB 转 RS-485 适配器 -- 隔离型

内附链接 1、USB 转 RS-485 适配器 隔离版主要特性有: ● 支持USB 2.0/3.0接口,并兼容USB 1.1接口; ● 支持USB总线供电; ● 支持Windows系统驱动,包含WIN10 / WIN11 系统32 / 64位; ● 支持Windows …

必备极速下载工具 — aria2

必备极速多线程并行下载工具 — aria2 aria2 是一款免费开源跨平台且不限速的多线程下载软件,其优点是速度快、体积小、资源占用少;支持 HTTP / FTP / BT / Magnet 磁力链接等类型的文件下载;支持 Win、Mac、Linux 系统,甚至在树莓…

Kotlin学习——流程控制,when,循环,range工具 kt里的equals if实现类似三元表达式的效果

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

「江鸟中原」有关HarmonyOS-ArkTS的Http通信请求

一、Http简介 HTTP(Hypertext Transfer Protocol)是一种用于在Web应用程序之间进行通信的协议,通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…

黑马React18: ReactRouter

黑马React: ReactRouter Date: November 21, 2023 Sum: React路由基础、路由导航、导航传参、嵌套路由配置 路由快速上手 1. 什么是前端路由 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候,path 对应的组件会在页面中进行渲染 2. …

掌握你的Mac,iStat Menus带你了解mac系统状态

iStat Menus for mac是一款强大的mac系统状态监控工具,它能够提供实时的系统信息和性能监测,帮助用户全面了解和管理自己的Mac设备。无论是CPU、内存、网络、硬盘还是传感器数据,iStat Menus都能直观地展示,并且支持自定义布局和样…

easyExcel 注解开发 快速以及简单上手 以及包含工具类

easyExcel 简单快速使用 1. mevan 这里版本我这里选的是 poi 4.1.2和 ali的easyexcel 的 3.3.1。 因为阿里easy是根据poi的依赖开发的有关系,两者需要对应要不然就会有很多bug和错误在运行时发生。需要版本对应,然而就是easy的代码也会有bug这个版本是比…

什么软件可以去视频水印?分享3个超实用去水印工具

什么软件可以去视频水印?短视频已然成为了我们日常生活或工作的一部分,当我们遇到感兴趣的视频想保存发现无法保存,或者保存后留有水印,非常影响我们视频观看度和分享欲,为了解决这一问题,许多针对视频水印…

基于单片机预费电表控制系统(proteus仿真+源程序)

一、系统方案 1、本设计采用这51单片机作为主控器。 2、采集电量值送到液晶1602显示。 3、按键设置预设值,实际使用电量超过设置,蜂鸣器报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void LCD_init(void) { …

MySQL数据库【一】

博学而笃志,切问而近思 文章目录 数据库简介服务器、数据库以及表的关系连接数据库数据库操作命令创建数据库查看数据库创建语句查看数据库使用数据库修改数据库删除数据库 数据库字符集和校验规则查看系统默认字符集查看系统默认校验规则查看数据库支持的字符集查看…

Shell编程基础 – for循环

Shell编程基础 – for循环 Shell Scripting Essentials - for Loop 大多数编程语言都有循环的概念和语句。如果想重复一个任务数十次,无论是输入数十次,还是输出数十次,对用户来说都不现实。 因此,我们考虑如何用好Bash Shell编…

Python入门学习篇(四)——if详解

if详解 1 单项分支 1.1 语法结构 if 条件:逻辑代码(条件为真时执行的代码) # 注: 如果条件不满足,那么则不执行if下面的逻辑代码1.2 示例代码 username input("请输入您的用户名: ") if username "admin":print("管理员登录成功")1.3 运行…

Vue框架学习笔记——事件处理:v-on指令+methods

文章目录 前文提要事件处理的解析过程,v-on:事件名样例代码如下:效果展示图片:v-on:事件名"响应函数"v-on简写形式响应函数添加响应函数传参占位符"$event"注意事项 前文提要 本人仅做个人学习记录,如有错误…

【追求卓越02】数据结构--链表

引导 今天我们进入链表的学习,我相信大家对链表都很熟悉。链表和数组一样,作为最基础的数据结构。在我们的工作中常常会使用到。但是我们真的了解到数组和链表的区别吗?什么时候使用数组,什么时候使用链表,能够正确的选…

深入了解MD5加密技术及其应用与局限

一、MD5简介 MD5(Message Digest Algorithm 5)是一种单向散列函数,由美国密码学家罗纳德李维斯特(Ronald Linn Rivest)于1991年发明。它主要用于将任意长度的消息映射成固定长度的摘要,从而实现消息的完整…

C++STL库常用详解与原理

CSTL库 学习方法&#xff1a;使用STL的三个境界&#xff1a;能用&#xff0c;明理&#xff0c;能扩展。 常用库 库名称所需头文件数据结构string#include<string>串vector#include<vector>动态数组list#include<list>带头双向循环链表queue#include<queu…

又3本“On Hold”期刊被剔除!这本Elsevier旗下中科院2区TOP仍在调查中!

【SciencePub学术】 此前&#xff0c;继又2本期刊被“On Hold”&#xff01;标识后&#xff0c;仍处于“On Hold”状态的期刊有8本&#xff0c;其中包括4本SCI期刊和4本ESCI期刊。 2023年11月20日&#xff0c;科睿唯安更新了Web of Science核心期刊目录。 本次11月更新共64本期…

12 网关实战:Spring Cloud Gateway基础理论

为什么需要网关? 传统的单体架构中只有一个服务开放给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,那么作为客户端如何去调用这些微服务呢?如果没有网关的存在,只能在本地记录每个微服务的调用地址。 无网关的微服务架构往往存在以下问题: 客户端多次请求…