redis-4 搭建redis集群

news2024/11/23 11:40:52

1.为什么需要redis集群?

Redis 集群提供了高可用性、横向扩展和数据分片等功能,使得 Redis 能够应对大规模的数据存储和高并发访问的需求。以下是一些需要使用 Redis 集群的常见情况:

  1. 高可用性:通过在多个节点之间进行数据复制和故障转移,Redis 集群能够保证即使出现节点故障也能够保持系统的可用性。这是因为即使某个节点不可用,仍然可以从其他节点获取相同的数据。

  2. 横向扩展:当单个 Redis 实例无法满足系统的性能需求时,可以通过增加更多的节点来扩展整个集群的性能和容量。这种方式称为横向扩展,可以通过增加节点来增加集群的总体容量和吞吐量,从而满足系统的需求。

  3. 数据分片:Redis 集群支持将数据分片存储在不同的节点上,以便有效地管理大规模的数据集。通过数据分片,可以将数据均匀地分布在多个节点上,从而降低单个节点的负载和提高系统的整体性能。

总的来说,Redis 集群能够提供高可用性、横向扩展和数据分片等功能,使得 Redis 能够适应大规模的数据存储和高并发访问的需求。

2. 搭建集群

2.1配置集群所需要的环境

我们现在介绍的是伪集群,当然真实情况跟这样差不了多少

Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。

要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。

2.2配置六台伪服务器

2.2.1创建他们的目录

2.2.2修改配置文件

2.2.2.1在7001目录下创建配置文件

vim redis.conf

2.2.2.2修改配置文件
include /usr/java/redis/redis-5.0.14/redis.conf
port 7001
pidfile "/var/run/redis_7001.pid"
dbfilename "dump_7001.rdb"
dir "/usr/myredis/7001"
logfile "/usr/myredis/7001/redis_err_7001.log"
bind 0.0.0.0
protected-mode no
daemonize yes

cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
2.2.2.3把这个配置文件复制给另外几个文件夹
echo ./7002 ./7003 ./7004 ./7005 ./7006 | xargs -n 1 cp -v /usr/java/redis_cluster/7001/redis.conf

2.3搞一个一键启动

编写一个shell脚本

#!/bin/bash
/usr/local/bin/redis-server /usr/local/myredis/7001/redis.conf
/usr/local/bin/redis-server /usr/local/myredis/7002/redis.conf
/usr/local/bin/redis-server /usr/local/myredis/7003/redis.conf
/usr/local/bin/redis-server /usr/local/myredis/7004/redis.conf
/usr/local/bin/redis-server /usr/local/myredis/7005/redis.conf
/usr/local/bin/redis-server /usr/local/myredis/7006/redis.conf

bash stredis.sh 一键启动各个服务

2.4创建redis的集群

/usr/local/bin/redis-cli --cluster create 192.168.37.33:7001 192.168.37.33:7002 192.168.37.33:7003 192.168.37.33:7004 192.168.37.33:7005 192.168.37.33:7006 --cluster-replicas 1

2.5使用cli连接redis集群

-c   cluster

-h  主机ip

-p   端口号

/usr/java/redis/bin/redis-cli -c -h 192.168.159.34 -p 7002

2.6查询集群状态

只有进入节点中cli 才可以查看集群状态

3.新增主节点

3.1新建文件夹及复制配置文件

3.2添加节点

/usr/local/bin/redis-cli --cluster add-node 192.168.37.33:7007 192.168.37.33:7001

 3.3分配槽slot

新添加的节点为主节点 但是slot为0,没有卵用

给他再分配一下从节点

/usr/local/bin/redis-cli --cluster add-node 192.168.37.33:7008 192.168.37.33:7002 --cluster-slave --cluster-master-id 7dfb72f66759e044b36b3431e8dcd0b366bc62b1

yes即可

4.slot槽

4.1在集群中录入值

不在一个slot下的键值,是不能使用mget,mset等多键操作

将他们设置一个组,才能存进去

5.删除从节点

从节点只读数据没有槽

 /usr/local/bin/redis-cli --cluster del-node 192.168.37.33:7001 5b6ca7235628db7a3d534ad8158a95b1b034e0e5

5.1删除完检查节点状态

 /usr/local/bin/redis-cli --cluster check 192.168.37.33:7003

已经没有7008节点了
5.2删除主节点

5.2.1归还槽

5.2.2删除节点

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

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

相关文章

网络编程1

什么是网络编程 ⽹络编程,指⽹络上的主机,通过不同的进程,以编程的⽅式实现⽹络通信(或称为⽹络数据传输)。 当然,我们只要满⾜进程不同就⾏;所以即便是同⼀个主机,只要是不同进程…

【服务器Midjourney】创建部署Midjourney网站

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站

数据结构.双链表循环链表

一、1.双链表的初始化 void InitLNode(LinkList& L)//双链表的初始化 {L (LNode*)malloc(sizeof(LNode));L->prior NULL;L->next NULL;} 2.双链表的插入 void DInsert(LNode* p,LNode*s)//在p结点后面插入s结点 {s->next p->next;s->next->prior s;…

支持向量机(SVM)详解

支持向量机(support vector machines,SVM)是一种二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机。 1、线性可分支持向量机与硬间隔最大化 1.1、线性可分支持向量机 考虑一个二分…

