Redis单机集群

news2024/11/23 6:36:20

先放张图

在这里插入图片描述

上图就是典型的哨兵模式

  • salve:从服务器,需要进行同步主服务器的数据

  • master:主服务器,负责执行客户端的请求,将数据更新信息发送给从服务器,保持数据一致

  • 哨兵:接受客户端请求,并将其转给主服务器,同时对所有服务器进行监控

1、哨兵为什么要对所有服务器监控

因为哨兵要知道哪些服务器挂掉,如果主服务器挂掉,就需要进行选举,选出一台从服务器替代主服务器(自动切换主从),如果从服务器挂掉,选举时就不会考虑该从服务器,也就是主要执行的工作是状态检测和故障切换,不需要进行人工切换主从服务器

2、如果哨兵挂掉怎么办

可以多建几个哨兵,实现高可用性,但要注意的是,客户端访问的时候,只会访问一个哨兵。

3、哨兵的局限性

  • 哨兵只是单纯解决了切换主从服务器的问题,可以进行自动切换,不需要进行手动切换,仍然没有根本性解决并发量高的问题

  • 会有访问瞬断的问题(切换主从服务器需要时间,虽然短暂,但这段时间仍然会停止服务)

高可用集群

Redis使用的集群模式就是高可用集群

还是先上图

在这里插入图片描述

介绍图中的几个对象

  • Redis-Cluster:接受客户端的请求,并且进行负载均衡,将请求按照负载均衡规则分配给各个Master(每一个小集群)

  • Master与其slave:一个小集群,与上面哨兵模式提到的集群类似

1、为什么叫高可用集群?哪里高可用了?

高可用这个概念是相对来说的,并不能真正百分百实现,当小集群的Master挂掉时,小集群内部会进行选举切换,但在这个瞬断期间,Redis并不会停止服务,只是不会将请求分给挂断的集群去处理,会分发给其他集群进行处理,高可用性比哨兵模式会好很多。

但是仍然会有请求失败,比如一个请求刚好请求给其中一个Master,Master还没执行完就挂掉了,这也会造成请求丢失,所以没有百分百的高可用。

2、优点是什么?

优点就是前面所说的高可用性提高了,减少了停止服务时间。

3、内部通信原理是什么?

比如现在有一个添加键值对对象的请求是给到了集群A去实现,那么假如现在有一个访问刚添加的键值对对象的请求,不是给到了集群A而是给到了集群B,那么此时就会进行转换集群,也就是从集群B中转换到了集群A,然后再进行读取(因为集群B并没有那个键值对信息,只有集群A有)

搭建单机集群


这里使用虚拟机,系统为Centos7。

由于我已经安装好了Redis,这里就不进行介绍Redis的安装,自行百度吧。

这里我要创建3个小集群,每个小集群一个主服务器,一个从服务器,也就是三主三从架构

主要步骤如下

  • 创建文件夹

  • 复制配置文件,并修改

  • 命令运行

创建文件夹

这里我是在Redis安装目录进行的

#创建集群文件夹

mkdir redis-cluster

#进入到集群目录

cd redis-cluster

#创建各个小集群的文件夹

mkdir 8001

mkdir 8002

mkdir 8003

mkdir 8004

mkdir 8005

mkdir 8006

复制默认配置文件,并修改一些选项

需要需改的选项

  • daemonize yes 开启后台启动

  • port 800x 对应各个端口号(由于是单机集群,所以只能使用端口号替代不同服务)

  • bind xxxx(这里必须要绑定ip地址,不能使用localhost,也就是127.0.0.1)

  • dir /usr/local/redis-cluster/800x/(绑定数据文件存放的位置,否则会出现混乱,这里绑定的文件夹就是上面创建的文件夹的位置)

  • cluster-enabled yes(开启集群)

  • cluster-config-file nodes-800x.conf (这个是集群节点信息文件,这里的800x和port要进行对应)

  • cluster-node-timeout 15000(小集群超过多长时间不响应就会被退出集群,单位为毫秒)

  • appendonly yes(开启AOF持久化操作)

这里是每个小集群都要去复制执行喔

**复制命令

cp redis.conf …/800x

**使用vim进行搜索

/搜索内容 + 回车

**使用vim进行统一修改

:%s/要修改的内容/修改成什么内容/g + 回车

**比如,将所有的8001修改成8002

:%s/8001/8002/g

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

开启所有服务器

**使用redis的redis-server脚本进行开启

**注意这里要将8001,8002,8003,8004,8005,8006都开启

/usr/local/redis/bin/redis-server /usr/local/redis-cluster/800x/redis.conf

