REDIS哨兵模式

目录

前言

一、哨兵模式概念

二、作用

三、缺点

四、结构

五、搭建

总结



前言

Redis哨兵模式是一种用于实现Redis高可用性的机制。在哨兵模式下,有一个或多个哨兵进程监控Redis主节点和从节点的状态,并在主节点出现故障时自动将一个从节点升级为新的主节点,以确保系统的持续可用性。
哨兵进程通过发送心跳检测来监控Redis节点的状态。如果主节点出现故障,哨兵会选举一个新的主节点,并将其他从节点重新配置为新的主节点的从节点。这个过程是自动进行的,无需人工干预。
哨兵模式还可以处理多个从节点的故障。当多个从节点同时失效时,哨兵会重新配置剩余的从节点,并将它们连接到新的主节点上。这样即使有多个节点发生故障,系统依然可以保持正常运行。
除了监控和自动故障恢复外,哨兵模式还提供了一些其他功能,如配置管理、节点间通信等。它可以通过发布订阅机制实时通知客户端节点的状态变化,方便客户端进行相应的调整。
总的来说,Redis哨兵模式是一种实现Redis高可用性的解决方案,它通过监控和自动故障恢复来确保系统的持续可用性,同时提供了一些其他功能来方便客户端的管理和调整。

 


一、哨兵模式概念

依托于主从模式

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

二、作用

监控:哨兵会不断地检查主节点和从节点是否运作正常。

 自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。

通知(提醒):哨兵可以将故障转移的结果发送给客户端。

三、缺点

写操作无法负载均衡

存储能力受到单机的限制

哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。

四、结构

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

数据节点:主节点和从节点都是数据节点。

五、搭建

1、yum 安装的 哨兵模式配置文件位置位于 /etc/redis-sentinel.conf 一般一个REDIS都会伴随一个哨兵,但是他默认是关闭的,可以根据下图内容操作开启哨兵模式

关闭保护模式

protected-mode no

Redis哨兵默认的监听端口

port 26379

2.我们先进行主从配置:1主3从,复制并修改他们的配置文件

[root@localhost etc]# cp redis.conf /opt/redis_6380.conf
[root@localhost etc]# cp redis.conf /opt/redis_6381.conf
[root@localhost etc]# cp redis.conf /opt/redis_6382.conf
[root@localhost etc]# vim /opt/redis_6380.conf 
[root@localhost etc]# vim /opt/redis_6381.conf 
[root@localhost etc]# vim /opt/redis_6382.conf 
[root@localhost etc]# redis-server /opt/redis_6380.conf 
[root@localhost etc]# redis-server /opt/redis_6381.conf 
[root@localhost etc]# redis-server /opt/redis_6382.conf 
[root@localhost etc]# netstat -anput |grep redis
tcp        0      0 192.168.73.10:6379      0.0.0.0:*               LISTEN      12833/redis-server  
tcp        0      0 0.0.0.0:6380            0.0.0.0:*               LISTEN      13699/redis-server  
tcp        0      0 0.0.0.0:6381            0.0.0.0:*               LISTEN      13711/redis-server  
tcp        0      0 0.0.0.0:6382            0.0.0.0:*               LISTEN      13723/redis-server  
tcp        0      0 192.168.73.10:37065     192.168.73.10:6379      ESTABLISHED 13723/redis-server  
tcp        0      0 192.168.73.10:34195     192.168.73.10:6379      ESTABLISHED 13699/redis-server  
tcp        0      0 192.168.73.10:6379      192.168.73.10:37065     ESTABLISHED 12833/redis-server  
tcp        0      0 192.168.73.10:6379      192.168.73.10:34195     ESTABLISHED 12833/redis-server  
tcp        0      0 192.168.73.10:46341     192.168.73.10:6379      ESTABLISHED 13711/redis-server  
tcp        0      0 192.168.73.10:6379      192.168.73.10:46341     ESTABLISHED 12833/redis-server  

