部署redis集群哨兵模式

部署redis集群哨兵模式

  • 前言
    • 主要功能
    • 工作机制
  • 一、虚拟机部署
    • 1、安装
    • 2、改配置
      • 1、redis.conf
      • 2、sentinel.conf
      • 3、起服务
      • 4、停redis-server服务,验证sentinel
    • 3、脚本
      • 1. sentinel notification-script
      • 2. sentinel reconfig-script
      • 3. sentinel client-reconfig-script
      • 4. sentinel deny-scripts-reconfig


前言

Redis 哨兵(Sentinel)是 Redis 提供的一种高可用性解决方案,旨在确保 Redis 服务在主从架构中能够自动故障转移和系统的高可用性。哨兵的主要功能和机制包括以下几个方面:

主要功能

监控(Monitoring):哨兵会持续检查主服务器和从服务器是否正常运行。
通知(Notification):当被监控的 Redis 服务器出现问题时,哨兵可以通过 API 向管理员或其他应用程序发送通知。
自动故障转移(Automatic Failover):当主服务器出现故障时,哨兵会自动将其中一个从服务器提升为新的主服务器,并且通知其他从服务器修改它们的配置,指向新的主服务器。
配置提供(Configuration Provider):哨兵会告诉客户端当前的 Redis 集群拓扑结构,使得客户端可以始终知道如何连接到正确的主服务器。

工作机制

  1. 哨兵节点(Sentinel Nodes)
    Redis 哨兵本身也是一种特殊的 Redis 实例,它们以哨兵模式运行。一般部署多个哨兵节点来保证高可用性和可靠性。

  2. 配置和启动
    每个哨兵节点都需要配置文件,其中包含了监控的主服务器地址和相关配置。哨兵节点启动后,会根据配置文件开始工作。

  3. 主从监控(Master-Slave Monitoring)
    哨兵节点通过定期发送 PING 命令来检查主服务器和从服务器的健康状态。如果在一定时间内没有收到响应,哨兵会认为该服务器出现问题。

  4. 主观下线(Subjective Down, SDOWN)
    当一个哨兵节点认为一个服务器不可用时,它会将其标记为主观下线(SDOWN)。这个状态是单个哨兵节点的判断结果。

  5. 客观下线(Objective Down, ODOWN)
    当多个哨兵节点一致认为一个服务器不可用时,它们会将其标记为客观下线(ODOWN)。这种一致性通过哨兵节点之间相互通信来实现。

  6. 故障转移(Failover)
    一旦主服务器被标记为 ODOWN,哨兵节点会协商并选举一个领导哨兵节点来执行故障转移操作:

选择新的主服务器:从剩余的从服务器中选举一个提升为新的主服务器。
更新配置:通知其他从服务器指向新的主服务器。
通知客户端:通过 Redis 的发布订阅机制通知客户端更新连接信息。
7. 配置同步
在新的主服务器选举完成后,哨兵节点会更新自身的配置并相互同步,确保所有哨兵节点都了解当前的集群拓扑结构。

  1. 恢复与重启
    当原主服务器恢复后,它会自动成为新的从服务器,开始从新的主服务器同步数据。

哨兵选举机制
哨兵之间通过 Raft 或类似的分布式一致性算法来进行领导选举。领导哨兵负责协调故障转移操作,确保整个过程有序进行。

配置示例
一个典型的 Redis 哨兵配置文件如下:

port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

port 26379:哨兵服务运行的端口。
sentinel monitor mymaster 127.0.0.1 6379 2:监控名为 mymaster 的主服务器,地址为 127.0.0.1:6379,至少需要 2 个哨兵节点同意才能认为主服务器下线。
sentinel down-after-milliseconds mymaster 5000:如果 5 秒内主服务器没有响应,哨兵认为它下线。
sentinel failover-timeout mymaster 60000:故障转移的超时时间为 60 秒。
sentinel parallel-syncs mymaster 1:在故障转移过程中,最多有一个从服务器与新的主服务器同步数据。
通过 Redis 哨兵,可以实现 Redis 集群的高可用性和自动故障转移,确保系统的稳定性和可靠性。


一、虚拟机部署

##一主两从
192.168.220.66 主 88/99从

1、安装

## Ubuntu 安装
apt install  -y redis redis-sentinel root@vm1:/etc/redis# cd /etc/redis/ && ll
total 104
drwxrws---   2 redis redis  4096 Jul  2 17:21 ./
drwxr-xr-x 105 root  root   4096 Jul  2 17:10 ../
-rw-r-----   1 redis redis 85844 Mar  4  2022 redis.conf
-rw-r-----   1 redis redis 10936 Jul  2 17:21 sentinel.confsystemctl stop redis-server
systemctl stop redis-sentinel

2、改配置

1、redis.conf

