NoSQL 之Redis集群模式
目录
案例概述
redis工作模式
主从模式
哨兵模式
redis cluster模式
Redis集群介绍
Redis集群的优势
Redis集群的实现方法
Redis-Cluster数据分片
Redis-Cluster的主从复制模型
Redis集群部署
案例部署
安装redis
检查redis的状态
修改配置文件
重启启动redis服务
创建redis集群
查看当前集群情况
增加节点
安装redis
案例概述
- 单节点Redis服务器带来的问题
- 单点故障,服务不可用
- 无法处理大量的并发数据请求
- 数据丢失一大灾难
- 解决方法
- 搭建Redis集群
redis工作模式
主从模式
redis2.8之前
1、解决数据备份问题
2、做到读写分离,提高服务器性能
1、master故障,无法自动故障转移,需人工介入
2、master无法实现动态扩容
哨兵模式
redis2.8级之后的模式
1、Master 状态监测
2、master节点故障,自动切换主从,故障自愈
3、所有slave从节点,随之更改新的master节点
1、slave节点下线,sentinel不会对其进行故障转移,连接从节点的客户端因为无法获取到新的可用从节点
2、master无法实行动态扩容
redis cluster模式
redis3.0版本之后
1、有效的解决了redis在分布式方面的需求
2、遇到单机内存,并发和流量瓶颈等问题时,可采用Cluster方案达到负载均衡的目的
3、可实现动态扩容
4、P2P模式,无中心化
5、通过Gossip协议同步节点信息
6、自动故障转移、Slot迁移中数据可用
7、自动分割数据到不同的节点上
8、整个集群的部分节点失败或者不可达的情况下能够继续处理命令
1、架构比较新,最佳实践较少
2、为了性能提升,客户端需要缓存路由表信息
3、节点发现、reshard操作不够自动化
4、不支持处理多个keys的命令,因为这需要在不同的节点间移动数据
5、Redis 集群不像单机 Redis 那样支持多数据库功能, 集群只使用默认的 0 号数据库, 并且不能使用 SELECT index 命令
Redis集群介绍
- Redis集群是一个提供在多个Redis间节点间共享数据的城西集
- Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到Redids那样的性能,在高负载的情况下可能会导致不可预料的错误
- Redis集群通过分区提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下可继续处理命令
Redis集群的优势
- 自动分割数据到不同的节点上
- 整个集群的部分节点失败或者不可达的情况下能够继续处理命令
Redis集群的实现方法
- 有客户端分片
- 代理分片
- 服务器端分片
Redis-Cluster数据分片
- Redis集群没有使用一致性hash,而是引入了哈希槽概念
- Redis集群有16384个哈希槽
- 每个key通过CRC16校验后对16384取模来决定放置槽
- 集群的每个节点负责一部分哈希槽
- 支持添加或删除节点
- 添加删除节点无需停止服务
- 例如
- 如果想新添加节点D,需要移动节点A,B,C中的部分槽道D上
- 如果想移除节点A,需要将A中的槽移动道B和C节点上,再将没有任何槽的A节点从集群中移除
Redis-Cluster的主从复制模型
- 集群中具有A,B,C三个节点,如果节点B失败了,整个集群就会因缺少5501-11000这个范围的槽而不可用
- 为每个节点添加一个从节点A1,B1,C1,整个集群便有三个master节点和三个slave节点组成,在节点B失败后,集群便会选举B1为新的主节点继续服务
- 当B和B1都失败后,集群将不可用
master只有一个slave
master故障--》slave
(ping-pong)
master有多个slave
选举,选出新的主
slave广播(故障转移的认证请求),拉选票,让master投票
master(故障转移的认证应答),投票给slave
如果a-slave票数多,a成了master
如果票数一样多,再选
期望,半数以上
选组尽量是奇数台
Redis集群部署
| 操作系统 | IP 地址 | 角色 |
| CentOS7.9 | 192.168.10.101 | master1 |
| CentOS7.9 | 192.168.10.102 | master2 |
| CentOS7.9 | 192.168.10.103 | master3 |
| CentOS7.9 | 192.168.10.104 | slave1 |
| CentOS7.9 | 192.168.10.105 | slave2 |
| CentOS7.9 | 192.168.10.106 | slave3 |
案例部署
安装redis
![]()
同步六台虚拟主机,关闭所有主机的防火墙功能
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
部署依赖环境,解压压缩包,进入到解压压缩包目录下
[root@localhost ~]# yum -y install gcc* zlib-devel
[root@localhost ~]# tar zxvf redis-5.0.14.tar.gz
[root@localhost ~]# cd redis-5.0.14
[root@localhost redis-5.0.14]# make
[root@localhost redis-5.0.14]# make PREFIX=/usr/local/redis install #将软件安装到 /usr/local/redis 目录下。
[root@localhost redis-5.0.14]# ln -s /usr/local/redis/bin/* /usr/local/bin/ #创建一个软链接到指定目录下
[root@localhost redis-5.0.14]# cd utils/
[root@localhost utils]# ./install_server.sh
#一直回车直到跳出这个指令
1.确定端口
2.确定配置文件位置
3.确定日志文件位置
4.确定数据目录位置
5.确定执行程序路径
检查redis的状态
[root@localhost utils]# netstat -anpt | grep redis
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 5858/redis-server 1
修改配置文件
[root@localhost utils]# vim /etc/redis/6379.conf
bind 0.0.0.0 #大概在70行,修改监听
appendonly yes #大概在700行,开启aof持久化
cluster-enabled yes #大概在833行,去掉注释,表示启用群集
cluster-config-file nodes-6379.conf #大概在841行,取消注释启用
cluster-node-timeout 15000 #大概在847行,取消注释
cluster-require-full-coverage no #大概在924行,取消注释,yes改成no
开启Cluster:cluster-enabled yes
集群配置文件:cluster-config-file nodes-7000.conf。这个配置文件不是要我们去配的,而是Redis运行时保存配置的文件,所以我们也不可以修改这个文件。
集群超时时间:cluster-node-timeout 15000。结点超时多久则认为它宕机了。
槽是否全覆盖:cluster-require-full-coverage no。默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no
重启启动redis服务
[root@localhost utils]# /etc/init.d/redis_6379 restart #重启redis
[root@localhost utils]# netstat -anpt | grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 5895/redis-server 0
tcp 0 0 0.0.0.0:16379 0.0.0.0:* LISTEN 5895/redis-server 0
创建redis集群
取消所有主机的同步,六个节点随便找一个节点创建集群,这些节点分布在不同的IP上,有几个写入几个
[root@localhost ~]# redis-cli --cluster create --cluster-replicas 1 192.168.10.101:6379 192.168.10.102:6379 192.168.10.103:6379 192.168.10.104:6379 192.168.10.105:6379 192.168.10.106:6379
yes
查看当前集群情况
[root@localhost ~]# redis-cli
127.0.0.1:6379> cluster nodes
测试集群
自动把请求对应到某个主机
[root@localhost ~]# redis-cli -h 192.168.10.101 -p 6379 -c
192.168.10.101:6379> set k1 11
-> Redirected to slot [12706] located at 192.168.10.103:6379
OK
192.168.10.103:6379> set k2 22
-> Redirected to slot [449] located at 192.168.10.101:6379
OK
192.168.10.101:6379> set k3 33
OK
192.168.10.101:6379> set k4 44
-> Redirected to slot [8455] located at 192.168.10.102:6379
OK
192.168.10.102:6379> set k5 55
-> Redirected to slot [12582] located at 192.168.10.103:6379
OK
192.168.10.103:6379> set k6 66
-> Redirected to slot [325] located at 192.168.10.101:6379
OK
192.168.10.101:6379> set k7 77
OK
192.168.10.101:6379> set k8 88
-> Redirected to slot [8331] located at 192.168.10.102:6379
OK
192.168.10.102:6379> set k9 99
-> Redirected to slot [12458] located at 192.168.10.103:6379
OK
192.168.10.103:6379> keys *
1) "k9"
2) "k5"
3) "k1"
增加节点
安装redis