验证

[root@localhost etc]# redis-cli -h 192.168.73.10 -p 6379
192.168.73.10:6379> role
1) "master"
2) (integer) 435
3) 1) 1) "192.168.73.10"2) "6380"3) "435"2) 1) "192.168.73.10"2) "6381"3) "435"3) 1) "192.168.73.10"2) "6382"3) "435"

3.同理配置哨兵模式文件并拷贝

关闭保护模式

protected-mode no

Redis哨兵默认的监听端口

port 26379

vim /etc/redis-sentinel.conf

以此为模版,以端口区分命名cp,并修改这些文件对应的端口

[root@localhost opt]# cp /etc/redis-sentinel.conf /opt/redis-sentinel_6380.conf
[root@localhost opt]# cp /etc/redis-sentinel.conf /opt/redis-sentinel_6381.conf
[root@localhost opt]# cp /etc/redis-sentinel.conf /opt/redis-sentinel_6383.conf

修改完成后启动并查看

[root@localhost opt]# systemctl start redis-sentinel.service 
[root@localhost opt]# redis-sentinel redis-sentinel_6380.conf 
[root@localhost opt]# redis-sentinel redis-sentinel_6381.conf  
[root@localhost opt]# netstat -anput |grep redis
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      14843/redis-sentine 
tcp        0      0 192.168.73.10:6379      0.0.0.0:*               LISTEN      12833/redis-server  
tcp        0      0 0.0.0.0:26380           0.0.0.0:*               LISTEN      14867/redis-sentine 
tcp        0      0 0.0.0.0:6380            0.0.0.0:*               LISTEN      13699/redis-server  
tcp        0      0 0.0.0.0:26381           0.0.0.0:*               LISTEN      14878/redis-sentine 
tcp        0      0 0.0.0.0:6381            0.0.0.0:*               LISTEN      13711/redis-server  

验证:我们将master结束进程

[root@localhost opt]# kill -9 12833
[root@localhost opt]# netstat -anput |grep redis
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      14843/redis-sentine 
tcp        0      0 0.0.0.0:26380           0.0.0.0:*               LISTEN      14867/redis-sentine 
tcp        0      0 0.0.0.0:6380            0.0.0.0:*               LISTEN      13699/redis-server  
tcp        0      0 0.0.0.0:26381           0.0.0.0:*               LISTEN      14878/redis-sentine 
tcp        0      0 0.0.0.0:6381            0.0.0.0:*               LISTEN      13711/redis-server  

查看哨兵是否选取出新的master:

查看日志文件vim /var/log/redis/sentinel.log获取信息,得知6381的REDIS成为了master

 