##redis.confbind 0.0.0.0
requirepass 123456
##replicaof 192.168.220.66 6379  从
##masterauth 123456  从
appendonly yes
appendfilename "appendonly.aof"
root@vm1:/etc/redis# redis-cli
127.0.0.1:6379>auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.220.99,port=6379,state=online,offset=70,lag=0
slave1:ip=192.168.220.88,port=6379,state=online,offset=70,lag=0
master_replid:f55cc7aadcaef6322a7c2b821bfbddbaa18f026f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:70
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:70

2、sentinel.conf

##修改行
bind 0.0.0.0
sentinel monitor mymaster 192.168.220.66 6379 2   ###定义master主节点一定在以下所有mymaster之上
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

3、起服务

systemctl start redis-server
systemctl start redis-sentinelsystemctl  enable redis-server
systemctl enable redis-sentinel

4、停redis-server服务,验证sentinel

root@vm3:/etc/redis# redis-cli -p 26379 sentinel master mymaster1) "name"2) "mymaster"3) "ip"4) "192.168.220.66"5) "port"6) "6379"7) "runid"8) "275325fbdd87554742740d67186e441509692289"9) "flags"
10) "master"
。。。。
redis-cli -h 192.168.220.66 -p 6379 -a 123456 info replication
root@vm1:/etc/redis# systemctl stop redis-server.service 
root@vm1:/etc/redis# redis-cli -p 26379 sentinel master mymaster1) "name"2) "mymaster"3) "ip"4) "192.168.220.88"5) "port"6) "6379"7) "runid"8) "2fef4f9f96319f5462ebfa7e4fc30ebad6273a8b"9) "flags"
10) "master"
11) "link-pending-commands"
。。。。

验证配置文件已自动修改。
在这里插入图片描述

root@vm2:/etc/redis# !egrep
egrep -v "^#|^$" sentinel.conf 
bind 0.0.0.0
port 26379
daemonize yes
pidfile "/var/run/sentinel/redis-sentinel.pid"
logfile "/var/log/redis/redis-sentinel.log"
dir "/var/lib/redis"
sentinel myid 9cbef9b35cef23a9883e2eaa35abe2992e16a1d2
sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 192.168.220.88 6379 2
sentinel down-after-milliseconds mymaster 3000
sentinel auth-pass mymaster 123456
sentinel config-epoch mymaster 1
sentinel leader-epoch mymaster 1
sentinel known-replica mymaster 192.168.220.99 6379
sentinel known-replica mymaster 192.168.220.66 6379
protected-mode no
supervised systemd
user default on nopass ~* +@all
sentinel known-sentinel mymaster 192.168.220.99 26379 7ea4cda07270c0cd482b360d3e391de145dfebdc
sentinel known-sentinel mymaster 192.168.220.66 26379 70777fc6d97c83d28bfd2f679251c8eeb2cb91c3
sentinel current-epoch 1

3、脚本

在 Redis Sentinel中,脚本(scripts)用于在特定事件发生时执行一些自定义操作。常见的事件包括主节点失效(failover)、从节点选举为新的主节点等。这些脚本可以用于通知系统管理员、更新配置或执行其他管理任务。

1. sentinel notification-script

当 Sentinel 检测到某些事件(如主节点或从节点的状态变化)时,会调用此脚本。该脚本通常用于发送通知(如电子邮件、短信等)。

sentinel notification-script mymaster /etc/redis/notification_script.sh

通知脚本 (notification_script.sh)

#!/bin/bash
EVENT_TYPE=$1
EVENT_DETAILS=$2

发送电子邮件通知

echo "Event: $EVENT_TYPE - Details: $EVENT_DETAILS" | mail -s "Redis Sentinel Notification" admin@example.com

确保脚本具有可执行权限:

chmod +x /etc/redis/notification_script.sh

2. sentinel reconfig-script

当 Sentinel 进行故障转移(failover)时,会调用此脚本。该脚本通常用于通知从节点新的主节点地址,以便它们重新配置自己。

sentinel reconfig-script mymaster /etc/redis/reconfig_script.sh

配置脚本 (reconfig_script.sh)

#!/bin/bash
NEW_MASTER_IP=$1
NEW_MASTER_PORT=$2

更新所有从节点的配置以指向新的主节点

redis-cli -h 192.168.220.88 -p 6379 SLAVEOF $NEW_MASTER_IP $NEW_MASTER_PORT
redis-cli -h 192.168.220.99 -p 6379 SLAVEOF $NEW_MASTER_IP $NEW_MASTER_PORT

确保脚本具有可执行权限:

chmod +x /etc/redis/reconfig_script.sh

3. sentinel client-reconfig-script

用于在故障转移后通知应用程序或客户端进行相应的调整。

