【redis 3.2 集群】
目录
一、Redis主从复制
1.概念
2.作用
2.1 数据冗余
2.2 故障恢复
2.3 负载均衡
2.4 高可用
3.缺点
4.流程
4.1 第一步
4.2 第二步
4.3 第三步
4.4 第四步
5.搭建
5.1 主
5.2 从
6.验证
二、Reids哨兵模式
1.概念
2.作用
2.1 监控
2.2 自动故障转移
2.3 通知(提醒)
3.缺点
4.结构
4.1 哨兵节点
4.2 数据节点
5.搭建
6.验证
三、Redis集群
1.概述
2.原理
3.架构细节
3.1 细节一
3.2 细节二
3.3 细节三
3.4 细节四
4.选举过程
5.搭建
5.1 基础搭建
5.2 分别修改配置文件中
5.3 启动服务
5.4 构建集群
5.4.1 将其他节点加入集群
5.4.2 分配slot
5.4.3 建立主从关系
5.5 查看命令
5.6 重置集群命令
一、Redis主从复制
1.概念
是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。
2.作用
2.1 数据冗余
主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
2.2 故障恢复
当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
2.3 负载均衡
在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
2.4 高可用
除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
3.缺点
- 故障恢复无法自动化
- 写操作无法负载均衡
- 存储能力受到单机的限制
4.流程
4.1 第一步
若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。
4.2 第二步
无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。
4.3 第三步
后台进程完成缓存操作之后,Maste机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。
4.4 第四步
Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。
5.搭建
5.1 主
修改配置文件
bind 0.0.0.0
port 6379
protected-mode = no
daemonize = yes
5.2 从
修改配置文件
bind 0.0.0.0
port 6380
protected-mode = no
daemonize = yes
slaveof 192.168.115.160 6379
6.验证
使用redis-cli命令行登录redis服务器,输入role指令查看状态
在master节点上,录入数据,在slave节点上查看到对应数据即可
二、Reids哨兵模式
1.概念
是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 Master 并将所有 Slave 连接到新的 Master。所以整个运行哨兵的集群的数量不得少于3个节点。
注:依托于主从模式
2.作用
2.1 监控
哨兵会不断地检查主节点和从节点是否运作正常。
2.2 自动故障转移
当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
2.3 通知(提醒)
哨兵可以将故障转移的结果发送给客户端。
3.缺点
- 写操作无法负载均衡
- 存储能力受到单机的限制
- 哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。
4.结构
4.1 哨兵节点
哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
4.2 数据节点
主节点和从节点都是数据节点。
5.搭建
vim /etc/redis-sentinel.conf
bind 0.0.0.0
port 26379 Redis哨兵默认的监听端口
protected-mode no 关闭保护模式
daemonize yes
sentinel monitor mymaster 主IP 6379 2
修改 指定该哨兵节点监控ip:6379这个主节点,该主节点的名称是mymaster,最后的2的含义 与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000 判定服务器down掉的时间周期,默认 30000毫秒
sentinel failover-timeout mymaster 180000 故障节点的最大超时时间为180000毫秒
指定日志存放路径
logfile "/var/log/sentinel.log"
指定数据库存放路径
dir "/var/lib/redis"
6.验证
停止master后,slave会通过选举产生新的master
哨兵配置文件会自动修改监听的master节点地址为新的master节点地址
三、Redis集群
1.概述
Redis3.0版本以上开始支持cluster,采用的是hashslot(hash槽),可以将多个Redis实例整合在一起,形成一个群集,也就是将数据分散到群集的多台机器上。
2.原理
Redis Cluster是一个无中心的结构,每个节点都保存数据和整个群集的状态。每个节点都会保存其他节点的信息,知道其他节点所负责的槽,并且会与其他节点定时发送心跳信息,能够及时感知群集中异常的节点。
3.架构细节
3.1 细节一
所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
3.2 细节二
节点的失效(fail)在群集中超过半数的主(master)节点检测失效时才生效。
3.3 细节三
客户端与 redis 节点直连,不需要中间代理(proxy)层,客户端不需要连接群集所有节点,连接群集中任何一个可用节点即可。
3.4 细节四
redis-cluster 把所有的物理节点映射到【0-16383】slot 上,cluster 负责维护 node<->slot<->key。
4.选举过程
- 选举过程是群集中所有master参与,如果半数以上master节点与当前 master 节点通信超时(cluster—node—timeout),认为当前 master 节点挂掉。以下两种情况为整个群集不可用(cluster_state:fail),当群集不可用时,所有对群集的操作都不可用,收到((error)CLUSTEFDOWN The cluster is down)错误。
- 如果群集任意 master挂掉,且当前 master 没有 slave,则群集进入 fail状态,也可以理解成群集的slot映射【0 ~16383】不完整时进入fail状态。
- 如果群集中超过半数的master挂掉,无论是否有slave,群集都进入 fail状态。
- 默认情况下,每个群集的节点都使用两个TCP端口.一个是6379,一个是16379;6379服务于客户端的连接,16379 用于群集总线,即使用二进制协议的节点到节点通信通道。节点使用群集总线进行故障检测、配置更新、故障转移授权等。如果开启了防火墙,需要开放这两个端口。
5.搭建
5.1 基础搭建
mkdir /etc/redis
mv /etc/redis.conf /etc/redis/6379.conf
cd /etc/redis
for i in {0..4};do cp ./6379.conf ./638${i}.conf;done
for i in {0..4};do sed -i "s/port 6379/port 638${i}/" ./638${i}.conf;done
sed -i "s/dir \/var\/lib\/redis/dir \/var\/lib\/redis\/6379/" ./6379.conf
for i in {0..4};do sed -i "s/dir \"\/var\/lib\/redis\/6379\"/dir \"\/var\/lib\/redis\/638${i}\"/" ./638${i}.conf;done
cd /var/lib/redis
mkdir 6379 638{0..4}
5.2 分别修改配置文件
port
cluster-enabled yes
cluster-config-file nodes-【6379~6384】.conf
cluster-node-timeout 15000
5.3 启动服务
for((i=6379;i<=6384;i++));do redis-server /etc/redis/${i}.conf;done
5.4 构建集群
5.4.1 将其他节点加入集群
CLUSTER MEET 192.168.42.138 6380
CLUSTER MEET 192.168.42.138 6381
CLUSTER MEET 192.168.42.138 6382
CLUSTER MEET 192.168.42.138 6383
CLUSTER MEET 192.168.42.138 6384
注:只此步骤在某数据库内部执行
5.4.2 分配slot
redis-cli -h 192.168.42.138 -p 6379 cluster addslots {0..5461}
redis-cli -h 192.168.42.138 -p 6381 cluster addslots {5462..10922}
redis-cli -h 192.168.42.138 -p 6383 cluster addslots {10923..16383}
5.4.3 建立主从关系
redis-cli -h 192.168.42.138 -p 6380 cluster replicate
redis-cli -h 192.168.42.138 -p 6382 cluster replicateredis-cli -h 192.168.42.138 -p 6384 cluster replicate
5.5 查看命令
cluster nodes 查看所有群集节点
cluster info 查看群集状态
5.6 重置集群命令
cluster reset
数据的key不能相同
注:每个节都要重置
相关文章:

