【百万字详解Redis】集群

在这里插入图片描述

文章目录

    • 一、集群模式概述
      • 1.1、什么是集群模式
      • 1.2、集群模式特点
      • 1.3、集群工作方式
    • 二、集群模式的搭建
      • 2.1、搭建前的准备
      • 2.2、修改集群配置
      • 2.3、启动redis服务
      • 2.4、创建集群
      • 2.5、查看redis服务状态
      • 2.6、进入一个节点
      • 2.7、测试操作
    • 三、集群操作
      • 3.1、主从切换
      • 3.2、从节点操作
        • 3.2.1、前期准备
        • 3.2.2、增加从节点
        • 3.2.3、删除从节点
      • 3.3、主节点操作
        • 3.3.1、添加主节点
        • 3.3.2、给主节点加从节点
      • 3.4、主节点操作
        • 3.4.1、删除主节点

🌈你好呀!我是 山顶风景独好
🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊
🌸愿您在此停留的每一刻,都沐浴在轻松愉悦的氛围中。
📖这里不仅有丰富的知识和趣味横生的内容等您来探索,更是一个自由交流的平台,期待您留下独特的思考与见解。🌟
🚀让我们一起踏上这段探索与成长的旅程,携手挖掘更多可能,共同进步!💪✨
sentinel模式基本可以满足一般生产的需求,具备高可用性。但是当数据量过大到一台服务器存放不下的情况时,主从模式或sentinel模式就不能满足需求了,这个时候需要对存储的数据进行分片,将数据存储到多个Redis实例中。cluster模式的出现就是为了解决单机Redis容量有限的问题,将Redis的数据根据一定的规则分配到多台机器。

一、集群模式概述

1.1、什么是集群模式

Redis 的哨兵和主从模式基本已经可以实现高可用和读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,浪费内存空间,所以在redis上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说Redis 节点上存储不同的内容。

在这里插入图片描述

1.2、集群模式特点

多个redis节点网络互联,数据共享

所有的节点都是一主一从(也可以是一主多从),其中从节点不提供服务,仅作为备用

不支持同时处理多个key(如MSET/MGET),因为redis需要把key均匀分布在各个节点上,并发量很高的情况下同时创建key-value会降低性能并导致不可预测的行为

支持在线增加、删除节点

客户端可以连接任何一个主节点进行读写

1.3、集群工作方式

数据存取工作方式

在 Redis 的每一个节点上,都有这么两个东西,一个是插槽(slot),一个是cluster。

插槽的取值范围是:0-16383。cluster,可以理解为是一个集群管理的插件。

当我们的存取 Key的时候,Redis 会根据算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

集群工作方式

为了保证高可用,redis集群模式引入了主从模式,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。

那么如何发现主节点宕机?当其它主节点ping一个主节点C时,如果半数以上的主节点与C通信超时,那么认为主节点C宕机了。如果主节点C和它的从节点C1都宕机了,那么该集群就无法再提供服务了。

二、集群模式的搭建

2.1、搭建前的准备

集群搭建:至少要三个master

第一步:创建一个文件夹redis-cluster,然后在其下面分别创建6个文件夹如下:

[root@zutuanxue redis]# mkdir redis-cluster
[root@zutuanxue redis]# cd redis-cluster/
[root@zutuanxue redis-cluster]# mkdir 7001
[root@zutuanxue redis-cluster]# mkdir 7002
[root@zutuanxue redis-cluster]# mkdir 7003
[root@zutuanxue redis-cluster]# mkdir 7004
[root@zutuanxue redis-cluster]# mkdir 7005
[root@zutuanxue redis-cluster]# mkdir 7006

第二步:把之前的redis.conf配置文件分别copy到700*下

