redis集群的搭建

article/2025/11/5 5:09:10

redis单机版,出现单机故障后,导致redis无法使用,如果程序使用 redis,间接导致程序出错。

redis集群的搭建方式一共有三种:主从复制模式,哨兵模式和主从模式。哨兵模式是对主从模式的一种补充,而集群模式相当于前两种模式的补充。真正在公司中用到的还是集群模式。想要学习集群模式,就要先从前两种模式开始学起。

一、主从复制模式

一主多从模式。一个主节点,多个从节点,那么主节点可以负责:读操作, 写操作。 从节点只能负责读操作,不能负责写操作。 这样就可以把读的压 力从主节点分摊到从节点,以减少主节点的压力。

当主节点执行完写的命令,会把数据同步到从节点。

1、搭建主从复制模式

按理我们应该开三个电脑或者开三个虚拟机来演示,这里为了方便,我们直接可以在一台虚拟机中演示,只要让redis服务的配置文件复制为3份,每一份代表一个redis服务,这三个redis的端口号不相同,代替了三个不同的服务器。

主节点的所有数据都会同步到从节点中!

主节点能读能写,从节点只能读!

(1)配置三个redis服务的配置文件(我们这里配置三个redis的端口号分别为:主(6379(默认))从:(7002  7003))

  • 修改端口号
  • 修改rdb文件名称

 为了区分,你也可以像我一样,在redis根目录创建一个目录master-salve,将修改的三个配置文件放到这里,以防混乱。

(2)启动服务,并连上客户端

(3)查看三个redis服务的主从关系:

info replication

 因为我们还没有配置三个redis服务的主从关系,所以他们三个现在都是默认为master。

主从复制模式的原则是:配从不配主。  就是说我们只需要配置从服务器(salve)即可,不需要对master主服务器进行配置。

(4)设置7002和7003服务为从节点

slaveof 主节点ip    主节点端口号

 看到下图中的info replication中的信息可见我们已经配置成功!

 (5)测试

主节点可以读和写。但是从节点只能读。

 尝试在主节点写:

 写入成功!

尝试在从节点写入:

 写入失败!验证了写操作只能在主节点进行。

尝试在主和从节点中都进行读操作:

 主从节点都读取成功!可见读取可以发生在主节点和从节点。

思考:

(1)这种模式,如果我们的主节点宕机以后,从节点会代替主节点变成主节点吗?答案是不会。除非我们手动设置,但是这显然不现实。

(2)如果新增加一个从节点,那新的从节点中会有主节点中的全部数据吗?答案是会。主节点会将所有的数据都复制到从节点中。

那么这种模式的痛点就显而易见了。主节点宕机,我们的从节点不能代替主节点,写入操作无法执行。那么第二种模式——哨兵模式就发挥作用了。

二、哨兵模式

由于主从模式,主节点单机后,从节点不会自动上位。 增加一个哨兵服 务,该哨兵时刻监控master,如果master挂了,哨兵会在从节点中选举一 位为主节点【哨兵投票机制】。

你可以将哨兵也理解为一台服务器,他负责监控主节点并在主节点宕机时选择从节点作为新的主节点。

1、启动哨兵模式

(1)找到我们的哨兵模式的配置文件

(2)修改其配置文件

它的配置文件我们只需要修改一个地方即可。

 这里的哨兵认可数如何理解?就好比投票机制。当主节点宕机以后,剩下的从节点获得了哨兵的选中,就意味着获得了哨兵认可,即上图中的1,作为1个哨兵认可数。只要从节点获得1个哨兵认可数,那么他就会被选中为主节点。你也可以修改为2个,3个等等,理所应当的,想要让从节点获得三个哨兵认可数,起码要开启三个哨兵。这里我们开启一个哨兵就够用了。

注意:哨兵认可数,不意味着开启的哨兵的个数!而是从节点被多少个哨兵选中。 

(3)启动哨兵

redis-sentinel sentinel.conf(配置文件名)

 (4)测试

我们还是让6379为主节点,7002 和 7003为从节点。然后我们让6379关闭服务,看看哨兵会不会帮我们从两个从节点中选择一个新的主节点。

关闭主节点服务:

 等待一段时间之后,可以看到我们的哨兵发生了一些变化:

 可以看到当我们的主节点宕机以后,哨兵好像帮我们选择了7002这个从节点作为新的主节点。