sentinel client-reconfig-script mymaster /etc/redis/client_reconfig_script.sh
#!/bin/bashMASTER_IP=$6
# 表示传递的第六个参数,即新 Master 的地址INTERFACE="ens33"
# 网络接口名,这里假设为 ens33LOCAL_IP=`hostname -i | awk '{print $2}'`
# 获取本机在 ens33 网络接口上的 IP 地址VIP="192.168.220.110"
# 要设置的虚拟 IP 地址NETMASK="24"
# 子网掩码,这里假设为 24KEY="1"
# 用于区分不同的虚拟 IP 地址后缀# 判断当前节点是否为主节点
if [ "$MASTER_IP" = "$LOCAL_IP" ]; then/sbin/ifconfig ${INTERFACE}:${KEY} ${VIP}/${NETMASK}# 如果当前节点是主节点,则将指定的 VIP 绑定到 ens33 网络接口上exit 0
else/sbin/ifconfig ${INTERFACE}:${KEY} down# 如果当前节点不是主节点,则将指定的 VIP 和 ens33 网络接口上的绑定停止
fiexit 1

4. sentinel deny-scripts-reconfig

用于防止 Sentinel 通过脚本修改其配置。如果设置为 yes,则 Sentinel 不允许脚本修改 Sentinel 配置。

sentinel deny-scripts-reconfig yes

在每个 Sentinel 配置文件 /etc/redis/sentinel.conf 中添加脚本配置:

sentinel monitor mymaster 192.168.220.66 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
sentinel notification-script mymaster /etc/redis/notification_script.sh
sentinel reconfig-script mymaster /etc/redis/reconfig_script.sh
sentinel deny-scripts-reconfig yes

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

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

相关文章

3个让你爽到爆炸的学习工具

We OCR WeOCR 是一个基于浏览器的文字识别工具,用户可以通过上传图片来识别其中的文本信息。它是一个渐进式网络应用程序(PWA),可以在浏览器中离线使用。WeOCR 是开源的,并且基于 Tesseract OCR 引擎开发。用户无需在本…

软件研发标准化流程文件

为了规范化系统开发流程,我们精心制定了一套详尽的规范文档。该文档旨在通过标准化、系统化的方法来显著提升开发效率与项目质量。流程始于明确需求阶段,通过深入细致的设计规划来确保解决方案既可行又具有前瞻性。随后,我们进入高效的编码实…

INFINI Console 使用介绍

上次在《INFINI Easysearch尝鲜Hands on》中我们部署了两个节点的Easysearch,并且也设置了Console对集群进行监控。那么今天我们再来介绍下INFINI Console的使用。 INFINI Console 仪表盘功能介绍 INFINI Console 是一个功能强大的数据管理和分析平台,…

图像练习-识别中圆形锡点 (04)

图片 代码 cv::Mat src cv::imread("light_point.png", cv::IMREAD_COLOR);cv::Mat draw src.clone();cv::Rect rt0(20, 80, src.cols - 30, 190);cv::Rect rt1(20, 480, src.cols - 30, 190);cv::Mat gray;cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);cv::Mat …

【超级实用的一些adb命令】

实用的一些adb命令 #实用的一些adb命令 ##获取屏幕分辨率 adb shell wm size Physical size: 1920x1080##获取屏幕密度 adb shell wm density Physical density: 240##获取CPU信息 adb shell cat /proc/cpuinfo##获取内存信息 adb shell cat /proc/meminfo##给模拟器输入框输…

AGI系列(7)Reflection 在 AI agent 中的应用实例

斯坦福大学教授吴恩达一直非常推崇AI Agent,之前他提出过AI Agent的四种工作模式,分别是Reflection(反思)、Tool use(工具使用)、Planning(规划)和Multi-agent collaboration(多智能体协同)。 近日,他又开源了一个翻译 AI Agent, 他认为 AI 智能体机器翻译对改进传…

java项目自定义打印日志,打印请求方式,参数用时等

1.相关依赖 <!-- 私人工具包 --><dependency><groupId>cn.changeforyou</groupId><artifactId>location</artifactId><version>1.13-SNAPSHOT</version></dependency><!-- hutool工具依赖 --><dependency>…

图像的像素在内存中的存储方式

图像的像素在内存中的存储方式主要可以分为两大类&#xff1a;Packed&#xff08;紧凑式或交错式&#xff09;和Planar&#xff08;平面式&#xff09;。 这两种存储方式各有其优缺点&#xff0c;并且在不同的应用场景下有着各自的适用性。 Packed&#xff08;紧凑式或交错式…

【深入理解】元组tuple的底层实现(与C++进行对比)

Python虽然没有指针类型&#xff0c;但是处处离不开指针&#xff0c;我们要认识到一点&#xff0c;只要操作系统是用C语言写的&#xff0c;就一定会使用到指针&#xff0c;因为使用某种语言&#xff0c;我们一定会定义变量&#xff0c;就必须申请进程的地址空间&#xff0c;也就…

