部署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.conf


systemctl stop redis-server
systemctl stop redis-sentinel

2、改配置

1、redis.conf

##redis.conf

bind 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-sentinel

systemctl  enable redis-server
systemctl enable redis-sentinel

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

root@vm3:/etc/redis# redis-cli -p 26379 sentinel master mymaster
 1) "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 mymaster
 1) "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/bash

MASTER_IP=$6
# 表示传递的第六个参数,即新 Master 的地址

INTERFACE="ens33"
# 网络接口名,这里假设为 ens33

LOCAL_IP=`hostname -i | awk '{print $2}'`
# 获取本机在 ens33 网络接口上的 IP 地址

VIP="192.168.220.110"
# 要设置的虚拟 IP 地址

NETMASK="24"
# 子网掩码,这里假设为 24

KEY="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 网络接口上的绑定停止
fi

exit 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.mfbz.cn/a/770592.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打造您的第一个私有智能助手

当前的大语言模型通常是基于公开的知识进行训练的,而我们的组织和个人用户希望能够获得有关自身私有知识的回答。为了满足这一需求,业界通常采用检索增强生成(RAG)或微调模型的方法。然而,这些技术对非专业人员来说门槛…

2065.力扣每日一题7/1 Java(深度优先搜索DFS)

博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 首先构建一个图…

职业技能大赛引领下物联网专业实训教学的改革研究

随着物联网技术的迅猛发展,作为培养高技能应用型人才的高职院校,面临着将理论与实践深度结合,以满足行业对物联网专业人才新要求的挑战。职业技能大赛作为一种重要的教育评价与促进机制,为物联网专业实训教学的改革提供了新的视角…

AI免费文档处理在线工具:文档总结;论文阅读

1、文档总结 NoteGPT 支持各种类型文档ppt、word、pdf等总结 https://notegpt.io/pdf-summary 另外各种大模型工具一般都支持文档上传总结: 例如kimi、通义等 参考:https://blog.csdn.net/weixin_42357472/article/details/138205261 2、论文阅读 h…

医疗器械进销存软件 专业合规的医疗公司器械出入库管理软件

财务管理:财务档案统一管理,有利于科学管理企业资金 财务管理:发票关联业务单据,业财融合,加速财务数字化转型 财务管理:提供收付款功能,加快企业应收账款的回收,降低付款的资金浮…

深圳比创达EMC|EMI电磁干扰行业:从源头到终端的全面解决方案2

深圳比创达EMC|EMI电磁干扰行业:从源头到终端的全面解决方案 在当今电子信息技术日新月异的时代,电磁干扰(EMI)问题愈发凸显其重要性。EMI电磁干扰行业作为解决这一问题的关键领域,正面临着前所未有的挑战…

带着味蕾去旅行,在“必吃”餐厅里认识一座城

时代不同了,旅游也变了。十多年前的旅游,是文艺青年的诗与远方,生活在别处的荷尔蒙之旅,宁浩拍了部电影叫《心花怒放》,那些年不管是大理、丽江、拉萨、成都,还是张家界,商家最喜欢用的宣传口号…

前端引用vue/element/echarts资源等引用方法Blob下载HTML

前端引用下载vue/element/echarts资源等引用方法 功能需求 需求是在HTML页面中集成Vue.js、Element Plus(Element UI的Vue 3版本)、ECharts等前端资源,使用Blob下载HTML。 解决方案概述 直接访问线上CDN地址:简单直接&#xff0c…

Fiddler关于Repaly的细节您了解吗?如何重复执行请求?

最近深入的使用了一下Fiddler的Repaly功能,没想到有这么多的细节,不仅可以设置Repaly的次数,还可以无条件地重发选中的请求,而不考虑之前的请求条件或缓存状态。在这里与各位小伙伴分享一下,希望能够帮到大家&#xff…

使用pdf.js在Vue、React中预览Pdf文件,支持PC端、移动端

📝 使用背景 在前端开发中,有时候我们需要进行pdf文件的预览操作,通过在网上查询,基本都是一下几种常见的预览pdf文件的方法: 实现方案效果HTML 标签iframe 标签iOS:只能展示第一页,多页不能展…

conda安装cudatoolkit=11.6 (不在default channel的package)

问题描述 众所周知,conda有3个频道 - defaults - pytorch - conda-forge 直接执行 conda install cudatoolkit11.6发现不在当前频道, 添加频道 conda config --add channels conda-forge显示当前频道列表 conda config --show channels从conda-for…

深化产教融合“桥梁”作用!蓝卓携手宁波4大院校共育数智人才

建强“三支队伍”赋能新质生产力,为进一步加强新时代教师队伍建设改革,促进人才培养能力和服务企业能力“双提升”,7月2日,“2024企业实践工业互联网职业教育师资培训班”在蓝卓顺利开班。 来自宁波城市职业技术学院、宁波职业技…

【算法】插入排序

一、算法图示二、算法思想三、代码实现四、算法效率分析4.1 更新运行时长函数4.2 与选择排序对比五、算法改进5.1 结论分析5.2 改进算法图示5.3 算法说明5.4 代码实现5.5 算法效率对比1)算法升级前后对比2)与选择排序对比一、算法图示 二、算法思想 图示以7 1 5 4 1 8 11为例…

桌面记笔记的软件:能加密的笔记app

在日常生活和工作中,很多人都有记笔记的习惯。无论是记录会议要点、学习心得,还是生活中的点滴灵感,笔记都是我们不可或缺的好帮手。然而,传统的纸笔记录方式逐渐不能满足现代人的需求,因为纸质笔记不易保存、查找困难…

idea 内存参数修改不生效问题解决 VM参数设置不生效解决

很多人配置idea 内存参数,怎么配置都不生效,主要原因是配置文件用的不是你修改的那个。 系统环境变量中的这个才是你真正要修改的配置文件。 找到并修改后保存,重启idea就可生效

NodeJS 蔬菜自产零售混合销售平台-计算机毕业设计源码10149

摘 要 随着移动互联网的快速发展,购物方式也发生了巨大的变化。蔬菜作为消费者生活中必不可少的商品之一,在移动互联网时代也迎来了新的购物方式——购物小程序。购物小程序是一种基于手机应用平台的轻量级应用程序,用户可以通过它方便地浏览…

opencv编译报错OpenCV does not recognize MSVC_VERSION “1940“

具体如下: CMake Warning at cmake/OpenCVDetectCXXCompiler.cmake:182 (message):OpenCV does not recognize MSVC_VERSION "1940". Cannot set OpenCV_RUNTIME Call Stack (most recent call first):CMakeLists.txt:174 (include) 打开源码\opencv\sources\cmak…

springboot私人诊所管理系统-计算机毕业设计源码93887

摘要 随着科技的不断发展和医疗服务的日益普及,私人诊所管理系统成为现代医疗管理的重要组成部分。该系统通过引入计算机技术和互联网平台,为患者提供方便快捷的就诊方式,同时也为诊所、医院提供高效的资源管理和服务优化的途径。本文将介绍私…

Jlink调试的时候提示擦除超时,programming failed @ address 0x0804000

如果能正常下载进单片机,但是调试提示上面的信息。是keil的问题,把所有断点都取消了再调试就好了