真的是这样吗?让我们用info replication看看7001 和 7002 的主从关系:

可以看到,7002成功变成主节点,7003变为7002的从节点。哨兵模式测试成功!

2. 思考

上一个主节点假如这时候恢复了,从新上线了,那上一个主节点还会重新变成主节点吗?

我们不如直接用结果说话:

 可以看到就算它恢复了,它依然是7002的从节点。地位不复当年。

现在我们可以通过主从辅助实现帮帮助主节点分担读的压力,而且也实现了当主节点宕机时从节点之一自动转换为主节点。但是,我们主节点的写入的压力依旧没有被分担。这时,第三种模式——集群化模式就起作用了。

三、集群化模式

不管上面的主从还是哨兵模式,都无法解决单节点写操作的问题。如果这 时写操作的并发比较高。这是可以实验集群化模式【去中心化模式】

集群化实现原理:

redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一 个 key-value时,redis 先对 key 使用 crc16 算法算出一个整数结果, 然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0- 16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射 到不同的节点。

当你往Redis Cluster中加入一个Key时,会根据crc16(key) mod 16384计算这个key应该分布到哪个hash slot中,一个hash slot中会有 很多key和value。你可以理解成表的分区,使用单节点时的redis时只 有一个表,所有的key都放在这个表里;改用Redis Cluster以后会自动 为你生成16384个分区表,你insert数据时会根据上面的简单算法来决 定你的key应该存在哪个分区,每个分区里有很多key。

理解一下上面这段话。redis集群化内置了16384个哈希槽,它将这些哈希槽均等分给了我们的n个主节点的服务器。比如两个个主节点服务器,那么1号服务器对应的就是哈希槽就是0~8191,2号服务器对应的哈希槽就是8200~16383。当客户进行了读写操作,在读写操作发送到我们redis服务器之前,会经过一个crc16的算法对客户传入的key值转化为一个整数,然后将这个整数对16384取余,结果就对应了我们的哈希槽的值,然后根据哈希槽的值来判断这次操作应该分给哪个服务器。

注意:

  • 每个key值对应的哈希槽的值都是固定不变的
  • 一个哈希槽可以储存多个key值
  • 一个哈希槽可以存储多个key值(也就是说key值不同,哈希槽的值可能会相同)
  • 我们搭建集群化的主节点的个数应当为奇数个。

1、搭建集群化模式

(1)准备工作

因为搭建集群化服务器,主节点个数必须为奇数个,所以我们最少要实现三主三从6个服务器(1个主节点就没有集群化的意义了)。

主节点端口号:6001 6002 6003 

从节点端口号:5001 5002 5003

(2)配置6个服务器的配置文件。(为了防止混乱,我们在根目录建一个目录cluster将6个配置文件都放在这里面)

需要配置的内容:(我们以其中一个服务器(6001)的配置文件为例)

1、修改端口号

2、 设置远程可访问

注意:不要忘记关闭防火墙  或者 防火墙放行这些端口号!!!!

 3、设置后台开启(不然我们得起码开7个窗口,如果都在一个虚拟机演示的话)

 4、修改各自的rbd文件的文件名(不然6个服务器的rdb都会公用一个)

 5、打开aof持久化

 6、修改各自的aof文件名(道理同第4条)

7、集群的配置文件,该文件自动生成

 注意:这一条默认写好,但是被注释掉了,别忘记把注释去掉!

 8、设置集群的超时时间

注意:这一条默认写好,但是被注释掉了,别忘记把注释去掉!

9、开启集群

 

 上面的这8个配置,其中没有标红加粗的配置,是因为我们在一台虚拟机上配置了6个服务器,所以才需要修改,真正公司里可别这么干!!肯定都是一个服务器对应一个redis服务。只需要修改标红部分的配置即可。我们配置完之后就如下图所示:

(3)启动6台redis服务:

 (4)分配槽    非常重要!!  

redis-cli --cluster create --cluster-replicas 1 ip:port ip:port ip:port ip:port ip:port ip:port

其中的  1  代表为每个主节点配置1个从节点。所以对应的咱们这6个服务器,前三个为主节点,后三个为从节点。如下图所示:

 显示OK以后代表最终配置成功!

 注意:一定要确保每个节点都没有数据。