内容评分越高,谷歌排名就越靠前吗?

我研究并分析了目前流行的四个内容优化工具的内容评分和Google排名之间的关联性&#xff1a;Clearscope、 Surfer、 MarketMuse 和 Frase&#xff0c;结果显示关联性普遍不高。 虽然相关性并不一定意味着绝对的因果关系&#xff0c;但也表明&#xff0c;一味的追求内容得分并不…

c++ primer plus 第15章友,异常和其他

c primer plus 第15章友&#xff0c;异常和其他 第15章友元、异常和其他 文章目录 c primer plus 第15章友&#xff0c;异常和其他前言第15章友元、异常和其他 前言 第15章友元、异常和其他 本章内容包括: 友元类。友元类方法。嵌套类。引发异常、try 块和 catch 块。异常类…

源代码加密:保护你的数字宝藏

在当今日益复杂的网络安全环境中&#xff0c;源代码作为企业的核心知识产权&#xff0c;其安全保护显得尤为重要。传统的源代码加密方法虽能提供一定的保护&#xff0c;但在应对新型威胁和复杂场景时&#xff0c;往往显得力不从心。而SDC沙盒技术的出现&#xff0c;为源代码加密…

AGI 之 【Hugging Face】 的【Transformer】的 [ 解码器 ] / [ 认识 Transformer ]的简单整理

AGI 之 【Hugging Face】 的【Transformer】的 [ 解码器 ] / [ 认识 Transformer ]的简单整理 目录 AGI 之 【Hugging Face】 的【Transformer】的 [ 解码器 ] / [ 认识 Transformer ]的简单整理 一、简单介绍 二、Transformer 三、解码器 四、认识Transformer 1、Transf…

某DingTalk企典 - Token

⚠️前言⚠️ 本文仅用于学术交流。 学习探讨逆向知识&#xff0c;欢迎私信共享学习心得。 如有侵权&#xff0c;联系博主删除。 请勿商用&#xff0c;否则后果自负。 网址 aHR0cHM6Ly9kaW5ndGFsay5jb20vcWlkaWFuLw 浅聊一下 没毛病&#xff0c;就这字段&#xff0c;有效期…

python vtkLODProp3D

vtkLODProp3D是VTK库中的一个类&#xff0c;用于表示一个可以根据相机距离改变其复杂度的3D对象。这种技术可以用于优化渲染性能&#xff0c;特别是当场景中有大量的对象或对象复杂度很高时。 在Python中&#xff0c;你可以使用VTK库来操作和处理3D数据。如果你想使用vtkLODPr…

将QT移植到IMX6ULL开发板

文章目录 前言一、编译系统1.设置交叉编译工具链2.编译系统3.烧写 二、Linux中下载QT1.安装 Qtcreator2.创建第一个程序3.配置 QtCreator 开发环境&#xff08;1&#xff09;打开选项界面&#xff08;2&#xff09;选择编译器&#xff08;3&#xff09;设置编译器&#xff08;4…

电脑回收站删除的文件怎么恢复?5个恢复方法详解汇总!

电脑回收站删除的文件怎么恢复&#xff1f;在我们日常使用电脑的过程中&#xff0c;难免会遇到误删文件的情况。一旦发现自己误删文件了&#xff0c;先不要着急&#xff0c;还是有很多方法可以找回的。市面上还是有很多好用的文件恢复软件可以使用&#xff0c;具体介绍如下。 本…

【Element-UI】vue使用 this.$confirm区分取消与关闭,vue给this.$confirm设置多个按钮

在使用this.$confirm过程中经常会遇到将取消按钮修改成其他的按钮去执行&#xff0c;如果直接使用catch会出现右上角以及遮罩层关闭也会执行&#xff0c;所以需要做个区分 如遇到两个按钮可以用取消按钮作为第二个按钮如果是出现多个按钮就不支持了 vue使用 this.$confirm时区分…

此文助您了解客户情况,通常如何判断客户需求是否靠谱!

https://doc.youyacao.com/117/2164 此文助您了解客户情况&#xff0c;通常如何判断客户需求是否靠谱&#xff01; 正确沟通客户 &#xff0c;此文助您了解客户情况&#xff0c;通常如何判断客户需求是否靠谱&#xff01;正确沟通客户&#xff0c;节约宝贵时间&#xff0c;不…

laravel+phpoffice+easyexcel实现导入

资源包下载地址 https://download.csdn.net/download/QiZong__BK/89503486 easy-excel下载&#xff1a; "dcat/easy-excel": "^1.0", 命令行&#xff1a; composer require dcat/easy-excel 前端代码 <!doctype html> <html lang"en&…