Redis集群 (三十九)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、Redis主从复制

1.1 概念

1.2 作用

1.3 缺点

1.4 流程

1.5 搭建

1.6 验证

二、Reids哨兵模式

2.1 概念

2.2 作用

2.3 缺点

2.4 结构

2.5 搭建

2.6 验证

三、Redis集群

3.1 概述

3.2 原理

3.3 架构细节

3.4 选举过程

3.4 搭建

3.4.1 基础搭建

3.4.2 构建集群



前言

       Redis集群是Redis数据库的一个分布式解决方案,它允许将数据分布在多个Redis节点上以提高性能和可靠性。

       Redis集群使用分片的方式将数据分布在多个节点上。每个节点负责存储和处理一部分数据。当进行数据读写操作时,客户端会根据数据的哈希值找到对应的节点,并将操作发送给该节点进行处理。

       Redis集群还提供了自动的故障转移和数据迁移功能。当一个节点出现故障时,集群会自动将该节点上的数据迁移到其他正常节点上,以保证数据的可用性。同时,集群还会自动选举新的主节点来接管失效节点的工作。要使用Redis集群,需要至少3个Redis节点。每个节点都是一个独立的Redis服务器实例,并且需要通过配置文件指定集群模式和节点的IP地址和端口号。

        Redis集群可以提供高可用性和性能扩展的解决方案,但也需要注意一些限制和注意事项,如无法支持事务、主节点数不能超过16384个等。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Redis主从复制

1.1 概念

           Redis主从复制是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。

1.2 作用

        数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
        故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
       负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
       高可用:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

1.3 缺点

    故障恢复无法自动化;
    写操作无法负载均衡;
    存储能力受到单机的限制。

1.4 流程

     第一步:若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。
    第二步:无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。 
    第三步:后台进程完成缓存操作之后,Maste机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。
    第四步:Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。

1.5 搭建

    主服务器:(IP:192.168.10.130)
        修改配置文件
            bind  0.0.0.0
            port  6379
            protected-mode = no
            daemonize = yes

 


    从服务器:
        修改配置文件
            bind  0.0.0.0
            port  6380
            protected-mode = no
            daemonize = yes
            slaveof 192.168.10.130 6379 

 

1.6 验证

    使用redis-cli命令行登录redis服务器,输入role指令查看状态
    在master节点上,录入数据,在slave节点上查看到对应数据即可

主服务器

 在从服务登录查看

二、Reids哨兵模式

2.1 概念

          Reids哨兵模式是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 Master 并将所有 Slave 连接到新的 Master。所以整个运行哨兵的集群的数量不得少于3个节点。
    依托于主从模式

2.2 作用


    监控:哨兵会不断地检查主节点和从节点是否运作正常。
     自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
    通知(提醒):哨兵可以将故障转移的结果发送给客户端。

2.3 缺点


    写操作无法负载均衡
    存储能力受到单机的限制
    哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。

2.4 结构

    哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
    数据节点:主节点和从节点都是数据节点。

2.5 搭建

关闭保护模式
protected-mode no
Redis哨兵默认的监听端口
port 26379

指定日志存放路径
logfile "/var/log/sentinel.log"
指定数据库存放路径
dir "/var/lib/redis"
修改 指定该哨兵节点监控192.168.163.10:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel monitor mymaster 192.168.163.10 6379 2
判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel down-after-milliseconds mymaster 30000
故障节点的最大超时时间为180000(180秒)
sentinel failover-timeout mymaster 180000

    bind 0.0.0.0
    port 26379
    daemonize  yes
    sentinel monitor mymaster 192.168.115.160 6379 2
    启动
        redis-sentinel  配置文件路径

 bind 0.0.0.0
    port 26379  26380  26381
    daemonize  yes
    sentinel monitor mymaster 192.168.10.130 6379 2

2.6 验证

    可以查看日志文件(/var/log/redis/sentinel.log)

    停止master后,slave会通过选举产生新的master
    哨兵配置文件会自动修改监听的master节点地址为新的master节点地址

 以前停掉的master重新启动不会更改当前哨兵模式选出的master 

 

三、Redis集群

