Redis集群模式—主从集群、哨兵集群、分片集群
主从集群
主从模式中,包括一个主节点(Master)和一个或多个从节点(Slave)。主节点负责处理所有写操作和读操作,而从节点则复制主节点的数据,并且只能处理读操作。当主节点发生故障时,可以将一个从节点升级为主节点,实现故障转移(需要手动实现)。

以下是实现Redis主从集群的基本步骤:
1. 安装Redis
相信学到这里的人已经安装了redis,就不演示了。
2. 配置主服务器
编辑主服务器的配置文件(通常是redis.conf),确保以下设置(如果已经设置,则无需更改):
bind:指定Redis服务器绑定的IP地址。
port:Redis服务器监听的端口号,默认为6379。
logfile:指定日志文件的路径。
dir:指定Redis数据库文件的存储目录。
daemonize yes : 守护进程,修改为yes后即可后台运行
requirepass sdg734:密码,设置后访问Redis必须输入密码
3. 配置从服务器
对于每个从服务器,编辑其配置文件,并执行下面的命令:
slaveof <masterip> <masterport>:这里<masterip>是主服务器的IP地址,<masterport>是主服务器监听的端口号。
其他配置(如bind、requiredpass)根据需要进行设置。
4. 启动Redis服务器
在所有服务器上启动Redis服务。你可以使用Redis自带的启动脚本,或者通过命令行直接启动Redis服务器。
5. 验证配置
在主服务器上,使用INFO replication命令查看复制信息,确认没有错误。
在从服务器上,同样使用INFO replication命令,查看从服务器是否成功连接到主服务器,并正在接收数据。
总结:主从复制的有点在于好构建,简单易用,适合用于读多写少的场景。缺点在于不具备故障自动转移的能力,没有容错和不能做恢复。
哨兵集群
为了解决主从模式的无法自动容错及恢复的问题,Redis 引入了一种哨兵模式的集群架构。
哨兵模式是在主从复制的基础上加入了哨兵节点。哨兵节点是一种特殊的 Redis 节点,用于监控主节点和从节点的状态。当主节点发生故障时,哨兵节点可以自动进行故障转移,选择一个合适的从节点升级为主节点,并通知其他从节点和应用程序进行更新。

1. 配置Redis实例
在每台选定的Redis服务器上,安装Redis。修改redis.conf文件,设置不同的端口号(例如6379, 6380, 6381等),以及配置持久化(如RDB或AOF,根据你的需求)。配置从服务器以连接到主服务器。在从服务器的redis.conf文件中添加slaveof <master-ip> <master-port>。
配置持久化:
# 开启RDB
# save ""
save 3600 1
save 300 100
save 60 10000# 关闭AOF
appendonly no
2. 配置哨兵
在每台选定的哨兵服务器上,创建哨兵配置文件(例如sentinel.conf)。
在哨兵配置文件中,为每个哨兵实例定义要监控的主Redis服务器。例如:
sentinel monitor mymaster <master-ip> <master-port> <quorum>
其中<quorum>是执行故障转移操作所需的最小哨兵数。
设置哨兵的其他相关参数,如down-after-milliseconds(哨兵认为Redis服务器不可用的时间),failover-timeout(故障转移超时时间)等。确保所有哨兵配置文件都是一致的。
3. 启动Redis实例和哨兵
在每台Redis服务器上启动Redis实例。
在每台哨兵服务器上启动哨兵进程,通常是通过运行redis-sentinel sentinel.conf命令。
4. 验证和测试
使用redis-cli连接到哨兵实例,并使用SENTINEL masters命令查看哨兵监控的主服务器列表。故意停止主Redis服务器,观察哨兵是否会自动将其中一个从服务器提升为主服务器,并更新其他从服务器和哨兵的配置。使用SENTINEL slaves mymaster查看当前主服务器的从服务器列表,验证从服务器是否已正确连接到新的主服务器。
5. 原理
哨兵节点定期向所有主节点和从节点发送 PING 命令,如果在指定的时间内未收到 PONG 响应,哨兵节点会将该节点标记为主观下线。如果一个主节点被多数(默认是超过哨兵节点数的一半)哨兵节点标记为主观下线,那么它将被标记为客观下线。
当主节点被标记为客观下线时,哨兵节点会触发故障转移过程。它会从所有健康的从节点中选举一个新的主节点,
并将所有从节点切换到新的主节点,实现自动故障转移。同时,哨兵节点会更新所有客户端的配置,指向新的主节点。
哨兵节点通过发布订阅功能来通知客户端有关主节点状态变化的消息。客户端收到消息后,会更新配置,将新的主节点信息应用于连接池,从而使客户端可以继续与新的主节点进行交互。
分片集群
Redis将数据自动分片到多个部分,每个部分都有一个主节点和多个从节点。

