【redis 3.2 集群】

news2025/2/24 17:15:59

目录

一、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 replicate  

redis-cli -h 192.168.42.138 -p 6384 cluster replicate 

5.5 查看命令

cluster nodes        查看所有群集节点
cluster info            查看群集状态

 

5.6 重置集群命令

cluster reset
数据的key不能相同

:每个节都要重置

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

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

相关文章

Unreal DataTable使用

目的&#xff1a;在多个地方使用同一份结构体配置 C定义结构体 USTRUCT(BlueprintType) struct FXXX : public FTableRowBase {GENERATED_BODY()UPROPERTY(EditAnywhere, BlueprintReadWrite, Category "XXX")float XXX; }注意&#xff1a; 类的元数据加上 Bluep…

如何在docker部署一个python项目

导语&#xff1a; 我之前已经实现了在服务器上直接部署一个文件&#xff0c;但是那种部署方式有个明显的缺陷&#xff1a;我如果需要在其他机器部署该项目时&#xff0c;需要重新配置项目所依赖的环境。因此我们需要一种只需要配置一次环境依赖&#xff0c;就可以在其他机器上随…

KubeSphere 部署 Zookeeper 实战教程

前言 知识点 定级&#xff1a;入门级如何利用 AI 助手辅助运维工作单节点 Zookeeper 安装部署集群模式 Zookeeper 安装部署开源应用选型思想 实战服务器配置(架构 1:1 复刻小规模生产环境&#xff0c;配置略有不同) 主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.9…

【类和对象】收尾总结

目录 一、初始化列表 1.格式要求 (1) 初始化列表初始化 ①括号中是初始值 ②括号中是表达式 (2) 初始化列表和函数体混用 2.特点 ①初始化时先走初始化列表&#xff0c;再走函数体 ②拷贝构造函数属于特殊的构造函数&#xff0c;函数内也可以使用初始化列表进行初始化 …

YOLOv5-7.0实例分割+TensorRT部署

一&#xff1a;介绍 将YOLOv5结合分割任务并进行TensorRT部署&#xff0c;是一项既具有挑战性又令人兴奋的任务。分割&#xff08;Segmentation&#xff09;任务要求模型不仅能够检测出目标的存在&#xff0c;还要精确地理解目标的边界和轮廓&#xff0c;为每个像素分配相应的…

使用Git进行项目版本控制

1、什么是Git&#xff1f; GIT&#xff0c;全称是分布式版本控制系统&#xff0c;git通常在编程中会用到&#xff0c;并且git支持分布式部署&#xff0c;可以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地&#xff0c…

SOLIDWORKS参数化设计表方法

客户痛点&#xff1a;随着人力资源价格的增长&#xff0c;设计人员不足&#xff0c;需要3D建模的数量多&#xff0c;为方便后续的CAM程序。 数据问题&#xff1a;之前是使用二维图纸&#xff0c;标准件/非标准件产品简单&#xff0c;都是单件&#xff0c;图纸发放以二维方式&a…

【C++标准模板库STL】map, unordered_map, set, unordered_set简介与常用函数

文章目录 map是STL中的标准容器&#xff0c;以键值对的形式存储&#xff0c;即为哈希表&#xff0c;并且是有序的unordered_map也是表示哈希表的容器&#xff0c;但是没有顺序&#xff0c;unordered_map查询单个key的时候效率比map高&#xff0c;但是要查询某一范围内的key值时…

【LeetCode每日一题】——128.最长连续序列

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 哈希表 二【题目难度】 中等 三【题目编号】 128.最长连续序列 四【题目描述】 给定一个未…

[保研/考研机试] KY56 数制转换 北京大学复试上机题 C++实现

题目链接&#xff1a; 数制转换https://www.nowcoder.com/share/jump/437195121691734210665 描述 求任意两个不同进制非负整数的转换&#xff08;2进制&#xff5e;16进制&#xff09;&#xff0c;所给整数在long所能表达的范围之内。 不同进制的表示符号为&#xff08;0&a…

