redis 集群模式(redis cluster)介绍

目录

一    redis cluster 相关定义

1, redis cluster 是什么

2,redis 集群的组成

3,集群的作用

4,集群架构图

二     Redis集群的数据分片

1,哈希槽是什么

2,哈希槽如何排布

3,Redis集群的主从复制模型

4,哈希槽架构图

三     实验模拟redis 集群

1,实验环境

2,清理实验环境

3, 模拟6个redis

4 ,修改6个 节点的配置文件

5,分别启动所有的redis

6,启动redis 集群

7 ,  查看集群

8 ,   测试集群

9,重点理解集群  redis 在集群模式下 redis-cli -p 6001 -c 新增键 不会报错 但是 redis-cli -p 6001 新增键会报错

四   总结

1,redis  主从复制

2, 哨兵

3,redis cluster


一    redis cluster 相关定义

1, redis cluster 是什么

redis 集群是 redis 群集三种模式之一。

redis群集有三种模式,分别是主从同步/复制、哨兵模式、Cluster,本文会讲解一下三种模式的工作方式,以及如何搭建cluster群集

●主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。
缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。

●哨兵:在主从复制的基础上,哨兵实现了自动化的故障恢复。
缺陷:写操作无法负载均衡;存储能力受到单机的限制;哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。

●集群:通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。
 

2,redis 集群的组成

集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。

3,集群的作用

(1)数据分区:数据分区(或称数据分片)是集群最核心的功能。
集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。
Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及;例如,如果单机内存太大,bgsave和bgrewriteaof的fork操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。
 

(2)高可用集群支持主从复制和主节点的自动故障转移(与哨兵类似);当任一节点发生故障时,集群仍然可以对外提供服务。
 

4,集群架构图

二     Redis集群的数据分片

1,哈希槽是什么

Redis集群引入了哈希槽的概念
Redis集群有16384个哈希槽(编号0-16383)
集群的每个节点负责一部分哈希槽
每个Key通过CRC16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作
 

2,哈希槽如何排布

#以3个节点组成的集群为例:
节点A包含0到5460号哈希槽
节点B包含5461到10922号哈希槽
节点C包含10923到16383号哈希槽
 

3,Redis集群的主从复制模型

集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。
为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave节点组成,在节点B失败后,集群选举B1位为的主节点继续服务。当B和B1都失败后,集群将不可用。

 

4,哈希槽架构图

三     实验模拟redis 集群

1,实验环境

redis的集群一般需要6个节点,3主3从。方便起见,这里所有节点在同一台服务器上模拟:
以端口号进行区分:3个主节点端口号:6001/6002/6003,对应的从节点端口号:6004/6005/6006。
 

2,清理实验环境

关闭防火墙 和redis

3, 模拟6个redis

首先在 /etc/redis/redis-cluster/   创建6个对应的文件夹

将redis 的配置文件   和启动文件分别拷贝到这6个文件夹

(此处为for循环 )

拷贝redis 启动文件

4 ,修改6个 节点的配置文件

代码如下:

#开启群集功能:
#其他5个文件夹的配置文件以此类推修改,注意6个端口都要不一样。
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1							#69行,注释掉bind 项,默认监听所有网卡
protected-mode no						#88行,修改,关闭保护模式
port 6001								#92行,修改,redis监听端口,
daemonize yes							#136行,开启守护进程,以独立进程启动
cluster-enabled yes						#832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf		#840行,取消注释,群集名称文件设置
cluster-node-timeout 15000				#846行,取消注释群集超时时间设置
appendonly yes							#700行,修改,开启AOF持久化

tips:为了方便可以改好6001的配置文件再贴到其他5个下面

再改92行  和 840行

5,分别启动所有的redis

查看是否启动

6,启动redis 集群

代码如下;

redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1

解释:

#六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点。下面交互的时候 需要输入 yes 才可以创建。
--replicas 1 表示每个主节点有1个从节点。

7 ,  查看集群

cluster slots  首先查看主从  及哈希槽

可以得知 6001主 从为 6005

                6002主  从为6006

                6003主   从为 6004

8 ,   测试集群

如下图  输入-c   你可以理解为对这个集群的操作

会根据算法   将这个ceshi  键放到6003 机器上

查看6003 的    从 6004   可以看到该键   其他主机看不到

9,重点理解集群  redis 在集群模式下 redis-cli -p 6001 -c 新增键 不会报错 但是 redis-cli -p 6001 新增键会报错

如图所示  不加-c  会报错   因为