14878:X 08 Aug 2023 22:07:36.999 # +elected-leader master mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:36.999 # +failover-state-select-slave master mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.099 # +selected-slave slave 192.168.73.10:6381 192.168.73.10 6381 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.100 * +failover-state-send-slaveof-noone slave 192.168.73.10:6381 192.168.73.10 6381 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.183 * +failover-state-wait-promotion slave 192.168.73.10:6381 192.168.73.10 6381 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.185 # +promoted-slave slave 192.168.73.10:6381 192.168.73.10 6381 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.185 # +failover-state-reconf-slaves master mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:37.254 * +slave-reconf-sent slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6379
14867:X 08 Aug 2023 22:07:37.257 # +config-update-from sentinel bced7d4d454ab39f3095a2959bada012c3e335d3 192.168.73.10 26381 @ mymaster 192.168.73.10 6379
14867:X 08 Aug 2023 22:07:37.257 # +switch-master mymaster 192.168.73.10 6379 192.168.73.10 6381
14867:X 08 Aug 2023 22:07:37.257 * +slave slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6381
14867:X 08 Aug 2023 22:07:37.257 * +slave slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6381
14867:X 08 Aug 2023 22:07:37.257 * +slave slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
14843:X 08 Aug 22:07:37.257 # +new-epoch 1
14843:X 08 Aug 22:07:37.257 # +config-update-from sentinel bced7d4d454ab39f3095a2959bada012c3e335d3 192.168.73.10 26381 @ mymaster 192.168.73.10 6379
14843:X 08 Aug 22:07:37.257 # +switch-master mymaster 192.168.73.10 6379 192.168.73.10 6381
14843:X 08 Aug 22:07:37.257 * +slave slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6381
14843:X 08 Aug 22:07:37.257 * +slave slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6381
14843:X 08 Aug 22:07:37.257 * +slave slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
14878:X 08 Aug 2023 22:07:38.017 # -odown master mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:38.256 * +slave-reconf-inprog slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:38.256 * +slave-reconf-done slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:38.314 * +slave-reconf-sent slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:39.333 * +slave-reconf-inprog slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:39.333 * +slave-reconf-done slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:39.394 # +failover-end master mymaster 192.168.73.10 6379
14878:X 08 Aug 2023 22:07:39.395 # +switch-master mymaster 192.168.73.10 6379 192.168.73.10 6381
14878:X 08 Aug 2023 22:07:39.395 * +slave slave 192.168.73.10:6380 192.168.73.10 6380 @ mymaster 192.168.73.10 6381
14878:X 08 Aug 2023 22:07:39.395 * +slave slave 192.168.73.10:6382 192.168.73.10 6382 @ mymaster 192.168.73.10 6381
14878:X 08 Aug 2023 22:07:39.395 * +slave slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
14867:X 08 Aug 2023 22:08:07.290 # +sdown slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
14843:X 08 Aug 22:08:07.313 # +sdown slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381
14878:X 08 Aug 2023 22:08:09.473 # +sdown slave 192.168.73.10:6379 192.168.73.10 6379 @ mymaster 192.168.73.10 6381

登录6381端口验证

如果此时将原来的master6379上线,6381还会是master吗?

答案是不会


总结

 好了,今天就到这里了,谢谢大家,拜拜~~~

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

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

相关文章

《Kali渗透基础》14. 无线渗透(四)

kali渗透 1:相关工具1.1:Aircrack-ng1.1.1:airmon-ng1.1.2:airodump-ng1.1.3:aireplay-ng1.1.4:airolib-ng1.1.5:bessid-ng 1.2:JTR1.3:Evil Twin Attacker1.4&#xff1…

微信小程序下拉刷新

小程序中的下拉刷新 - 掘金

金融反欺诈的应用实践

“根据980起全球重大金融欺诈事件分析,60%的欺诈发生在移动端,同比增长170%。“,在香港近日举办的金融科技沙龙上,顶象金融业务安全专家史博表示,金融业已成为不法分子重要的攻击对象。 本届金融科技沙龙由Databricks…

Blazor前后端框架Known-V1.2.11

V1.2.11 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 Gitee: https://gitee.com/known/KnownGithub:https://github.com/known/Known 概述 基于C#和Blazo…

【香瓜说职场】建立公司(2017.07.25)

自从17年4月份开始辞职创业,已经3个多月了。跟大家分享一下创业经历。 一、我的合伙人 我的合伙人是我的客户。我给他上过蓝牙教学课、帮他做了个蓝牙自拍器(叫orbit 360,已在售,百度能搜到),历经一年多。双…

MySQL — MVCC

文章目录 MVCCMVCC 实现原理隐藏字段undo logundo log的用途undo log类型 版本链ReadView MVCC InnoDB是一个多版本的存储引擎。它保留有关已更改行的旧版本的信息,以支持并发和回滚等事务性特性。这些信息存储在undo表空间中的数据结构称为回滚段。InnoDB使用回滚…

GD32F103的EXTI中断和EXTI事件