开启完毕后,我们可以看后台进程

ps -ef|grep redis

在这里插入图片描述

可以看到,已经全部启动起来了,而且后面还标有cluster,但是到现在这一步,并没有完成搭建,还需使用Ruby命令

UT_Trim/article/details/116138403)使用Ruby命令开启集群

这里先下载Ruby

yum install ruby

yum install rubygems

gem install redis --version 3.0.0 (这里要用3.0以上的版本,因为Redis3.0才开启集群支持)

接下来我们查找一下redis-cli在哪里

find / -name redis-cli

在这里插入图片描述

**进入到该目录

cd /usr/local/redis/bin

**执行该命令

./redis-cli --cluster create 192.168.3.31:8001 192.168.3.31:8002 192.168.3.31:8003 192.168.3.31:8004 192.168.3.31:8005 192.168.3.31:8006 --cluster-replicas 1 -a 0110x3

在这里插入图片描述

这里要对参数进行说明

–cluster-replicas 1 :代表执行主从集群配置,而且主服务器和从服务器为1比1,-a是因为我设置了密码验证,所以要加上

下面为开启成功的信息

在这里插入图片描述

但还真正建立,需要输入Yes确定后,就会显示主从关系之间的信息

在这里插入图片描述

验证集群是否开启成功

随便连上一个主服务器

#随便连一个客户端

./redis-cli -c -h 193.168.3.31 -p 800x -a 密码

#输入下面命令查看

cluster info

cluster node

在这里插入图片描述

这里要注意几个参数

  1. cluster_size:主服务器个数

  2. cluser_known_nodes:从服务器个数

在这里插入图片描述这里也要注意几个参数

  • slave后面的一串id,对应的是其主服务器的id

至此搭建就完毕了

下面进行测试一下吧

在这里插入图片描述

从上面一大段测试栗子,可以看到,进行插入键值对是不断进行轮换的结点,这也是负载均衡的一种方式,成为轮询。

关闭集群


对应所有端口号进行杀掉所有Redis进程即可

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

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

相关文章

【前端】前端监控体系

文章目录一、所需的数据1.1、生命周期数据1.2、HTTP测速数据1.3、系统异常数据1.4、用户行为数据1.5、用户日志二、埋点与收集2.1、数据埋点2.1、数据上报2.3、数据监控对于一个应用来说,除了前期的开发和设计,在项目上线后端维护很重要,其中…

Docker 讲解与基本操作

哈喽~大家好,这篇来看看Docker 讲解与基本操作。 🥇个人主页:个人主页​​​​​ 🥈 系列专栏:【微服务】 🥉与这篇相关的文章: SpringCloud Sentinel 使用Spr…

最优化方法——QR分解

目录 系列文章目录 一、问题 二、实验思路综述 1.实验工具及算法 2.实验数据 3.实验目标 4.实验步骤 三、相关线性代数知识导入 1.线性无关与基 2.标准正交 3.Gram-Schmidt(正交化)算法 四、QR分解 1.Gram-Schmidt QR 1.1 算法原理 1.2 算法流程 1.3 复杂度分析…

JSP连接MySQL数据库

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者…

Allegro如何设置走线禁布区操作指导

Allegro如何设置走线禁布区操作指导 Allegro可以任意设置走线的禁布区,以下图为例,需要在两个pin中间设置一个所有层都不能走线的禁布区域 具体操作如下 选择shape Add Rect命令 Option选择画在Route keepout-All层,type选择Static solid 鼠标移动到器件pad附近,右击会…

JavaScript -- Map对象及常用方法介绍

文章目录Map1 Map介绍2 创建一个Map3 常用方法介绍4 将Map转换为数组5 从数组构建Map6 遍历MapMap 1 Map介绍 Map用来存储键值对结构的数据**(key-value)**Object中存储的数据就可以认为是一种键值对结构Map和Object的主要区别: Object中的…

在vue3项目中使用新版高德地图

高德开发平台 : 高德开放平台 | 高德地图API (amap.com) 1. 首先你要注册好账号登录 2. 获取key和密钥 自2021年12月02日升级,升级之后所申请的 key 必须配备安全密钥 jscode 一起使用 NPM方式安装和使用(基础版): 按 NPM 方式安装使用 Loader : npm i amap/amap…

OS——进程并发控制(五大经典问题信号量机制描述)

目录 一、经典问题信号量机制描述 1、任意两个进程可以并发的条件(Bernstein条件) 2、临界区管理原则 3、信号量的P、V操作 (1)P、V操作 (2)P、V操作的原则 (3)用信号量解决进…