1. 准备Redis配置文件
在每台服务器上,你都需要一个Redis配置文件(通常是redis.conf)。你可以从Redis的源代码或安装目录复制一个配置文件作为起点。
示例配置文件(redis-6379.conf):
# 绑定到服务器的IP地址(或者注释掉这一行以监听所有地址)
# bind 127.0.0.1 # 设置端口
port 6379 # 开启集群模式
cluster-enabled yes # 集群配置文件名称(Redis会自动创建和更新这个文件)
cluster-config-file nodes-6379.conf # 集群节点超时时间
cluster-node-timeout 5000 # 开启AOF或RDB持久化(根据你的需求选择)
appendonly yes
你需要为每台服务器上的Redis实例修改port和cluster-config-file的值,以确保它们不会冲突。
2. 启动Redis实例
在每台服务器上,使用redis-server命令启动Redis实例,并指定配置文件。
# 在服务器1上
redis-server /path/to/redis-6379.conf # 在服务器2上
redis-server /path/to/redis-6380.conf
...
3. 创建Redis集群
在任意一台服务器上,使用redis-cli的--cluster选项来创建集群。你需要指定所有Redis实例的地址和端口。
# 假设所有服务器都可以通过IP地址192.168.x.y访问,并且Redis实例分别运行在6379, 6380, ..., 6384端口
redis-cli --cluster create 192.168.x.1:6379 192.168.x.2:6380 192.168.x.3:6381 192.168.x.4:6382 192.168.x.5:6383 192.168.x.6:6384 --cluster-replicas 1
这里的--cluster-replicas 1表示我们想要每个主节点有一个从节点。Redis Cluster会自动分配从节点到主节点。
4. 验证集群
在任意Redis实例上,使用redis-cli连接到集群,并检查集群的状态。
redis-cli -c -h 192.168.x.1 -p 6379 CLUSTER INFO CLUSTER NODES
-c选项表示启用集群模式,允许redis-cli自动重定向命令到正确的节点。
为了测试集群是否配置正确,你可以尝试在集群中设置和获取键值对。
SET mykey "Hello, Redis Cluster!" GET mykey
5. 原理
在 Redis 的 分片集群模式中,使用哈希槽(hash slot)的方式来进行数据分片,将整个数据集划分为多个槽,每个槽分配给一个节点。客户端访问数据时,先计算出数据对应的槽,然后直接连接到该槽所在的节点进行操作,在该模式下,提供了自动故障转移、数据迁移和扩缩容等功能,能够比较方便地管理一个大规模的 Redis 集群。
整个数据集划分为 16384 个槽,每个槽都有一个编号(0~16383),集群的每个节点可以负责多个 hash 槽,客户端访问数据时,先根据 key 计算出对应的槽编号,然后根据槽编号找到负责该槽的节点,向该节点发送请求。
在 Redis 的每一个节点上,都有这么两个东西,一个是槽(slot),它的的取值范围是:0-16383。还有一个就是 cluster,可以理解为是一个集群管理的插件。当我们的存取的 Key 的时候,Redis 会根据 CRC16 算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
redis的分片集群具有以下特点:
1.提升性能和吞吐量:通过在多个节点上分散数据,可以并行处理更多的操作,从而提升整体的性能和吞吐量。这在高流量场景下尤其重要,因为单个节点可能无法处理所有请求。
2.提高可扩展性:分片使得 Redis 可以水平扩展。可以通过添加更多节点扩展数据库的容量和处理能力。
3.更好的资源利用:分片允许更有效地利用服务器资源。每个节点只处理数据的一部分,这降低了单个节点的内存和计算需求。
4.避免单点故障:在没有分片的情况下,如果唯一的 Redis 服务器发生故障,整个服务可能会停止。在分片的环境中,即使一个节点出现问题,其他节点仍然可以继续运行。
5.数据高可用性:在某些分片策略中,如 Redis 集群,每个分片的数据都可以在集群内的其他节点上进行复制。这意味着即使一个节点失败,数据也不会丢失,从而提高了系统的可用性。
相关文章:
Redis集群模式—主从集群、哨兵集群、分片集群
主从集群 主从模式中,包括一个主节点(Master)和一个或多个从节点(Slave)。主节点负责处理所有写操作和读操作,而从节点则复制主节点的数据,并且只能处理读操作。当主节点发生故障时,…...
并发工具类(二):CyclicBarrier
1、CyclicBarrier 介绍 从字面上看 CyclicBarrier 就是 一个循环屏障,它也是一个同步助手工具,它允许多个线程 在执行完相应的操作后彼此等待共同到达一个屏障点。 CyclicBarrier可以被循环使用,当屏障点值变为0之后,可以在接下来…...
Spring Cloud全解析:负载均衡之Ribbon简介
Ribbon简介 Ribbon是一种客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起,提供了一系列完善的配置如连接超时、重试等,Ribbon会自动的帮助基于某种规则(如简单轮询、随机连接等)去连接那些机器,也可以自定义的负载均衡…...
Kettle安装与使用指南
1. 介绍 什么是Kettle? Kettle,全称Pentaho Data Integration (PDI),是Pentaho BI套件的一部分。它提供了一个可视化的ETL工具,允许用户通过图形界面设计复杂的数据集成流程。Kettle支持多种数据源,包括关系型数据库…...
教育行业解决方案:智能PPT在教育行业的创新应用
在信息化时代,教育行业面临着巨大的变革。随着人工智能技术的不断发展,传统教学方式正在被重新定义。彩漩科技作为 AI 技术的先行者,推出了歌者 PPT &彩漩 PPT,为教师、学生和家长提供了一种全新的教育体验,实现了…...
Matlab程序练习
Part1 1.求 [100,999] 之间能被 21整除的数的个数。 程序: 主文件:main.m clear; start_num 100; end_num 999; div_num 21; res div(start_num,end_num,div_num); fprintf("[%d,%d]之间能被%d整除的数的个数为%d个\n",start_num,end_…...
cesium可不可以改变影像底图颜色,如何给地球底图影像添加一层滤镜蒙版?
废话:你的球是不是很丑?是不是没有科技感?是不是没有好看的影像? 因果: 因:客户问,底图可不可以改变颜色,想让球更漂亮一些。 答:可以改变影像饱和度,透明度…...
MyBatis-MappedStatement什么时候生成?QueryWrapper如何做到动态生成了SQL?
通过XML配置的MappedStatement 这部分MappedStatement主要是由MybatisXMLMapperBuilder进行解析,核心逻辑如下: 通过注解配置的MappedStatement 核心逻辑就在这个里面了: 继承BaseMapper的MappedStatement 我们看看这个类,里…...
Netty系列-2 NioServerSocketChannel和NioSocketChannel介绍
背景 本文介绍Netty的通道组件NioServerSocketChannel和NioSocketChannel,从源码的角度介绍其实现原理。 1.NioServerSocketChannel Netty本质是对NIO的封装和增强,因此Netty框架中必然包含了对于ServerSocketChannel的构建、配置以及向选择器注册&am…...
智能客服的四大优势,提升企业服务效率
在这个信息化快速发展的时代,客户服务的重要性越来越凸显。传统的客服方式已经无法满足企业日益增长的服务需求,于是智能客服服务应运而生。智能客服服务不仅改变了企业与客户的互动方式,还提高了服务效率和客户满意度。本文将深入探讨智能客…...
AutoGPT开源项目解读
AutoGPT开源项目解读 (qq.com) AutoGPT旨在创建一个自动化的自我改进系统,能够自主执行和学习各种任务 项目基本信息 首先阅读项目的README.md,下述代理和智能体两个名词可互换 项目简介:一个创建和运行智能体的工具,这些智能体…...
Linux离线安装fontconfig
Linux离线下载yum包,安装字体库 一、下载安装包 以CentOS Linux release 7.9.2009下载fontconfig的rpm包的为例 http://mirror.centos.org/centos/7/按提示跳转历史库 找到对应版本的centos https://vault.centos.org/7.9.2009/os/x86_64/Packages/在Packages目…...
海山数据库(He3DB)+AI:(一)神经网络基础
文章目录 1 引言2 基本结构2.1 神经元2.2 模型结构 3 训练过程3.1 损失函数3.2 反向传播3.3 基于梯度的优化算法 4 总结 1 引言 神经网络可以被视为一个万能的拟合器,通过深层的隐藏层实现输入数据到输出结果的映射。神经网络的思想源于对大脑的模拟,在…...
CSS中选择器有哪些?(史上最全选择器)
CSS选择器是用来选择和应用样式到HTML元素上的工具。以下是所有主要的CSS选择器的详细分类和描述: 1. 基本选择器 通配符选择器 (*):选择所有元素。例如,* { color: red; } 会将所有元素的文字颜色设置为红色。元素选择器:选择指…...
本地部署 AI 智能体,Dify 搭建保姆级教程(下):知识库 RAG + API 调用,我捏了一个红楼解读大师
话接上篇: 本地部署 AI 智能体,Dify 搭建保姆级教程(上):工作流 Agent,把 AI 接入个人微信 相信大家已经在本地搭建好 Dify 了。 今日分享,继续介绍 Dify 的另外两项重要功能: 知…...
HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 答案纯享版
这篇文章是高级题库答案纯享版,只有需要选择的选项。如果需要查看所有选项,可以点击下方链接跳转。以考代学,还是推荐点击下方链接,查看完整的题库,边看边学习鸿蒙应用开发。此题库已更新完毕,笔者将不继续…...
基于PHP的文件包含介绍
引言:在实际开发过程中,经常会遇到部分模块功能需要重复使用的情况,比如数据库的增删改查,文件包含通过将需要重复使用的功能模块代码引入其他文件的内容,实现重用代码、分离配置等。然而,如果文件包含操作…...
K7系列FPGA多重启动(Multiboot)
Xilinx 家的 FPGA 支持多重启动功能(Multiboot),即可以从多个 bin 文件中进行选择性加载,从而实现对系统的动态更新,或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而…...
关于武汉芯景科技有限公司的RS232通信接口芯片XJ3243EEUI开发指南(兼容MAX3243EEUI)
一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、典型应用电路 三、功能描述 1.Transmitter 通过T1,T2可以将TTL电平转换为RS232电平 2.Receiver 通过R1,R2可以将RS232电平转换为TTL电平 3.工作模式控制 4.INVALID引脚...
TreeSize Free:你的免费磁盘空间管理专家
TreeSize Free是一款专为Windows用户设计的磁盘空间分析工具。它能够帮助用户快速识别并管理那些占用大量空间的文件夹和文件。 功能亮点 快速扫描:TreeSize Free能够迅速扫描整个磁盘卷,展示所有文件夹及其子文件夹的大小,甚至可以细化到单…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
