redis—cluster集群

一:Redis Cluster特点

  • 多主多从,去中心化:从节点作为备用,复制主节点,不做读写操作,不提供服务
  • 不支持处理多个key:因为数据分散在多个节点,在数据量大高并发的情况下会影响性能;
  • 支持动态扩容节点:这是我认为算是Rerdis Cluster最大的优点之一;
  • 节点之间相互通信,相互选举,不再依赖sentinel:准确来说是主节点之间相互“监督”,保证及时故障转移

二:Redis Cluster与其它集群模式的区别

  • 相比较sentinel模式,多个master节点保证主要业务(比如master节点主要负责写)稳定性,不需要搭建多个sentinel实例监控一个master节点
  • 相比较一主多从的模式,不需要手动切换,具有自我故障检测,故障转移的特点
  • 相比较其他两个模式而言,对数据进行分片(sharding),不同节点存储的数据是不一样的
  • 从某种程度上来说,Sentinel模式主要针对高可用(HA),而Cluster模式是不仅针对大数据量,高并发,同时也支持HA。

三:redis-cluster实验部署

1.准备工作:

6台虚拟机(Red Hat Enterprise Linux 9)下载软件redis

搭建三主三从架构

172.25.254.10

[root@localhost ~]# yum install redis -y

172.25.254.20

[root@localhost ~]# yum install redis -y

172.25.254.30

[root@localhost ~]# yum install redis -y

172.25.254.100

[root@localhost ~]# yum install redis -y

172.25.254.110

[root@localhost ~]# yum install redis -y

172.25.254.120

[root@localhost ~]# yum install redis -y

2.172.25.254.10主机

修改redis配置文件

[root@localhost ~]# vim /etc/redis/redis.conf

修改端口号

设置密码123456

设置requirepass密码

开启cluster集群功能,指定集群配置文件

节点加入集群的超时时间

启动redis

[root@localhost ~]# systemctl enable --now redis

检测redis端口是否启动成功

[root@localhost ~]# netstat -antlupe |grep redis

开启redis

[root@localhost ~]# redis-cli

在172.25.254.10主机上将修改过的配置文件传递到其他5台虚拟机上

[root@localhost ~]# for i in 20 30 100 110 120;do scp /etc/redis/redis.conf root@172.25.254.$i:/etc/redis/redis.conf;done

3.配置cluster集群

各台虚拟机开启redis

172.25.254.20

[root@localhost ~]# systemctl enable --now redis

172.25.254.30

[root@localhost ~]# systemctl enable --now redis

172.25.254.100

[root@localhost ~]# systemctl enable --now redis

172.25.254.110

[root@localhost ~]# systemctl enable --now redis

172.25.254.120

[root@localhost ~]# systemctl enable --now redis

172.25.254.10主机上开启集群认证

注意:开启集群前,各台虚拟机记得关闭防火墙

[root@localhost redis]# systemctl stop firewalld.service 

[root@localhost ~]# redis-cli --cluster create -a 123456 172.25.254.10:6379 172.25.254.20:6379 172.25.254.30:6379 172.25.254.100:6379 172.25.254.110:6379 172.25.254.120:6379 --cluster-replicas 1

显示集群添加成功

查看一组一从的对应关系,关系随机对应。

172.25.254.100对应的master为172.25.254.20

172.25.254.110对应的master为172.25.254.10

172.25.254.120对应的master为172.25.254.30

可以使用命令检测集群节点信息