3.1 概述

        Redis3.0版本以上开始支持cluster,采用的是hashslot(hash槽),可以将多个Redis实例整合在一起,形成一个群集,也就是将数据分散到群集的多台机器上。

3.2 原理


    Redis Cluster是一个无中心的结构,每个节点都保存数据和整个群集的状态。每个节点都会保存其他节点的信息,知道其他节点所负责的槽,并且会与其他节点定时发送心跳信息,能够及时感知群集中异常的节点。

   (直接执行这个命令;如果键所在的槽并没有指派给当前节点,那么节点会向客户端返回一个MOVED错误,指引客户端转向(redirect)正确的节点,并再次发送之前想要执行的命令.
群集角色有Master和Slave.Master之间分配slots,一共16384个slot,Slave向它指定的Master 同步数据,实现备份。当其中的一个Master无法提供服务时,该Master的Slave将提升为Mester,以保证群集间 slot 的完整性,当其中的某一个Master和它的Slave都失效,导致了slot不完整,群集失效,这时就需要人工去处理了。
群集搭建好后,群集中的每个节点都会定期地向其他节点发送PING消息,如果接收PONG消息的节点没有在规定的时间内返回PONG 消息,那么发送PNG消息的节点就会将其标记为疑似下线(probable fail,PFAL)。各个节点会通过互相发送消息的方式来交换群集中各个节点的状态信息。如果在一个群集里面,半数以上的主节点都将某个主节点×报告为疑似下线,那么这个主节点×将被标记为已下线(FAL),同时会向群集广播一条关于主节点×的FAL消息,所有收到这条FAL消息的节点都会立即将主节点×标记为已下线。
当需要减少或者增加群集中的机器时,我们需要将已经指派给某个节点(源节点)的槽改为指派给另一个节点(目标节点),并且将相关槽所属的键值对从源节点移动到目标节点。
Redis群集的重新分片操作是由Redis的群集管理软件redis—trib负责执行的,不支持自动的分片,而且需要自己计算从哪些节点上迁移多少 Slot。在重新分片的过程中,群集不需要下线,并且源节点和目标节点都可以继续处理命令请求。)