GD32F103的EXTI可以产生中断,也产生事件信号。 GD32F03的EXTI触发源: 1、I/O管脚的16根线; 2、内部模块的4根线(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。 通过配置GPIO模块的AFIO_EXTISSx寄存器,所有的GPIO管脚都可以被选作EXTI的触发源…

ClickHouse(十一):Clickhouse MergeTree系列表引擎 - MergeTree(1)

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…

【Pytorch+torchvision】MNIST手写数字识别

深度学习入门项目,含代码详细解析 在本文中,我们将在PyTorch中构建一个简单的卷积神经网络,并使用MNIST数据集训练它识别手写数字。 MNIST包含70,000张手写数字图像: 60,000张用于培训,10,000张用于测试。图像是灰度(即…

(亲测解决)PyCharm 从目录下导包提示 unresolved reference(完整图解)

最近在进行一个Flask项目的过程中遇到了unresolved reference 包名的问题,在网上找了好久解决方案,并没有一个能让我一步到位解决问题的。 后来,我对该问题和网上的解决方案进行了分析,发现网上大多数都是针对项目同一目录下的py…

PHP Mysql查询全部全部返回字符串类型

设置pdo属性 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

MongoDB 入门

1.1 数据库管理系统 在了解MongoDB之前需要先了解先数据库管理系统 1.1.1 什么是数据? 数据(英语:data),是指未经过处理的原始记录。 一般而言,数据缺乏组织及分类,无法明确的表达事物代表的意…

MySQL 慢查询探究分析

目录 背景: mysql 整体结构: SQL查询语句执行过程是怎样的: 知道了mysql的整体架构,那么一条查询语句是怎么被执行的呢: 什么是索引: 建立索引越多越好吗:   如何发现慢查询&#xff1…

C语言学习笔记 vscode使用外部console-11

前言 在默认情况下,我们运行C语言程序都是在vscode终端的,在小程序运行时这个是没有问题的,但是当程序变得复杂它就不好用了,这时我们可以将这个终端设置为外部console,这样方便处理更多、更复杂的程序。 步骤 1.点击…

SSM——环境搭建、产品操作、订单操作

SSM 环境搭建与产品操作 1. 环境准备 1.1 数据库与表结构 1.1.1 创建用户与授权 数据库我们使用 Oracle Oracle 为每个项目创建单独 user , oracle 数据表存放在表空间下,每个用户有独立表空间 创建用户及密码 语法 [ 创建用户 ] : crea…

后端进阶之路——深入理解Spring Security配置(二)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄,vue成神之路★ ★ 解决算法,一个专栏就够了★ ★ 架…

根证书和中间证书有什么区别?

通常即使是获取了SSL证书的人,也只知道他们需要SSL证书,而且他们必须在服务器上安装SSL证书,才能通过HTTPS为网站提供服务。当进一步提到中间证书、根证书时,大多数人都感到陌生。本文小编就将为您介绍根证书与中间证书的定义以及…

实力认证!TDengine 入选 Gartner 中国数据分析与人工智能技术成熟度曲线

近日,国际权威研究机构 Gartner 发布了《2023 年中国数据分析及人工智能技术成熟度曲线》(即《Hype Cycle for Data, Analytics and AI in China, 2023》)报告,TDengine 成功入选实时数据管理领域代表产品。 作为评估全球新技术成…

Java使用String来开发验证码

Java使用String来开发验证码 需求分析代码实现小结Time 需求分析 使用String来开发验证码。 实现随机产生验证码,验证码的每位可能是数字、大写字母、小写字母 根据需求分析,步骤如下: 1.首先,设计一个方法,该方法接收…

机器学习复习题

1 单选题 ID3算法、C4.5算法、CART算法都是( )研究方向的算法。 A . 决策树 B. 随机森林 C. 人工神经网络 D. 贝叶斯学习 参考答案:A ( )作为机器学习重要算法之一,是一种利用多个树分类器进行分类和预测…