(5)测试:

redis-cli -c -h ip -p port      千万别忘记了 -c  不然进不去集群化的客户端

我们随便进入其中任意一台服务端即可。以6001为例:

 使用集群化,使读写操作均摊到了不同的节点上,大大减轻了主节点的压力。


http://chatgpt.dhexx.cn/article/2l6cOfH3.shtml

相关文章

springboot整合Redis哨兵

1.1SpringBoot整合Redis哨兵 1.1.1入门案例 /*** 哨兵测试* 1.配置redis的节点数据集合* 2.利用哨兵机制连接redis节点.* 3.用户通过哨兵 实现缓存操作.* * 参数1: masterName*/ Test public void testSentinel() {//配置哨兵的信息Set<String> sentinels new Ha…

Redis集群搭建的三种方式

一、Redis主从 1.1 Redis主从原理 和MySQL需要主从复制的原因一样&#xff0c;Redis虽然读取写入的速度都特别快&#xff0c;但是也会产生性能瓶颈&#xff0c;特别是在读压力上&#xff0c;为了分担压力&#xff0c;Redis支持主从复制。Redis的主从结构一主一从&#xff0c;一…

Redis集群搭建(非常详细)

https://blog.csdn.net/qq_42815754/article/details/82912130 redis集群搭建 在开始redis集群搭建之前&#xff0c;我们先简单回顾一下redis单机版的搭建过程 下载redis压缩包&#xff0c;然后解压压缩文件&#xff1b; 进入到解压缩后的redis文件目录&#xff08;此时可以看…

什么是TCN?

TCN&#xff08;Two-way communication network&#xff09;即双向通信网络。使用socks5技术&#xff0c;通过特定的中转服务器完成数据传输。 在服务器端部署完成后&#xff0c;用户需要按照指定的密码、加密方式和端口使用客户端软件与其连接。在成功连接到服务器后&#xff…

MS-TCN: Multi-Stage Temporal Convolutional Network for Action Segmentation

论文题目&#xff1a;Multi-Stage Temporal Convolutional Network for Action Segmentation 原文地址&#xff1a;https://arxiv.org/abs/1903.01945 这篇文章涉及的是视频的行为分割问题&#xff08;Action Segmentation&#xff09;&#xff0c;也就是对视频&#xff08;vi…

TCN时间卷积网络介绍

绪论 TCN, Temporal Convolutional Network,时间卷积网络&#xff0c;是一种能够处理时间序列数据的网络结构&#xff0c;论文还评为 2018年10大论文。 1. 模型 输入&#xff1a; x 0 , x 1 , . . . , x t {x_0, x_1,..., x_t} x0​,x1​,...,xt​ 输出&#xff1a; y 0 , …

TCN: TEMPORAL CONVOLUTIONAL NETWORKS

搬运自&#xff1a;Raushan Roy-TEMPORAL CONVOLUTIONAL NETWORKS Learning sequences efficiently and effectively Until recently the default choice for sequence modeling task was RNNs because of their great ability to capture temporal dependencies in sequenti…

【深度学习论文阅读】TCN:An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence

2018年人工智能十佳论文之一&#xff1a;TCN 论文地址&#xff1a;An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling 项目地址&#xff1a;TCN的github链接 文章目录 1. ABSTRACT2. INTRODUCTION & BACKGROUND2.1 Temporal…

wavenet及TCN

一切皆卷积——包括时序相关任务 1.wavenet1.1 wavenet的pytorch实现1.1.1 wavenet类1.1.2 ResidualConv1dGLU 1.2 wavenet在纳米孔测序中的应用 2.Temporal Convolutional Network&#xff08;TCN&#xff09;2.1 TCN模型介绍2.3 TCN代码实现及可视化 3.wavenet/TCN的优点参考…

时序模型(一)—— TCN 时间卷积网络

一、 概述 TCN是18年提出的时序卷积神经网络模型。 时序问题建模&#xff0c;通常采用RNN循环神经网络及其相关变种&#xff0c;比如LSTM、GRU等&#xff0c;这里将卷积神经网络通过膨胀卷积达到抓取长时依赖信息的效果&#xff0c;TCN在一些任务上甚至能超过RNN相关模型。 …

【学习日志】【TCN】时间序列卷积神经网络(1)

1. ask bing&#xff08;Temporal Convolutional Network&#xff09; 问&#xff1a;“我对CNN、RNN、TCN等神经网络没有任何基础&#xff0c;你能直观地给我讲一下TCN的结构、输入输出和原理吗&#xff1f;” bing对TCN的解释如下&#xff1a; TCN是一种用于处理序列数据的神…

LSTM的备胎,用卷积处理时间序列——TCN与因果卷积(理论+Python实践)

什么是TCN TCN全称Temporal Convolutional Network&#xff0c;时序卷积网络&#xff0c;是在2018年提出的一个卷积模型&#xff0c;但是可以用来处理时间序列。 卷积如何处理时间序列 时间序列预测&#xff0c;最容易想到的就是那个马尔可夫模型&#xff1a; P ( y k ∣ x…

python深度学习之TCN实例

1.TCN的介绍 近些年&#xff0c;关于时间序列、自然语言处理等任务大家一般都会想到RNN、LSTM、GRU&#xff0c;一维CNN以及后面延伸出的Bi-Lstm、ConvLstm等等&#xff0c;这是因为RNN天生可以记住以前时段的信息&#xff0c;而传统的神经网络并不具有这个功能。卷积神经网络…

时间卷积网络TCN:时间序列处理的新模型

这篇文章回顾了基于TCN的解决方案的最新创新。我们首先介绍了一个运动检测的案例研究&#xff0c;并简要回顾了TCN架构及其相对于传统方法的优势&#xff0c;如卷积神经网络(CNN)和递归神经网络(RNN)。然后&#xff0c;我们介绍了一些使用TCN的应用&#xff0c;包括改进交通预测…

TCN论文及代码解读总结

前言&#xff1a;传统的时序处理&#xff0c;普遍采用RNN做为基础网络模型&#xff0c;如其变体LSTM、GRU、BPTT等。但是在处理使用LSTM时时序的卷积神经网络 目录 论文及代码链接一、论文解读1、 摘要2、引言(摘)3、时序卷积神经网络(Temporal Convolutional Networks)3.1 因果…

轨道交通中TCN、TRDP、TSN的理解

轨道交通中TCN、TSN、TRDP的理解 1 TCN2 TSN3 TRDP———————————————————————— 1 TCN TCN&#xff08;Train Communication Network&#xff09;是列车通信网络&#xff0c;是列车通信网络的总称。 在IEC 61375-1 以及GB/T 28029.1中都详细的介绍了列车…

深度学习 + 论文详解: TCN_时间卷积网络_原理与优势

论文链接 TCN: https://arxiv.org/pdf/1803.01271.pdf p.s. TCN stands for Temporal Convolutional Network. 它是除了 RNN architecture 之外的第二种可以分析时间性数据的架构 更多文章将在公众号&#xff1a;AI 算法辞典 首发&#xff01; 前言 RNN 从最一开始发展以来…

【python量化】用时间卷积神经网络(TCN)进行股价预测

写在前面 下面这篇文章首先主要简单介绍了目前较为先进的时间序列预测方法——时间卷积神经网络&#xff08;TCN&#xff09;的基本原理&#xff0c;然后基于TCN的开源代码&#xff0c;手把手教你如何通过时间卷积神经网络来进行股价预测&#xff0c;感兴趣的读者也可以基于此模…

时域卷积网络(Temporal Convolutional Network,TCN)

TCN基本结构 时域卷积网络&#xff08;Temporal Convolutional Network&#xff0c;TCN&#xff09;由Shaojie Bai et al.在2018年提出的&#xff0c;可以用于时序数据处理&#xff0c;详细内容请看论文。 1.因果卷积&#xff08;Causal Convolution&#xff09; 因果卷积如上…

时域卷积网络TCN详解:使用卷积进行序列建模和预测

CNN经过一些简单的调整就可以成为序列建模和预测的强大工具 尽管卷积神经网络(CNNs)通常与图像分类任务相关&#xff0c;但经过适当的修改&#xff0c;它已被证明是进行序列建模和预测的有价值的工具。在本文中&#xff0c;我们将详细探讨时域卷积网络(TCN)所包含的基本构建块&…