[root@localhost ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379

4.测试

172.25.254.10上

可以创建lee用户失败

[root@localhost ~]# redis-cli -a 123456

127.0.0.1:6379> set name lee

信息指引到172.25.254.20主机

在172.25.254.20上

可以创建lee用户成功

[root@localhost ~]# redis-cli -a 123456

cluster集群创建成功

 

四:集群扩容

添加新的机子进入集群(172.25.254.40和172.25.254.130)

将原来的三主三从变为了四主四从

172.25.254.40

下载redis软件包

[root@localhost ~]# yum install redis -y

启动redis

[root@localhost ~]# systemctl start redis

172.25.254.130

下载redis软件包

[root@localhost ~]# yum install redis -y

启动redis

[root@localhost ~]# systemctl start redis

172.25.254.10主机上

将172.25.254.40添加到172.25.254.20所在的集群中

[root@localhost ~]# redis-cli -a 123456 --cluster add-node 172.25.254.40:6379 172.25.254.20:6379

172.25.254.10主机上测集群节点信息

[root@localhost ~]# redis-cli -a 123456 --cluster check 172.25.254.10:6379 

显示有四个master:172.25.254.10,172.25.254.20,172.25.254.30,172.25.254.40

其中172.25.254.40底下没有槽位则不能存储数据

172.25.254.10主机上

对172.25.254.40主机分享槽位,将172.25.254.20集群中重新划分槽位

[root@localhost ~]# redis-cli -a 123456 --cluster reshard 172.25.254.20:6379 

将172.25.254.130主机添加到172.25.254.20集群中

[root@localhost ~]# redis-cli -a 123456 --cluster add-node 172.25.254.130:6379 172.25.254.20:6379 --cluster-slave --cluster-master-id 2f5e5888581db794171bca6e364850933a342072

使用命令检测集群节点信息

[root@localhost ~]#  redis-cli -a 123456 --cluster check 172.25.254.10:6379

172.25.254.130对应的master为172.25.254.40

五:clsuter集群维护

添加节点的时候是先添加node节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相反,是先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除,如果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除

将节点从集群中移除

删除172.25.254.130节点,则删除172.25.254.130对应的id

[root@localhost ~]# redis-cli -a 123456 --cluster del-node 172.25.254.130:6379 b371e1c8d310946e051684176cf14e31f05cec17 

再次使用命令查询节点

[root@localhost ~]#  redis-cli -a 123456 --cluster check 172.25.254.10:6379

172.25.254.130节点被删除

恢复槽位

[root@localhost ~]# redis-cli -a 123456 --cluster reshard 172.25.254.20:6379

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

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

相关文章

Columns Page “列”页面

“列”页提供了列管理工具,其中包括用于添加和删除列的按钮、显示绑定数据源中字段名称的列表框以及网格列、提供对所选列属性的访问的属性网格。 Columns 页面提供 Column properties (列属性)、Column options (列选项&#xff…

Electron-(三)网页报错处理与请求监听

在前端开发中,Electron 是一个强大的框架,它允许我们使用 Web 技术构建跨平台的桌面应用程序。在开发过程中,及时处理网页报错和监听请求是非常重要的环节。本文将详细介绍 Electron 中网页报错的日志记录、webContents 的监听事件以及如何监…

如何使用JMeter进行性能测试的保姆级教程

性能测试是确保网站在用户访问高峰时保持稳定和快速响应的关键环节。作为初学者,选择合适的工具尤为重要。JMeter 是一个强大的开源性能测试工具,可以帮助我们轻松模拟多用户场景,测试网站的稳定性与性能。本教程将引导你通过一个简单的登录场…

微信小程序canvas 生成二维码图片,画图片,生成图片,将两个canvas结合并保存图片

需求实现步骤如下 先定义两个canvas一个canvas myQrcode画二维码的图片另一个canvas mycanvas画一个背景图,并把二维码画到这个canvas上,mycanvas这个canvas生成一张图片,返回图片的临时路径最后保存图片到手机 首先wxml,新版微信小程序can…

Java之继承抽象类用法实例(三十一)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

使用Matplotlib绘制箱线图:详细指南与示例

在数据分析和可视化领域,箱线图(Box Plot)是一种强大的工具,用于展示数据的分布特征,包括中位数、四分位数、异常值等。本文将详细介绍如何使用Matplotlib库在Python中绘制箱线图,并通过一个实际的血压数据…

从0开始linux(13)——进程(4)进程空间地址(1)

欢迎来到博主的专栏:从0开始linux 博主ID:代码小豪 文章目录 进程空间地址 还记得博主在之前介绍子进程时说过的话吗?子进程与父进程共享代码,而数据却不共享;这很好理解,因为子进程和父进程是不同的进程&a…

Java线程安全集合之COW

概述 java.util.concurrent.CopyOnWriteArrayList写时复制顺序表,一种采用写时复制技术(COW)实现的线程安全的顺序表,可代替java.util.ArrayList用于并发环境中。写时复制,在写入时,会复制顺序表的新副本&…

K8S调度不平衡问题分析过程和解决方案

不平衡问题排查 问题描述: 1、业务部署大量pod(据反馈,基本为任务型进程)过程中,k8s node内存使用率表现不均衡,范围从80%到百分之几; 2、单个node内存使用率超过95%,仍未发生pod驱逐,存在node…

Janus:开创统一的多模态理解和生成框架

Janus是DeepSeek开源的多模式自回归框架,统一了多模态理解和生成,既可以理解图片内容又可以生成图片。 1.简介 Janus 是一种新颖的自回归框架,它将多模态理解和生成统一起来。它通过将视觉编码解耦为单独的路径来解决以前方法的局限性&…

jmeter发送post请求

在jmeter中,有两种常用的请求方式,get和post.它们两者的区别在于get请求的参数一般是放在路径中,可以使用用户自定义变量和函数助手等方式进行参数化,而post请求的参数不能随url发送,而是作为请求体提交给服务器。而在…

OpenWRT 和 Padavan 路由器配置网络打印机 实现远程打印

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 之前有给大家介绍过 Armbian 安装 CUPS 作为打印服务器,像是 N1 盒子、玩客云,甚至是随身 WiFi 都可以通过 CUPS 来进行打印。但是有些朋友不想专门为打印机添置一个设备&#xff0…

Spring AI 1.0.0 M1版本新特性!

Spring AI 1.0.0 M1版本新特性介绍 前言一、在1.0.0 M1版本中,主要有以下新特性:1.ChatModel2.ChatClient3.多模态的支持4.模型评估RequestResponseAdvisor接口MessageChatMemoryAdvisorPromptChatMemoryAdvisorQuestionAnswerAdvisor动态过滤表达式 Vec…

爬虫逆向-js进阶(续写,搭建网站)

1.搭建简单网站1 from flask import Flask,render_template import requests import json app Flask(name)# **location**的温度是**temp**度,天气状况:**desc**app.route(/) # 绑定处理函数 def index_url():location 101010100data get_weather(lo…

黑马JavaWeb-day02

什么是JavaScript? JavaScript:简称Js,是一门跨平台、面向对象的脚本语言。是用来控制网页行为的,它能使网页可交互 JavaScript和Java是完全不同的语言,无论是概念还是设计。但是基础语法类似。 JavaScript JavaScript引入方式…

第三方软件测试中心有什么特点?江苏软件测试中心推荐

随着软件市场的激烈竞争,软件企业越来越多,为了更好的服务用户以及专心于产品开发工作,将软件测试外包给第三方软件测试中心已经成为了行业发展趋势。第三方软件测试中心顾名思义就是区别于软件开发方和需求方的第三方存在,是专门…

使用 MongoDB 构建 AI:利用实时客户数据优化产品生命周期

在《使用 MongoDB 构建 AI》系列博文中,我们看到越来越多的企业正在利用 AI 技术优化产品研发和用户支持流程。例如,我们介绍了以下案例: Ventecon 的 AI 助手帮助产品经理生成和优化新产品规范 Cognigy 的对话式 AI 帮助企业使用任意语言&a…

《MYSQL实战45讲 》 优化器如何选择索引?

SHOW VARIABLES LIKE long_query_time; set long_query_time0 优化器如何选择索引? 1.扫描的行数 估计出各个索引大致的要扫描的行数,行数越少,效率越高。 索引的基数也叫区分度,就是这个索引所在的字段上不同的值又多少个。优…

10.21 多进程间通信-信号、消息队列

作业&#xff1a;使用消息队列实现两个进程间通信 编程代码&#xff1a;使用父子进程实现通信 msgsnd.c #include <myhead.h> //定义自定义函数用于接收僵尸进程 void handler(int signo){if(signoSIGCHLD){while(waitpid(-1,NULL,WNOHANG)>0);} } //定义存储消息队…

[云] Deploying Your First Serverless Application

• Goal: • Hands-on lab to get started with Serverless • Agenda: • Deploying Your First Serverless Application • Assignment Introduction Create and test function in AWS Lambda • Lets create an addition function using AWS Lambda. • To create the addi…