[root@zutuanxue redis]# cp redis.conf ./redis-cluster/7001/redis.conf
[root@zutuanxue redis]# cp redis.conf ./redis-cluster/7002/redis.conf
[root@zutuanxue redis]# cp redis.conf ./redis-cluster/7003/redis.conf
[root@zutuanxue redis]# cp redis.conf ./redis-cluster/7004/redis.conf
[root@zutuanxue redis]# cp redis.conf ./redis-cluster/7005/redis.conf
[root@zutuanxue redis]# cp redis.conf ./redis-cluster/7006/redis.conf

第三步:由于redis集群需要使用ruby命令,所以我们需要安装ruby

yum install ruby
yum install rubygems
gem install redis #(安装redis和ruby的接口)

2.2、修改集群配置

[root@zutuanxue redis]# vim ./redis-cluster/7001/redis.conf
#需要修改的配置
daemonize yes
port 700* #(分别对每个机器的端口号进行设置)
bind 192.168.1.171 #(必须要绑定当前机器的ip,不然会无限悲剧下去哇..深坑勿入!!!)
dir /usr/local/redis-cluster/700*/ #(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据,深坑勿入!!!)
appendonly yes
cluster-enabled yes  #(启动集群模式,开始玩耍)
cluster-config-file nodes700*.conf#(这里700x最好和port对应上)
cluster-node-timeout 5000  #redis节点宕机被发现的时间 

注意:

每个文件要修改端口号,bind的ip,数据存放的dir,并且nodes文件都需要进行修改!

2.3、启动redis服务