同步三台主机,直接用脚本运行安装
[root@localhost ~]# bash install_redis.sh
安装完成后取消同步
新增加的节点是master角色
[root@localhost ~]# redis-cli -c -p 6379 cluster meet 192.168.10.107:6379
相关文章:
NoSQL 之Redis集群模式
目录 案例概述 redis工作模式 主从模式 哨兵模式 redis cluster模式 Redis集群介绍 Redis集群的优势 Redis集群的实现方法 Redis-Cluster数据分片 Redis-Cluster的主从复制模型 Redis集群部署 案例部署 安装redis 检查redis的状态 修改配置文件 重启启动redis服…...
oracle rac
1、app连接oracle rac集群 连接到 Oracle RAC(Real Application Clusters)的多种配置方式 1. 使用 JDBC 连接字符串: 使用 JDBC 连接字符串是连接 Oracle RAC 的常见方式。连接字符串的格式如下: jdbc:oracle:thin:(DESCRIPTION…...
计算机毕业设计Python深度学习房价预测 房价可视化 链家爬虫 房源爬虫 房源可视化 卷积神经网络 大数据毕业设计 机器学习 人工智能 AI
Python深度学习房价预测系统开题报告 一、研究背景与意义 随着城市化进程的加速和房地产市场的不断发展,房价成为影响人们生活质量的重要因素之一。准确预测房价不仅有助于政府制定科学的房地产政策,还能为开发商提供市场参考,同时帮助购房…...
【Linux】学习Linux,需要借助具象化的思维
指令与图形化界面 导读一、命令行与图形化界面二、命令行与图形化界面的发展历程1.2.1 打字机的起源1.2.2 肖尔斯和格利登型打字机1.2.3 鼠标的发明1.2.4 图形化界面(GUI)的发展 三、命令行与图形化之间的联系3.1 图形化界面的人机交互3.2 命令行界面的人…...
R语言贝叶斯方法在生态环境领域技术教程
原文链接:R语言贝叶斯方法在生态环境领域技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247612056&idx5&snb170122cf5052cc7cb2d858606b9f158&chksmfa82777fcdf5fe69eec092410530e2900c98bcbb84e3d33c823705c948b4db96545bf282747a…...
mojo实现高阶函数(algorithm)
functional 实现高阶函数。 您可以从 algorithm 包导入这些 API。例如: from algorithm import map别名: Static1DTileUnitFunc = fn[Int](Int, /) capturing -> None: Signature of a 1d tiled function that performs some work with a static tile size and an off…...
先进制造aps专题二十四 云平台排产aps的方案设计
云平台排产aps的方案设计 针对对象是有排产需求无需定制的中小型工厂企业 一 网站功能(b/s架构) 1 前端界面 客户登录 排产项目管理 基础数据(产品资料,产品工艺,工作日历,生产资源,工艺能力…...
JavaScript 逆向技巧总结
本节属于知识总结,只是对思路的梳理,不对具体内容进行展开 JS 逆向可以分为三大部分: 寻找入口, 调试分析, 模拟执行 寻找入口: 这是非常关键的一步,逆向在大部分情况下就是找一些加密参数到底…...
linux反向代理原理:帮助用户更好地优化网络架构
Linux反向代理原理详解 反向代理是一种在网络架构中常用的技术,尤其在Linux环境下被广泛应用。它可以帮助实现负载均衡、安全防护和请求缓存等功能。本文将深入探讨Linux反向代理的原理、工作机制以及其应用场景。 1. 什么是反向代理 反向代理是指代理服务器接收客…...
开源DevOps工具链管理:DevStream
DevStream:简化DevOps,加速创新- 精选真开源,释放新价值。 概览 DevStream,一个开源的DevOps工具链管理器(DTM),由merico-dev团队精心打造,现已加入CNCF大家庭,并在devs…...
图数据库框架及其支持的开发语言和应用场景
图数据库框架及其支持的开发语言和应用场景 1. Neo4j 类型:原生图数据库特点:最流行的图数据库之一,使用Cypher查询语言,支持ACID事务,具有丰富的图算法库。支持的开发语言:Java, Python, JavaScript, Go, .NET, Ruby, PHP等。驱动和库:Neo4j Java Driver, Py2neo (Pyt…...
【Linux 18】核心转储
文章目录 🌈 一、什么是核心转储🌈 二、如何启动核心转储🌈 三、为什么有核心转储 🌈 一、什么是核心转储 核心转储 (Core Dump):当一个进程异常终止时,会在触发进程崩溃的目录下生成一个以进程 pid 命名的…...
远程传输文件至服务器—spc 传输
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、SPC是什么?二、使用步骤1.进入 windows 客户端需要传输文件的目录。2.在该目录的路径栏输入 cmd,回车打开终端。3.确定服务器端 IP …...
HarmonyOS.FA开发流程
开发环境配置 1、DevEco Studio的安装 2、DevEcoStudio模拟运行工程:运行Tools->Device Manager,使用已认证的HW开发者联盟帐号Login(在DP平台申请测试者权限),点击"允许"授权,选择一个设备运…...
三级_网络技术_21_无线局域网设备安装与调试
1.下列关于IEEE802.11标准的描述中,错误的是() IEEE802.11无线传输的频道定义在UNII波段 IEEE802.11在物理层定义了两个扩频技术和一个红外传播规范 IEEE802.11在MAC子层引入了一个RTS/CTS选项 IEEE802.11定义的传输速率是1Mbps和2Mbps 2.下列关于IEEE802.11标…...
机械学习—零基础学习日志(项目实践01)
llM项目分类与原理解析 Prompt项目 直接产出一些具体的文本与信息,使用markdown的格式。 对prompt进行较好的格式输出,固定格式。 ChatPaper 快速获取论文内容,然后了解对应的信息,判断是否有必要阅读这一篇论文 ChatBI&…...
SpringBoot排除默认日志框架
默认用的logback application.properties中的配置无需改变,自动装配会根据条件(哪个日志的.class是否存在) 进行切换 只要切换日志配置文件就好 比如原来使用的logback-spring.xml换成log4j2-spring.xml 日志文件网上找找...
质量管理理论(至简)
本文主要讲述质量管理的发展历程、质量管理常用的理论方法、质量管理过程、质量管理工具等内容,系统化展现质量管理知识体系。 一、质量管理发展历史 质量管理的发展历史大致划分为以下几个阶段: 质量管理发展阶段 质量检验阶段19世纪末,本…...
kaggle中访问本地上传的图片(找到图片地址)
由于代码中需要使用自己上传一个图片,对图片进行操作,尝试了很多种办法终于摸索出来了,希望可以帮助到大家 首先,在kaggle中左侧导航栏中找到datasets->New Dataset->Browse Files 创建成功后就可以看到数据集的详细信息 返回到代码中…...
ChatGPT到底是什么?它能做到什么?我们怎么才能使用到
ChatGPT是一个由OpenAI开发的人工智能聊天机器人程序,它基于先进的自然语言处理技术,能够与用户进行流畅的对话和文本交互。以下是ChatGPT的主要特点和能力: 到底是什么? 人工智能模型:ChatGPT是一个基于机器学习的大…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