在Redis集群模式下,分别使用以下两种方式执行新增键的操作:

  1. 使用 redis-cli -p 6001 -c

    • -p 6001 指定连接到集群中监听6001端口的某个节点。
    • -c 参数表示客户端应以集群模式工作,能够理解并自动处理Redis集群返回的“MOVED”重定向响应。

    当您尝试新增一个键时,如果该键应归属于当前连接节点,或者redis-cli能够根据“MOVED”响应成功找到并重定向到正确的节点执行命令,那么操作不会报错。这是因为redis-cli在这种模式下具备处理集群内部键迁移和分布的能力。

  2. 使用 redis-cli -p 6001

    • 同样使用 -p 6001 指定连接到集群中监听6001端口的节点,但没有提供 -c 参数。

    在这种情况下,redis-cli 认为它正在与单个独立的Redis实例交互,而不是一个集群。当您尝试新增一个键时,如果该键实际应由集群中的其他节点处理(即不属于当前连接节点负责的槽位),Redis集群会返回一个“MOVED”错误,指示您应该将命令发送到正确的节点。由于缺少 -c 参数,redis-cli 无法自动处理这个重定向响应,而是将“MOVED”错误直接显示给您,导致操作报错。

总结来说,使用 redis-cli -p 6001 -c 连接Redis集群并新增键通常不会报错,因为它能够应对键可能分布在不同节点的情况,自动处理重定向。而使用 redis-cli -p 6001(无 -c 参数)连接时,由于客户端不具备集群模式的支持,遇到需要重定向的情况会直接报告错误,无法完成新增键的操作。因此,在与Redis集群交互时,尤其是在进行写入操作时,务必使用 -c 参数以确保命令能够正确执行。

四   总结

1,redis  主从复制

redis主从复制是一种同步机制,
主服务器数据的修改会实时同步到从服务器上,实现数据备份和读写分离

2, 哨兵

1)监控

2)通知

3)自动故障转移

4)配置提供服务(客户端做为验证)

redis 哨兵是一个用于管理多个redis 服务器的系统它提供监控 通知自动故障转移和配置服务,来实现redis高可用性。

3,redis cluster

1)数据分片

2)故障转移

3)高性能

4)高可用

redis集群是一个提供    高性能    高可用   数据分片    故障转移  特性的

分布式数据库模式

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

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

相关文章

iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑)

引言 在 iOS 开发中,将 IPA 文件上传到苹果开发者中心是一个重要的步骤。通常情况下,我们需要使用 Mac 电脑上的 Xcode 或 Application Loader 工具来完成这个任务。然而,如果你没有 Mac 电脑,也没有关系,本文将介绍一…

天软特色因子看板 (2024.4 第2期)