[开发浏览器实战]关于Firefox火狐浏览器的说明一二(国内版 国际版区别 账号切换 插件-恢复关闭的标签页 插件-tempermonkey油猴)

[开发浏览器实战]关于Firefox火狐浏览器的说明一二1.下载地址2.同步账号不一样国内版3.浏览器关于内容不同:国内版国际版![在这里插入图片描述](https://img-blog.csdnimg.cn/8ca563d2aa2d43b0b52b6cf50bbffa0c.png)灵活使用firefox推荐插件1.tempermonkey油猴2.恢复关闭的标签…

从零学习VINS-Mono/Fusion源代码(五):VIO初始化

本节分析VIO初始化部分 VINS-Mono/Fusion代码学习系列: 从零学习VINS-Mono/Fusion源代码(一):主函数 从零学习VINS-Mono/Fusion源代码(二):前端图像跟踪 从零学习VINS-Mono/Fusion源代码&#x…

Orin PPS failed to request pps gpio修改

前言 在使用Orin PPS过程中,已经配置了设备树文件,但是遇到了申请GPIO失败的问题,如下图: 申请GPIO失败。 1.分析及解决过程 1.1 设备树文件修改 在设备树文件hardware/nvidia/platform/t23x/concord/kernel-dts/cvb/tegra234-p3737-0000-a00.dtsi 中,添加关于pps gpi…

k8s,30分钟部署一个kubernetes集群【1.17】

作者:李振良 官方网站:http://www.ctnrs.com kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm init# 将一个 Node 节点加入到当前集群中 $ kubeadm join <Mast…

基于jsp+java+ssm的农产品购物商城系统-计算机毕业设计

项目介绍 随着计算机、信息化网络的普及&#xff0c;电子商务的兴起&#xff0c;网络支付以及网络安全体系逐渐完善&#xff0c;将人们的生活带入到网络时代&#xff0c;越来越多的人喜欢网上购物&#xff0c;消费者足不出户便可以买到自己喜欢的物品&#xff0c;只要轻轻点击…

TypeScript算法题实战——二叉搜索树篇

二叉搜索树&#xff0c;也叫二叉查找树、二叉排序树&#xff0c;是具有下列性质的二叉树&#xff1a; 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b; 若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结点的值。 注意…

零拷贝(Zero Copy)技术

概念 我们知道Linux系统分为用户态和内核态&#xff0c;在用户态每发起一次IO请求&#xff0c;就需要进行2次上下文切换&#xff08;分别是用户态->内核态&#xff0c;内核态→用户态&#xff09;&#xff0c;和一次CPU拷贝&#xff08;将数据从内核缓存拷贝到用户缓存&…

redis设置密码并修改查看的几种方式

前言 最近正值世纪杯期间&#xff0c;不知道大家心目中的球队成绩如何&#xff0c;最近在工作中需要设置redis服务器的密码的场景 设置密码可以在很大的程度保护redis服务器&#xff0c;但是相关的命令需要通过密码校验之后才能使用 下面就分享给大家两种设置redis服务器的密…

Java并发编程—CompletableFuture的异步执行案例

在博主前几篇博客中&#xff0c;https://blog.csdn.net/qq_52545155/article/details/128167519?spm1001.2014.3001.5501&#xff0c;给大家分享了关于多线程中异步任务的执行和一些相关概念&#xff0c;在这篇博客中&#xff0c;主要是通过一个实际的案例让大家对于Completab…

利用卷神经网络实现IOSLab数字手写图像识别

利用卷神经网络实现IOSLab数字手写图像识别 文章目录利用卷神经网络实现IOSLab数字手写图像识别一、前言二、作业要求三、数据集样本分析四、代码实现1、运行环境2、导入依赖项3、导入数据集4、加载数据和数据预处理5、划分数据集6、CNN网络结构构建7、编译模型8、训练模型9、模…

性能分析之解析 RESAR 性能分析七步法

文章目录一、压力场景数据分析二、架构分析三、响应时间分析四、全局监控分析五、定向监控六、判断性能瓶颈七、提出解决方案一、压力场景数据分析 下面是⼀个登录接⼝的基准场景测试&#xff0c;JMeter 启动后&#xff0c;线程在 1-2 个的时候 TPS 已经达到 200 左右&#xf…

JavaScript -- 字符串常用方法及示例代码介绍

文章目录字符串的方法1 length2 索引3 str.at()4 str.charAt()5 str.concat()6 str.includes()7 str.indexOf() 和 str.lastIndexOf()8 str.startsWith() 和 str.endsWith()9 str.padStart() 和 str.padEnd()10 str.replace() 和 str.replaceAll()11 str.slice() 和 str.substr…