3.3 架构细节


    (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
    (2)节点的失效(fail)在群集中超过半数的主(master)节点检测失效时才生效。
    (3)客户端与 redis 节点直连,不需要中间代理(proxy)层,客户端不需要连接群集所有节点,连接群集中任何一个可用节点即可。
    (4)redis-cluster 把所有的物理节点映射到【0-16383】slot 上,cluster 负责维护 node<->slot<->key。

3.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 用于群集总线,即使用二进制协议的节点到节点通信通道。节点使用群集总线进行故障检测、配置更新、故障转移授权等。如果开启了防火墙,需要开放这两个端口。

3.4 搭建

3.4.1 基础搭建

准备3台虚拟机,分别设置IP为 192.168.156.3   192.168.156.4   192.168.156.5 

1. 安装epel-release源(三台都装)

    安装 redis

yum install -y epel-release

yum install -y redis

2.关闭防火墙、修改宽容模式

3. 创建目录、配置文件

4.  进入配置文件,修改配置项 (两个)

 vim /etc/redis/redis1_6379.conf

 vim /etc/redis/redis2_6380.conf 5. 创建目录redis1_6379 和 redis2_6380 

 6.  启动 7. 查看是否启动

此时已经启动

 其他两台同样的操作................

3.4.2 构建集群

1. 进入配置文件修改配置项(三台都要改)

 启动

 2. 构建集群

以下操作需要登录某个节点的redis数据库

redis-cli -h 192.168.156.3(进入数据库)

将其他节点加入集群
     CLUSTER MEET 192.168.156.3 6380
     CLUSTER MEET 192.168.156.4 6379
     CLUSTER MEET 192.168.156.4 6380
     CLUSTER MEET 192.168.156.5 6379
     CLUSTER MEET 192.168.156.5 6380

 查看

 分配slot
    redis-cli -p 6379 cluster addslots {0..5461}
    redis-cli -p 6380 cluster addslots {5462..10922}
    redis-cli -p 6380 cluster addslots {10923..16383}

 建立主从关系
    redis-cli -p 6379 cluster replicate b356143b3ca4f07cceb30634618339ed107f793c
    redis-cli -p 6380cluster replicate 5cca472f9816273103769adb32b3a1b562f42655
    redis-cli -p 6380 cluster replicate 6d7219fd6db32e6014955edbeda26af6b59b9078

 测试

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

重置集群命令(每个节都要重置)
    cluster reset
    数据的key不能相同


   总结

Redis集群具有高可用性、数据分片、扩展性、容错性、简化管理、高性能,总的来说,Redis集群通过提供高可用性、水平扩展、容错性和简化管理等优势,成为了一个理想的分布式解决方案,适用于大规模数据存储和高并发访问的场景。

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

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

相关文章

解决nvm安装后,node生效但npm无效

问题描述 nvm安装后&#xff0c;node生效但npm无效 清除缓存 C:\Users\cc\AppData\Roaming cc是我的用户名改成你自己的就行删除 npm和npm-cache

form表单构造http请求的写法

from是html的一个标签&#xff0c;from是html后早http请求的一种方式&#xff0c;它和input标签密切配合。 from有两个基本属性action和method&#xff0c;action就是http请求url中的路径部分。method就是构造的http请求的方法。 form和input标签配合构造键值对&#xff0c;键值…

数据结构笔记--二叉树经典高频题

1--二叉树的最近公共祖先 主要思路&#xff1a; 最近祖先只有两种情况&#xff1a;① 自底向上&#xff0c;当两个目的结点分别在当前结点的左右子树时&#xff0c;当前结点为两个目的结点的最近祖先&#xff1b;② 最近祖先与其中一个目的结点相同&#xff0c;则另一个目的结点…

Python-OpenCV中的图像处理-形态学转换

Python-OpenCV中的图像处理-形态学转换 形态学转换腐蚀膨胀开运算闭运算形态学梯度礼帽黑帽形态学操作之间的关系 形态学代码例程 形态学转换 形态学操作:腐蚀&#xff0c;膨胀&#xff0c;开运算&#xff0c;闭运算&#xff0c;形态学梯度&#xff0c;礼帽&#xff0c;黑帽等…

企业微信 企业内部开发 学习笔记

官方文档 文档 术语介绍 引入pom <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-cp-spring-boot-starter</artifactId><version>4.5.3.B</version></dependency>核心代码 推送消息 final WxCp…

面试攻略,Java 基础面试 100 问(十一)

抽象类&#xff08;abstract class&#xff09;和接口&#xff08;interface&#xff09;有什么异同? 抽象类和接口都不能够实例化&#xff0c;但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现&#xff…

英码国产高配边缘计算盒子上市!搭载TPU处理器BM1684X,适配麒麟系统,支持OTA升级!

随着人工智能技术不断深入实际应用场景&#xff0c;加速各行各业场景应用落地&#xff0c;边缘计算的重要性越发凸显。相较于传统的集中式云计算&#xff0c;边缘计算在距离数据源或用户更近的地方提供计算能力&#xff0c;不仅满足了对实时性要求较高的场景应用需求&#xff0…

如何通过CSS选择器选择一个元素的子元素?如何选择第一个子元素和最后一个子元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 选择一个元素的子元素⭐ 选择第一个子元素和最后一个子元素⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…

线程池,以及线程池的实现以及面试常问的问题,工厂模式,常见的锁策略(面试常考,要了解,不行就背)

一、&#x1f49b; 线程池的基本介绍 内存池&#xff0c;进程池&#xff0c;连接池&#xff0c;常量池&#xff0c;这些池子概念上都是一样的&#xff5e;&#xff5e; 如果我们需要频繁的创建销毁线程&#xff0c;此时创建销毁的成本就不能忽视了&#xff0c;因此就可以使用线…

Redis系列(一):深入了解Redis数据类型和底层数据结构

Redis有以下几种常用的数据类型&#xff1a; redis数据是如何组织的 为了实现从键到值的快速访问&#xff0c;Redis 使用了一个哈希表来保存所有键值对。 Redis全局哈希表&#xff08;Global Hash Table&#xff09;是指在Redis数据库内部用于存储所有键值对的主要数据结构。…

安卓13不再支持PPTP怎么办?新的连接解决方案分享

随着Android 13的发布&#xff0c;我们迎来了一个令人兴奋的新品时刻。然而&#xff0c;对于一些用户而言&#xff0c;这也意味着必须面对一个重要的问题&#xff1a;Android 13不再支持PPTP协议。如果你是一个习惯使用PPTP协议来连接换地址的用户&#xff0c;那么你可能需要重…

C++ 泛型编程:函数模板

文章目录 前言一、什么是泛型编程二、函数模板三、函数模板的使用四、多参数函数模板五&#xff0c;示例代码&#xff1a;总结 前言 当需要编写通用的代码以处理不同类型的数据时&#xff0c;C 中的函数模板是一个很有用的工具。函数模板允许我们编写一个通用的函数定义&#…

接口测试之Jmeter+Ant+Jenkins接口自动化测试平台

平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行&#xff0c;自动生成测试报告&#xff0c;以及持续集成。Jmeter支持接口的测试&#xff0c;Ant支持自动构建&#xff0c;而Jenkins支持持续集成&#xff0c;所以三者组合在一起可以构成一个功能完善的接口自动化…

idea - 刷新 Git 分支数据 / 命令刷新 Git 分支数据

一、idea - 刷新 Git 分支数据 idea 找到 fetch 选项&#xff0c;重新获取分支数据 二、命令刷新 Git 分支数据 git fetch参考链接 1. 远程Gitlab新建的分支在IDEA里不显示

jxls导出问题

![请添加图片描述](https://img-blog.csdnimg.cn/bc74c4207818491c93b75e19b3333451.png 为什么最后导出的文件还是按原样导出啊&#xff0c;没有填充数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d4500b9a98c042f6b64a5d0650071303.png

ChatGPT等人工智能编写文章的内容今后将成为常态

BuzzFeed股价上涨200%可能标志着“转向人工智能”媒体趋势的开始。 周四&#xff0c;一份内部备忘录被华尔街日报透露BuzzFeed正计划使用ChatGPT聊天机器人-风格文本合成技术来自OpenAI&#xff0c;用于创建个性化盘问和将来可能的其他内容。消息传出后&#xff0c;BuzzFeed的…

文本三剑客之grep命令和awk命令 1.0 版本

grep awk 1.grep命令1.1 基本格式1.2 常用选项 2.awk命令2.1 awk工作原理2.2 awk命令格式2.3 awk常用内置变量 1.grep命令 1.1 基本格式 grep [选项]… 查找条件 目标文件1.2 常用选项 选项功能 -m [ x ]匹配x次 后停止,x为具体数字-v取反 -i忽略字符大小写 -n显示匹配的 …

Dynamic CRM开发 - 实体介绍

实体简介 在CRM中,实体(Entity)是数据的基本载体,也是构建业务逻辑网络的基础节点。 实体可以理解为数据库中的一张表(实体中的字段对应数据库表的字段),比如创建一个实体存储客户信息,创建一个实体存储产品信息,产品实体里可以创建一个查找类型的字段(类似表的外键)…

【三维编辑】Seal-3D:基于NeRF的交互式像素级编辑

文章目录 摘要一、引言二、方法2.1.基于nerf的编辑问题概述2.2.编辑指导生成2.3.即时预览的两阶段学生训练 三、实验四、代码总结 项目主页: https://windingwind.github.io/seal-3d/ 代码&#xff1a;https://github.com/windingwind/seal-3d/ 论文: https://arxiv.org/pdf/23…

阿里云轻量应用服务器_2核4G4M_2核2G3M_性能测评

阿里云轻量应用服务器2核2G3M带宽108元一年&#xff0c;系统盘为50GB高效云盘&#xff1b;轻量服务器2核4G4M带宽&#xff0c;60GB高效云盘297.98元12个月。目前轻量应用服务器只有2核2G和2核4G有活动&#xff0c;阿里云百科分享阿里云轻量应用服务器入口&#xff1a; 目录 阿…