[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7001/redis.conf
[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7002/redis.conf
[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7003/redis.conf
[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7004/redis.conf
[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7005/redis.conf
[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7006/redis.conf

2.4、创建集群

执行redis-cli --cluster create命令

[root@zutuanxue redis]# ./src/redis-cli --cluster create 192.168.1.121:7001 192.168.1.121:7002 192.168.1.121:7003 192.168.1.121:7004 192.168.1.121:7005 192.168.1.121:7006 --cluster-replicas 1

说明:

create

表示创建一个redis集群。

–cluster-replicas 1

表示为集群中的每一个主节点指定一个从节点,即一比一的复制。

在这里插入图片描述

2.5、查看redis服务状态

[root@zutuanxue redis]# ps -ef|grep redis

在这里插入图片描述

2.6、进入一个节点

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7001
192.168.1.121:7001> info cluster
# Cluster
cluster_enabled:1 #节点是否为cluster模式 。1是0否

2.7、测试操作

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005
192.168.1.121:7005> set b fdfsfsd
-> Redirected to slot [3300] located at 192.168.1.121:7001
OK
192.168.1.121:7001> get b 
"fdfsfsd"
192.168.1.121:7001> set c fdsfdfdsfds
-> Redirected to slot [7365] located at 192.168.1.121:7002
OK
192.168.1.121:7002> get c
"fdsfdfdsfds"
192.168.1.121:7002> set x fdsfdsfsdf
-> Redirected to slot [16287] located at 192.168.1.121:7003
OK
192.168.1.121:7003> keys *
1) "x"
2) "a"
192.168.1.121:7003> get b
-> Redirected to slot [3300] located at 192.168.1.121:7001
"fdfsfsd"
192.168.1.121:7001> keys *
1) "b"
192.168.1.121:7001> set d fdsfdsfsd
-> Redirected to slot [11298] located at 192.168.1.121:7003
OK
192.168.1.121:7003> get d
"fdsfdsfsd"
192.168.1.121:7003> set x zhangsan
OK
192.168.1.121:7003> get x
"zhangsan"

三、集群操作

3.1、主从切换

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7001
192.168.1.121:7001> cluster nodes #查看集群中的节点

在这里插入图片描述

停掉7003,在查看节点信息

[root@zutuanxue redis]# ps -ef|grep redis
root      31370      1  0 21:04 ?        00:00:05 ./src/redis-server 192.168.1.121:7001 [cluster]
root      31375      1  0 21:04 ?        00:00:05 ./src/redis-server 192.168.1.121:7002 [cluster]
root      31380      1  0 21:04 ?        00:00:05 ./src/redis-server 192.168.1.121:7003 [cluster]
root      31385      1  0 21:05 ?        00:00:05 ./src/redis-server 192.168.1.121:7004 [cluster]
root      31394      1  0 21:05 ?        00:00:05 ./src/redis-server 192.168.1.121:7005 [cluster]
root      31399      1  0 21:05 ?        00:00:05 ./src/redis-server 192.168.1.121:7006 [cluster]
root      32361   2769  0 22:39 pts/0    00:00:00 grep --color=auto redis
[root@zutuanxue redis]# kill -s 9 31380
[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005
192.168.1.121:7005> cluster nodes

在这里插入图片描述

启动7003,查看节点信息

[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7003/redis.conf 
[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005
192.168.1.121:7005> cluster nodes

在这里插入图片描述

3.2、从节点操作

3.2.1、前期准备

准备一个新的Redis,7007

[root@zutuanxue redis]# cd redis-cluster/
[root@zutuanxue redis-cluster]# ls
7001  7002  7003  7004  7005  7006
[root@zutuanxue redis-cluster]# mkdir 7007
[root@zutuanxue redis-cluster]# cp ./7006/redis.conf ./7007/redis.conf
[root@zutuanxue redis-cluster]# cd ..
[root@zutuanxue redis]# vim ./redis-cluster/7007/redis.conf 
[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7007/redis.conf
3.2.2、增加从节点
[root@zutuanxue redis]# ./src/redis-cli --cluster add-node 192.168.1.121:7007 192.168.1.121:7004 --cluster-slave

在这里插入图片描述

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005
192.168.1.121:7005> cluster nodes

在这里插入图片描述

3.2.3、删除从节点

删除7007节点

[root@zutuanxue redis]# ./src/redis-cli --cluster del-node 192.168.1.121:7007 99d2ceb080ef0d701546dea0901d4784a201fc06
>>> Removing node 99d2ceb080ef0d701546dea0901d4784a201fc06 from cluster 192.168.1.121:7007
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005
192.168.1.121:7005> cluster nodes

在这里插入图片描述

3.3、主节点操作

3.3.1、添加主节点

将7007设置为7006的主节点

保证7007服务是启动的

[root@zutuanxue redis]# ./src/redis-cli --cluster add-node 192.168.1.121:7007 192.168.1.121:7006

查看节点信息,未分配槽位不能存储数据

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005
192.168.1.121:7005> cluster nodes

在这里插入图片描述

重新分配槽位

[root@zutuanxue redis]# ./src/redis-cli --cluster reshard 192.168.1.121:7007

在这里插入图片描述

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005
192.168.1.121:7005> cluster nodes

在这里插入图片描述

3.3.2、给主节点加从节点

准备一个新的Redis,7008

[root@zutuanxue redis]# cd redis-cluster/
[root@zutuanxue redis-cluster]# ls
7001  7002  7003  7004  7005  7006  7007
[root@zutuanxue redis-cluster]# mkdir 7008
[root@zutuanxue redis-cluster]# cp ./7007/redis.conf ./7008/redis.conf
[root@zutuanxue redis-cluster]# vim ./7008/redis.conf
[root@zutuanxue redis-cluster]# cd ..
[root@zutuanxue redis]# ./src/redis-server ./redis-cluster/7008/redis.conf 

为7007添加从节点7008

[root@zutuanxue redis]# ./src/redis-cli --cluster add-node 192.168.1.121:7008 192.168.1.121:7007 --cluster-slave

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005
192.168.1.121:7005> cluster nodes

在这里插入图片描述

3.4、主节点操作

3.4.1、删除主节点

删除从节点

[root@zutuanxue redis]# ./src/redis-cli --cluster del-node 192.168.1.121:7008 8e52c94dafa72df26b1eddf94363a4780bed9339
>>> Removing node 8e52c94dafa72df26b1eddf94363a4780bed9339 from cluster 192.168.1.121:7008
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

移动数据将7007移动到7001节点

[root@zutuanxue redis]# ./src/redis-cli --cluster reshard 192.168.1.121:7007

在这里插入图片描述

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005
192.168.1.121:7005> cluster nodes

在这里插入图片描述

删除主节点

[root@zutuanxue redis]# ./src/redis-cli --cluster del-node 192.168.1.121:7007 d7a3e48cd142dce6566023fce21e31669e9fa3d5
>>> Removing node d7a3e48cd142dce6566023fce21e31669e9fa3d5 from cluster 192.168.1.121:7007
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

查看节点信息

[root@zutuanxue redis]# ./src/redis-cli -c -h 192.168.1.121 -p 7005
192.168.1.121:7005> cluster nodes

在这里插入图片描述


✨ 这就是今天要分享给大家的全部内容了,我们下期再见!😊
🎁 领取方式:Hypoxia__WHB
🏠 我在CSDN等你哦!我的主页😍

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】解决Python报错:ValueError: not enough values to unpack (expected 2, got 1)

​​​​ 文章目录 引言1. 错误详解2. 常见的出错场景2.1 函数返回值解包2.2 遍历含有不同长度元组的列表 3. 解决方案3.1 检查和调整返回值3.2 安全的解包操作 4. 预防措施4.1 使用异常处理4.2 单元测试 结语 引言 在Python编程中,ValueError 是一个常见的异常类…

2024年如何通过完善的工程化,从0到1手把手建立个人 react 组件库

本文聚焦于快速创建并部署个人的组件库,方便平时开发中将通用的组件抽出,也可用于简历上展示个人的组件成果~ 组件库体验地址:components-library 关于以上内容,你是否好奇如何实现的,对于大多数项目,诸如…

【C语言】预处理详解(上卷)

前言 预处理也是C语言中非常重要的存在。那么就详细地来了解一下吧。 预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。 1 __FILE__ //进行编译的源文件 2 __LINE__ //文件当前的…

JavaSE——抽象类和接口

目录 一 .抽象类 1.抽象类概念 2.抽象类语法 3.抽象类特性 4.抽象类的作用 二. 接口 1.接口的概念 2.语法规则 3.接口的使用 4.接口特性 5.实现多个接口 6.接口间的继承 三.抽象类和接口的区别 一 .抽象类 1.抽象类概念 在面向对象的概念中,所有的对…

python -- series和 DataFrame增删改数据

学习目标 知道df添加新列的操作 知道insert函数插入列数据 知道drop函数删除df的行或列数据 知道drop_duplicates函数对df或series进行数据去重 知道unique函数对series进行数据去重 知道apply函数的使用方法 1 DataFrame添加列 注意:本文用到的数据集在文章顶部 1.1 直…

微信小程序 map

组件 地图个性化样式组件是腾讯位置服务为开发者提供的地图高级能力,开发者可以在法律允许的范围内定制地图风格,支持定制背景面、背景线、道路、POI等地图元素颜色、显示层级等内容;支持按照类型精细化管理POI的显示、隐藏;灵活…

JMS VS AMQP

JMS(Java Message Service)是一个为Java平台设计的API,主要针对Java开发者提供了一套用于企业级消息服务的标准接口。而AMQP(Advanced Message Queuing Protocol)是一个应用层协议,它提供了一个开放的、标准…

BUG解决: Zotero 文献GBT7714无法正常调用

1. 下载csl文件 网上有推荐直接下载现成版本的,比如参考资料【1】的蓝奏云文件,但是还是无法实现功能(空文档中可以用了)。 2. Github版本 也有说网盘版本和那个 Juris-M 的 CSL bug 太多的。 总结 后面发现,只需…

带池化注意力 Strip Pooling | Rethinking Spatial Pooling for Scene Parsing

论文地址:https://arxiv.org/abs/2003.13328 代码地址:https://github.com/houqb/SPNet 空间池化已被证明在捕获像素级预测任务的长距离上下文信息方面非常有效,如场景解析。在本文中,我们超越了通常具有N N规则形状的常规空间池化,重新思考空间池化的构成,引入了一种…

对比深度图聚类的硬样本感知网络

Hard Sample Aware Network for Contrastive Deep Graph Clustering 文章目录 Hard Sample Aware Network for Contrastive Deep Graph Clustering摘要引言方法实验结论启发点 摘要 本文提出了一种名为Hard Sample Aware Network (HSAN)的新方法,用于对比深度图聚类…

Git+Gitlab 远程库测试学习

Git远程仓库 1、Git远程仓库 何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现 Gitee 码云是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快 码云 Gitee - 基于 Git 的代码托…

Python实现连连看9

(2)标识选中的图片 在判断出玩家选中的是哪一张图片之后,接下来就可以标识选中的图片了,即在该选中的图片外围画矩形。代码如下所示。 FIRSTCLICK True #FIRSTCLICK是全局变量 if(click_col>0 and click_row>0) and \(no…

【进程调度的基本过程】初步认识进程和线程的区别与联系:计算机是如何工作的

​ 🔥个人主页: 中草药 🔥专栏:【Java】登神长阶 史诗般的Java成神之路 🐺一.冯诺依曼体系结构 认识计算机的祖师爷 -- 冯诺依曼 冯诺依曼(John von Neumann,1903年12⽉28⽇-1957年2⽉8⽇&…

调用华为API实现语音合成

目录 1.作者介绍2.华为云语音合成2.1 语音合成介绍2.2 华为语音合成服务2.3 应用场景 3. 实验过程以及结果3.1 获取API密钥3.2 调用语音合成算法API3.3 实验代码3.4 运行结果 1.作者介绍 袁斌,男,西安工程大学电子信息学院,2023级研究生 研究…

SpringBoot整合Skywalking

下载Java Agent 官网:https://skywalking.apache.org/downloads/ 提示:Agent最好到网上找一找之前的版本,新版本可能有bug,如果出现了并且网上也几乎没有这个版本的解决方法那么就切换之前的版本 本地启动时 -javaagent:d:\opt\…

建筑特种工高处作业吊篮安装拆卸工题库

1、施工现场外租吊篮设备,在施工前应由( )编制专项施工方案,并由( )技术负责人和现场总监理工程师签字后实行。 A 使用单位 使用单位 B 使用单位 租赁单位 C 租赁单位 使用单位 D 租赁单位 租赁单位 2、施工现场外租吊篮…

java基础语法整理 ----- 上

java基础语法 一、变量二、数据类型三、标识符四、键盘录入五、判断语句1. 三种格式2. 练习题 六、switch语句七、循环八、循环控制语句九、方法 一、变量 1.什么是变量: 在程序运行过程中,其值可以发生改变的量从本质上讲,变量是内存中的一…

MineAdmin 前端打包后,访问速度慢原因及优化

前言:打包mineadmin-vue前端后,访问速度很慢,打开控制台,发现有一个index-xxx.js文件达7M,加载时间太长; 优化: 一:使用文件压缩(gzip压缩) 1、安装compre…

java基础练习题

1、一个".java"源文件中是否可以包括多个类?有什么限制? 可以包含多个类。但是只有一个类可以声明为public,且要求声明为public的类的类名与源文件名相同。 2、java的优势? a、跨平台性 b、安全性高 c、简单性 d、…

无延迟,持续畅玩 - Wi-Fi 6 助力打造游戏厅极致体验

1、需求背景: 连锁游戏厅行业竞争激烈,顾客对高品质的游戏体验有着高要求。网络是游戏厅的核心基础设施之一,需要确保游戏过程中的网络连接稳定性和顾客满意度。 长时间稳定连接 为保证顾客的游戏体验感,游戏厅要确保网络连接长…