数据结构篇-03:堆实现优先级队列

本文着重在于讲解用 “堆实现优先级队列” 以及优先级队列的应用,在本文所举的例子中,可能使用优先级队列来解并不是最优解法,但是正如我所说的:本文着重在于讲解“堆实现优先级队列” 堆实现优先级队列 堆的主要应用有两个&…

MySQL索引类型及数据结构【笔记】

1 索引类型 返回面试宝典 主键索引(PRIMARY):数据列不允许重复,不允许为NULL,一个表只能有一个主键。 唯一索引(UNIQUE):数据列不允许重复,允许为NULL,一个表允许多个列创建唯一索引…

【Go】深入理解 Go map:赋值和扩容迁移 ①

文章目录 map底层实现hmapbmap map hash冲突了怎么办? map扩容触发扩容时机扩容小结为什么map扩容选择增量(渐进式扩容)?迁移是逐步进行的。那如果在途中又要扩容了,怎么办? map翻倍扩容原理 map写入数据内…

Easysearch:语义搜索、知识图和向量数据库概述

什么是语义搜索? 语义搜索是一种使用自然语言处理算法来理解单词和短语的含义和上下文以提供更准确的搜索结果的搜索技术。旨在更好地理解用户的意图和查询内容,而不仅仅是根据关键词匹配,还通过分析查询的语义和上下文来提供更准确和相关的…

Spring与Redis集成

1.引入RedisTemplate 据以前的情况,我们在Java中使用Redis时一般是使用Jedis来操作的,大致的一段代码如下所示 Overridepublic User findUserById(Integer id) {User user null;Jedis jedis null;try {jedis jedisPool.getResource();String userStr…

【YOLO系列算法俯视视角下舰船目标检测】

YOLO系列算法俯视视角下舰船目标检测 数据集和模型YOLO系列算法俯视视角下舰船目标检测YOLO系列算法俯视视角下舰船目标检测可视化结果 数据集和模型 数据和模型下载: YOLOv6俯视视角下舰船目标检测训练好的舰船目标检测模型舰船目标检测数据YOLOv7俯视视角下舰船…

机器学习|ROC曲线和AUC值

概念AUC(Area Under Curve)被定义为ROC曲线下的面积。其中,ROC曲线全称为受试者工作特征曲线 (receiver operating characteristic curve), 模型会计算出所判断事物为汉堡🍔的概率,而…

基于DataKit迁移MySQL到openGauss

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

华为二层交换机与防火墙配置上网示例

二层交换机与防火墙对接上网配置示例 组网图形 图1 二层交换机与防火墙对接上网组网图 二层交换机简介配置注意事项组网需求配置思路操作步骤配置文件相关信息 二层交换机简介 二层交换机指的是仅能够进行二层转发,不能进行三层转发的交换机。也就是说仅支持二层…

[SwiftUI]系统弹窗和自定义弹窗

一、系统弹窗 在 SwiftUI 中,.alert 是一个修饰符,用于在某些条件下显示一个警告对话框。Alert 可以配置标题、消息和一系列的按钮。每个按钮可以是默认样式、取消样式,或者是破坏性的样式,它们分别对应不同的用户操作。 1.Aler…

Power ModeII 插件的下载与使用-----idea

下载 Marketplace里面搜索下载即可 使用 下载后重启软件就可以用了 下面是一些关于Power ModeII ,我的个性化设置截图 以及相关设置解释 插件或扩展的设置面板【用于给代码编辑器或集成开发环境(IDE)添加视觉效果】 主要设置 ENTER POWE…

【控制算法笔记】卡尔曼滤波(二)——基于状态空间表达的KF基本计算流程以及Python实现

本文是个人学习笔记,包含个人理解,如有错误欢迎指正。 KF算法更多的情况下会用来处理复杂的非线性数据,尤其是当对象特征或检测的状态量不止一个时就得使用状态方程的方法,利用线性代数的计算方式来解决噪声的估计问题。这其中涉及…

uniapp微信小程序-请求二次封装(直接可用)

一、请求封装优点 代码重用性:通过封装请求,你可以在整个项目中重用相同的请求逻辑。这样一来,如果 API 发生变化或者需要进行优化,你只需在一个地方修改代码,而不是在每个使用这个请求的地方都进行修改。 可维护性&a…

Java基础数据结构之哈希表

概念 顺序结构以及平衡树 中,元素关键码与其存储位置之间没有对应的关系,因此在 查找一个元素时,必须要经过关键 码的多次比较 。 顺序查找时间复杂度为 O(N) ,平衡树中为树的高度,即 O( log2N ) ,搜索的效…

应急响应-内存分析

在应急响应过程中,除了上述几个通用的排查项,有时也需要对应响应服务器进行内存的提权,从而分析其中的隐藏进程。 内存的获取 内存的获取方法有如下几种: 基于用户模式程序的内存获取;基于内核模式程序的内存获取&a…

SparkSql---用户自定义函数UDFUDAF

文章目录 1.UDF2.UDAF2.1 UDF函数实现原理2.2需求:计算用户平均年龄2.2.1 使用RDD实现2.2.2 使用UDAF弱类型实现2.2.3 使用UDAF强类型实现 1.UDF 用户可以通过 spark.udf 功能添加自定义函数,实现自定义功能。 如:实现需求在用户name前加上"Name:…