【redis 3.2 集群】
目录 一、Redis主从复制 1.概念 2.作用 2.1 数据冗余 2.2 故障恢复 2.3 负载均衡 2.4 高可用 3.缺点 4.流程 4.1 第一步 4.2 第二步 4.3 第三步 4.4 第四步 5.搭建 5.1 主 5.2 从 6.验证 二、Reids哨兵模式 1.概念 2.作用 2.1 监控 2.2 自动故障转移 2.…...

JS 解决鼠标悬浮显示弹窗 迅速离开时弹窗显示到其他位置的延迟问题
解决该问题的思路就是,判断当前鼠标的位置是否在某个div上,如果在这个div上则取消显示悬浮弹窗消息。 首先监听鼠标的移动事件 鼠标移动时判断是否在div里面进行移动了 clientX表示鼠标X的位置 client Y表示鼠标Y的位置 拿到要判断的div元素 获取off…...

树莓派命令行运行调用音频文件的函数,不报错,没有声音解决办法
树莓派接上音频首先需要切换音频不是HDMI,然后可以双击运行wav文件可以播放,但是: 命令行直接运行wav文件报错: Playing WAVE twzc.wav : Signed 16 bit Little Endian, Rate 16000 Hz, Mono命令行运行main方法也是无法播放&am…...
解决无法引入 mysql-connector-j 的问题
开发环境 Windows 10Oracle JDK 1.8Maven 3.8.8IntelliJ IDEA 2022.2.2 问题 在使用 Spring initializr 创建 Spring Boot 项目时,无法引入 mysql-connector-j 这个依赖,报错信息: com.mysql:mysql-connector-j:jar:unknown was not foun…...

