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能够迅速扫描整个磁盘卷,展示所有文件夹及其子文件夹的大小,甚至可以细化到单…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
基于Uniapp的HarmonyOS 5.0体育应用开发攻略
一、技术架构设计 1.混合开发框架选型 (1)使用Uniapp 3.8版本支持ArkTS编译 (2)通过uni-harmony插件调用原生能力 (3)分层架构设计: graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...
【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器
从本章节开始,进入到函数有多个参数的情况,前面几个章节中介绍了整型和浮点型使用了不同的寄存器在进行函数传参,ECX是整型的第一个参数的寄存器,那么多个参数的情况下函数如何传参,下面展开介绍参数为整型时候的几种情…...