正则表达式试炼

我希望在这里列出我很多想写的正则表达式&#xff0c;很多我想写&#xff0c;但是不知道怎么写的。分享点滴案例。未来这个文章会越来越长 案例 我有这样的一批文字&#xff0c;我需要删掉Mozilla/5.0前面的所有内容&#xff0c;如果可以用正则表达式批量匹配到&#xff0c;删…

面向数据科学家的懒惰Python 库

你今天感到昏昏欲睡吗&#xff1f;使用这五个库来提高您的工作效率。 一、介绍 数据科学既鼓舞人心&#xff0c;又具有挑战性。通过绘制各种图表以及微调模型以获得最佳结果来执行数据预处理和清理并从数据中生成见解是相当费力的。 在这篇博客中&#xff0c;我将向您介绍五个 …

YOLO v8目标跟踪详细解读(一)

在此之前&#xff0c;我们已经对yolo系列做出了详细的探析&#xff0c;有兴趣的朋友可以参考yolov8等文章。YOLOV8对生态进行了优化&#xff0c;目前已经支持了分割&#xff0c;分类&#xff0c;跟踪等功能&#xff0c;这对于我们开发者来说&#xff0c;是十分便利。今天我们对…

沐渥六门氮气柜技术参数详解

氮气柜是用来存储电子元器件、芯片、半导体器件、金属材料、电路板、精密仪器等物品的设备&#xff0c;通过充入氮气降低柜内湿度&#xff0c;达到防潮、防氧化、防静电、防锈和防霉效果。 六门氮气柜参数 1、容积&#xff1a;约1380L&#xff1b;外尺寸&#xff1a;W1200*D700…

【人工智能前沿弄潮】—— SAM系列:SAM从提示生成物体mask

SAM从提示生成物体mask Segment Anything Model&#xff08;SAM&#xff09;根据指示所需的对象来预测对象掩码。该模型首先将图像转换为图像嵌入&#xff0c;从而可以从提示中高效地生成高质量的掩码。 SamPredictor类为模型提供了一个简单的接口来提示模型。用户可以首先使…

LeetCode 33题:搜索旋转排序数组

目录 题目 思路 代码 暴力解法 分方向法 二分法 题目 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 …

Macbook pro、air、imac 在打字好卡,延迟特别严重,要怎么解决?

MacBook pro在打字好卡&#xff0c;延迟特别严重&#xff0c;到底是什么问题呢&#xff1f;卡的死&#xff0c;打个字要反应很久很久才能响应过来&#xff0c;这不是我理想中的macbook pro。以前也没有这样的问题&#xff0c;找找原因。 上网逛了一圈&#xff0c;发现大家都说…

自动切换HTTP爬虫ip助力Python数据采集

在Python的爬虫世界里&#xff0c;你是否也被网站的IP封锁问题困扰过&#xff1f;别担心&#xff0c;我来教你一个终极方案&#xff0c;让你的爬虫自动切换爬虫ip&#xff0c;轻松应对各种封锁和限制&#xff01;快来跟我学&#xff0c;让你的Python爬虫如虎添翼&#xff01; 首…

@Transactional 注解下,事务失效的七种场景

文章目录 1、异常被捕获后没有抛出2、抛出非运行时异常3、方法内部直接调用4、新开启一个线程5、注解到private方法上6、数据库本身不支持7、事务传播属性设置错误 Transactional是一种基于注解管理事务的方式&#xff0c;spring通过动态代理的方式为目标方法实现事务管理的增强…

腾讯云服务器镜像操作系统大全_Linux_Windows清单

腾讯云CVM服务器的公共镜像是由腾讯云官方提供的镜像&#xff0c;公共镜像包含基础操作系统和腾讯云提供的初始化组件&#xff0c;公共镜像分为Windows和Linux两大类操作系统&#xff0c;如TencentOS Server、Windows Server、OpenCloudOS、CentOS Stream、CentOS、Ubuntu、Deb…