解释器模式(Interpreter)
解释器模式是一种行为设计模式,可以解释语言的语法或表达式。给定一个语言,定义它的文法的一种表示,然后定义一个解释器,使用该文法来解释语言中的句子。解释器模式提供了评估语言的语法或表达式的方式。 Interpreter is a behav…...
python读入和读出图像
python提供了PIL库和opencv库对图像进行读取并保存。 图像读入读出 给定一张RGB的彩色图像,PIL库将其读入: import cv2 from PIL import Image # 读入图像 image2 Image.open(cub1.jpg) print(type(image2)) image2_array np.array(image2) print(image2_array…...
每日一题——最长公共前缀
题目 给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。 数据范围:0≤n≤5000, 0≤len(strsi)≤5000 进阶:空间复杂度 O(1),…...

iOS开发-WebRTC本地直播高分辨率不显示画面问题
iOS开发-WebRTC本地直播高分辨率不显示画面问题 在之前使用WebRTC结合ossrs进行推流时候,ossrs的播放端无法看到高分辨率画面问题。根据这个问题,找到了解决方案。 一、WebRTC是什么 WebRTC是什么呢? WebRTC (Web Real-Time Communicatio…...

python项目virtualenv环境部署正式项目和后台运行实践
pycharm创建virtualenv环境的项目: 在本地虚拟环境项目路径下生成依赖包记录文件,然后上传到linux 服务器项目路径下: 注意注意:要在虚拟环境中生成,才能将所有的项目依赖包构建在 requirements.txt文件中。 pip3 fre…...

平替 Docker - 玩转容器新利器 Podman Desktop (视频)
《OpenShift 4.x HOL教程汇总》 在 podman-desktop 1.2.1 podman 4.4 环境中验证。 文章目录 什么是 podman 和 podman-desktop安装 podman 和 podman-desktop 基本环境Image、Container 和 Pod 的基本操作拉取 Image运行 Container 将 Pod 部署到 Kubernetes安装 Kind 扩展插…...

nodejs+vue+elementui招聘求职网站系统的设计与实现-173lo
(1)管理员的功能是最高的,可以对系统所在功能进行查看,修改和删除,包括企业和用户功能。管理员用例如下: 图3-1管理员用例图 (2)企业关键功能包含个人中心、岗位类型管理、招聘信息…...
静态链接(7/13)
在一个软件项目中,为了完成特定功能,除了自定义函数,还可以使用别人已经封装好的函数库,如 C 函数库。库函数的使用避免了重复“造笼子”的重复工作,提高了代码复用率,大大减轻了软件开发的工作量。 库分为…...

jvs-rules API数据源配置说明(含配置APIdemo视频)
在JVS中,多数据源支持多种形态的数据接入,其中API是企业生产过程中常见的数据形态。使用数据源的集成配置,以统一的方式管理和集成多个API的数据。这些平台通常提供各种数据转换和处理功能,使得从不同数据源获取和处理数据变得更加…...

爬虫来介绍ChromeF12 谷歌开发者工具 -Network
了解网页基础(HTML、CSS、JavaScript) 了解HTTP基本原理 了解JSON格式 了解Ajax请求 了解爬虫基本原理 (一)、Chrome开发者工具面板概述 Elements 查找网页源代码HTML中的任一元素,手动修改任一元素的属性和样式且能实时在浏览器里面得到反馈。 比如我们在Event Listener…...

[足式机器人]Part4 机械设计 Ch00/01 绪论+机器结构组成与连接 ——【课程笔记】
本文仅供学习使用 本文参考: 《机械设计》 王德伦 马雅丽课件与日常作业可登录网址 http://edu.bell-lab.com/manage/#/login,选择观摩登录,查看2023机械设计2。 机械设计-Ch00Ch01——绪论机器结构组成与连接 Ch00-绪论0.1 何为机械设计——…...
Android isLoggable定制属于自己的log
Android原生自带的 android.util.Log,其中有一个 isLoggable 方法的运用 /** * Checks to see whether or not a log for the specified tag is loggable at the specified level.** The default level of any tag is set to INFO. This means that any level abov…...

【Spring Boot】构建RESTful服务 — 使用Swagger生成Web API文档
使用Swagger生成Web API文档 高质量的API文档在系统开发的过程中非常重要。本节介绍什么是Swagger,如何在Spring Boot项目中集成Swagger构建RESTful API文档,以及为Swagger配置Token等通用参数。 1.什么是Swagger Swagger是一个规范和完整的框架&…...
【实战】 九、深入React 状态管理与Redux机制(五) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十)
文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...

PHP傻瓜也能搭建自己框架
PHP最简单自定义自己的框架(一) PHP最简单自定义自己的框架创建目录结构(二) PHP最简单自定义自己的框架定义常量自动生成目录(三) PHP最简单自定义自己的框架控制器自动加载运行(四…...

为什么商业基础软件需要开源
Bytebase 本身是一家商业软件公司,而作为最核心资产的代码从 Day 0 却是开源的。同时我们还是 star-history.com 的运营者,大家在各种开源渠道会看到它生成的图: 一直以来,常会被别人问起的一个问题,就是为什么 Byteba…...
Pycharm中添加不了新建的Conda环境(此篇专门给Daidai写的)
安装好了Conda之后,在系统终端也创建好Conda环境,一切显示正常,但在Pycharm中添加不了新建的Conda环境,显示“Conda executable is not found” 解决“Conda executable is not found” conda环境新建如下 D:/Programs/anacond…...

bug:undefined is not iterable (cannot read property Symbol(Symbol.iterator))
1.如图 2.分析 关键报错提示: undefined is not iterable (cannot read property Symbol(Symbol.iterator)) 直译: undefined是不可迭代的(不能读取属性Symbol(Symbol.iterator)) 理解: 有一个值、不存在&#x…...

麒麟v10系统的docker重大问题解决-不支持容器名称解析
今天给客户在麒麟v10Kylin-Server-V10-SP1下安装nextcloudonlyoffice的时候出现无法连接onlyoffice的问题,经过分析找到了是docker版本过低的原因,现在把解决思路和步骤分享给大家。 一、问题 用一键安装工具,给客户装好了系统,Nextcloud可以正常访问 但是访问nextcloud中的o…...
数据库优化实战分享:高频场景下的性能调优技巧与案例解析
在实际开发与生产运维中,数据库的性能瓶颈往往是影响系统响应速度和用户体验的关键因素。尤其是在高并发访问、海量数据处理、复杂查询逻辑等高频场景下,数据库优化不仅仅是“锦上添花”,更是“雪中送炭”。本篇博文将结合实际项目经验&#…...

JAVA理论-JAVA基础知识
1.Java 基础 知识 1.1 面向对象的特征(了解) 面向对象的特征:封装、继承、多态、抽象 封装:就是把对象的属性和行为(数据)结合为一个独立的整体,并尽量隐藏对象的内部细节,公开我希…...
springboot 微服务 根据tomcat maxthread 和 等待用户数量,达到阈值后,通知用户前面还有多少用户等待,请稍后重试
我们在java项目开发中,如何设置服务器最大负载,过了服务器承受范围之后,提示用户稍后重试,避免 服务器无法提供正常服务 如何设置服务器负载比如:最大线程数,等待数量等,请看:springtomcat 用户…...

PyTorch--池化层(4)
池化层(Pooling Layer) 用于降低特征图的空间维度,减少计算量和参数数量,同时保留最重要的特征信息。 池化作用:比如1080p视频——720p 池化层的步长默认是卷积核的大小 ceil 允许有出界部分;floor 不允许…...
Vue.js应用结合Redis数据库:实践与优化
一、概述 Vue.js是一个用于构建用户界面的渐进式JavaScript框架,适用于开发单页面应用(SPA)。Redis是一个高性能的内存数据结构存储,用作数据库、缓存和消息中间件。将Vue.js与Redis结合,可以实现高效的数据管理和快速…...
uniapp uni-id-co errCode“:“uni-id-captcha-required“,“errMsg“:“Captcha required
连续登录失败后就会出现图形验证码校验,如果前端不需要图形验证码校验,uni-id-co文件夹下找到module下的login文件夹下的login.js,注释掉Captcha相关校验,关掉即可 const {preLoginWithPassword,postLogin } require(../../lib/utils/login)…...
Perl One-liner 数据处理——基础语法篇【匠心】
Perl(Practical Extraction and Report Language)是一种功能强大且灵活的脚本语言,因其强大的文本处理能力和简洁的语法而广受开发者和系统管理员的喜爱。特别是在命令行环境下,Perl 的 one-liner(单行脚本)以其高效、简洁的特点,成为数据处理、文本转换和快速原型设计的…...