该因子看板跟踪天软特色因子A05005(近一月单笔流出金额占比(%),该因子为近一月单笔流出金额占比(% 均值因子,用以刻画下跌时的 单成交中可能存在的抄底现象 今日为该因子跟踪第2期,跟踪其在SH000905 (中证500) 中的表现,要点如下 …

【问题处理】银河麒麟操作系统实例分享,ipelbats转发端口访问ftp目录空白问题处理

1.问题环境 系统环境 物理机 网络环境 私有网络 硬件环境 处理器 arm 软件环境 操作系统版本 V10-SP1-0518-arm 内核版本 4.19.90-23.15.ky10.aarch64 2.问题描述 iptables转发端口访问ftp目录空白,同一个脚本在redhat7.8上正常 2023/2/27&#xff0…

由近期 RAGFlow 的火爆看 RAG 的现状与未来

4 月 1 日,InfiniFlow (英飞流)的端到端 RAG 解决方案 RAGFlow 正式开源,首日即获得了 github 千星,目前已接近 3000 star。在这之前,InfiniFlow 还开源了专门用于 RAG 场景的 AI 原生数据库 Infinity&…

autodl常用工具命令

以下内容仅为当前认识,可能有不足之处,欢迎讨论! 文章目录 tar/zip命令镜像版本参考torch包全版本下载torch和cuda版本对应conda命令conda打包conda 环境重命名conda环境复制和转移conda环境删除 tar/zip命令 参考链接 文件目录打包&#x…

加州大学欧文分校英语基础语法专项课程03:Simple Past Tense 学习笔记(完结)

Learn English: Beginning Grammar Specialization Specialization Certificate course 3: Simple Past Tense Course Certificate 本文是学习 https://www.coursera.org/learn/simple-past-tense 这门课的学习笔记,如有侵权,请联系删除。…

爬虫入门教程(一)

爬虫入门教程 1.什么是爬虫 爬虫是一种自动获取网站数据的程序或脚本。它可以自动模拟人类访问网站,获取网页源代码,解析并提取出所需的数据。 爬虫的工作原理类似于搜索引擎的索引程序,它们会按照预定的规则和算法在互联网上不断地爬取网页,收集信息…

mysql 查询变量@i:=@i+1

学习完mysql的查询:基本查询,连接查询和子查询和mysql 正则表达式查询,接下来先学习下变量查询。 mysql中没有oracle序列号那一列。mysql可以使用查询变量的方式去处理。我们先了解下查询变量,后面应用起来就更清晰。 1&#xff0…

盘点那些好用的SAP FIORI App (五)-管理银行账户

SAP的ECC系统里面,House Bank银行账户的维护是在GUI通过T-Code FI12进行创建修改的,但是升级到S4 HANA以后,FI12的创建维护功能已经取消,所有的house bank account,都要通过这个FIORI App 维护。 App ID 如下 银行账户创建 点击…

【Linux 命令】内核、驱动调试手段总结

文章目录 1. printk2. strace3. Itrace4. ptrace5. ftrace6. 动态打印7. perf8. devmem9. demsg参考: 1. printk **printk()**是 Linux 内核中最广为人知的函数之一。它是我们打印消息的标准工具,通常也是追踪和调试的最基本方法。 虽然 printk() 是基…

Stable diffusion 初学者指南

1. Stable diffusion 初学者指南 想掌握Stable Diffusion AI技术吗? 这份初学者指南专为完全没接触过Stable Diffusion或任何AI图像生成器的新手设计。跟随本指南,你将了解Stable Diffusion的基本情况,并获得一些实用的入门技巧。 什么是S…

JavaWeb流行框架(代码案例)

Struts2基础 通过Struts2将请求转发到指定JSP页面 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://w…

Codeforces Round 938 (Div. 3) (A~E)

Codeforces Round 938 (Div. 3) (A~E) 目录&#xff1a;A B C D E A题&#xff1a;Yogurt Sale 标签: 数学&#xff08;math&#xff09; 题目大意 酸奶价格&#xff0c; a 元一份&#xff0c;b元两份n问&#xff1a;买n份最少多少钱 思路 a元一份&#xff0c;b元两份&#…

js获取上周本周下周的日期(附Demo)

目录 前言1. 基本知识2. Demo3. 彩蛋 前言 现在的时间点是&#xff1a;2024-04-08&#xff0c;对应的日期如下&#xff08;上周、这周、下周&#xff09; 1. 基本知识 讲述Demo之前&#xff0c;先补充一些基础知识 JavaScript 中的 Date 对象是用于处理日期和时间的对象。它…

【ensp】VLAN间通信的解决办法

VLAN间通信简介 VLAN间三层通信是指在VLAN网络中&#xff0c;不同VLAN之间进行通信的过程。 我们知道VLAN是虚拟局域网&#xff0c;在一个局域网内我们是通过Mac地址进行通信&#xff0c;在局域网与局域网之间通过IP地址来通信&#xff0c;大致过程如下&#xff1a; 主机在发…

【SERVERLESS】搭建ServerLess服务

目录 一、前言 二、什么是ServerLess? 三、ServerLess技术选型 四、ServerLess基础服务搭建 Mac安装示例&#xff1a; Windows安装说明&#xff1a; 五、生成ServerLess应用 六、ServerLess部署 验证并访问函数应用 七、ServerLess进阶演示 八、ServerLess最后总结 …

芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点

💡本篇内容:【芒果YOLOv8改进ATSS标签分配策略|第三集】芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点 💡🚀🚀🚀本博客 标签分配策略ATSS改进+ 新颖高效AsDDet检测头组合改进,适用于 YOLOv8 …

免费ai写作软件有哪些?分享10个给你 #媒体#学习#媒体

你是否因为写作困顿而感到沮丧&#xff1f;是不是希望能够找到一个能给你提供无限灵感和提高创作效率的利器&#xff1f;AI写作助手就是你的绝佳选择&#xff01;现在我向大家推荐几款好用的AI写作助手&#xff0c;它们将让你的创作之旅更加流畅、富有创意。 1.飞鸟写作 这是…

超详细解读Transformer框架

Transformer是由谷歌大脑2017年在论文《Attention is All You Need》中提出的一种序列到序列(Seq2Seq)模型。自提出伊始&#xff0c;该模型便在NLP和CV界大杀四方&#xff0c;多次达到SOTA效果。NLP领域中&#xff0c;我们所熟知的BERT和GPT就是从Transformer中衍生出来的预训练…

【云计算】云网络产品体系概述

云网络产品体系概述 在介绍云网络产品体系前&#xff0c;先介绍几个与云计算相关的基础概念。 阿里云在基础设施层面分为 地域 和 可用区 两层&#xff0c;关系如下图所示。在一个地域内有多个可用区&#xff0c;每个地域完全独立&#xff0c;每个可用区完全隔离&#xff0c;同…