部署redis集群哨兵模式

news2024/11/24 2:08:54

部署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.coloradmin.cn/o/1893552.html

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

相关文章

Centos Nginx SSL 配置

Nginx 配置 SSL 1.下载SSL证书 .crt 和 .key文件 2.创建和上传证书 mkdir -p /etc/nginx/cert 上传证书3.nginx.conf配置 # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Docum…

策略模式入门:基本概念与应用

目录 策略模式策略模式结构策略模式应用场景策略模式优缺点练手题目题目描述输入描述输出描述题解 策略模式 策略模式,又称政策模式,是一种行为型设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以…

【开发笔记】如何用正则匹配出百度云盘分享链接的提取码和链接?

用Wordpress做下载站,需要复制网盘链接到后台的文章发布自定义字段,然后我不想每次手动拆分链接和提取码分别到两个input,就想在后台粘帖时候实现拆分它。 $link 链接:https://pan.baidu.com/s/16y9Z5mTSE6gewStGDNndNQ 提取码…

万字长文MySQL Binlog 详细指南

目录 第一阶段 MySQL Binlog 基础用法1. Binlog基本概念1.1 什么是Binlog1.2 Binlog的作用1.3 Binlog格式 2. 配置和管理Binlog2.1 开启Binlog2.2 设置Binlog文件大小和保留时间2.3 查看Binlog状态 3. Binlog的实际应用3.1 数据恢复3.2 主从复制3.3 审计 4. Binlog工具使用4.1 …

数据库表导出到excel:前置知识1 ALL_TAB_COLS

ALL_TAB_COLS 当前用户可访问的表、视图和群集的列的相关信息 其中几个字段: OWNER:表,视图及群集的Owner   TABLE_NAME: 表,视图及聚簇的名称   COLUMN_NAME: 字段名   DATA_TYPE :字段的数据类型…

yaml格式转换成json格式

yaml格式转换成json格式 ①postman生成的结果是yaml格式 ps:postman输出的格式是没有自动换行的,需要将内容换行 ②复制到Python的脚本跑一趟:自动换行并去掉/n; str " "//(postman输出的内容) print(st…

Mybatis-03 MetaObject学习

一. 反射调用 如果我们需要给 bean 对象的属性设值&#xff0c;除了我们常用的构造调用方法之外&#xff0c;还可以用反射&#xff1b; 下面我们举一个例子&#xff1b; public static void main(String[] args) throws Exception {Class<Bean01> bean01Clazz Class.…

FreeRTOS之队列上锁和解锁(详解)

这篇文章将记录我学习实时操作系统FreeRTOS的队列上锁和解锁的知识&#xff0c;在此分享给大家&#xff0c;希望我的分享能给你带来不一样的收获&#xff01; 目录 一、简介 二、队列上锁函数prvLockQueue&#xff08;&#xff09; 1、函数初探 2、应用示例 三、队列解锁函…

【代码随想录】【算法训练营】【第55天】 [42]接雨水 [84]柱状图中最大的矩形

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 55&#xff0c;又是一个周一&#xff0c;不能再坚持~ 题目详情 [42] 接雨水 题目描述 42 接雨水 解题思路 前提&#xff1a;雨水形成的情况是凹的, 需要前中后3个元素&#xff0c;计算该元…

Modbus协议转Profinet协议网关模块连智能仪表与PLC通讯

一、现场需求&#xff1a;PLC作为控制器&#xff0c;仪表设备做为执行设备&#xff0c;执行设备能够实时响应PLC传来的指令&#xff0c;并且向PLC回馈数据&#xff0c;从而达到PLC对仪表设备进行控制和监测&#xff0c;实现对生产过程的精准控制。 二、解决方案&#xff1a;通过…

机器学习与AI大数据的融合:开启智能新时代

在当今这个信息爆炸的时代&#xff0c;大数据和人工智能&#xff08;AI&#xff09;已经成为推动社会进步的强大引擎。作为AI核心技术之一的机器学习&#xff08;Machine Learning, ML&#xff09;&#xff0c;与大数据的深度融合正引领着一场前所未有的科技革命&#xff0c;不…

Java判断范围型的数据是否存在重叠(数值类型、日期类型)

为什么写这么一篇文章呢&#xff1f; 遇到了个问题&#xff0c;同一天可以输入多个时间段&#xff0c;但是每个时间段的时间不能出现重叠。 纳尼&#xff0c;这不就是判断数据返回是否有重叠的变种嘛~ 简单&#xff0c;开搞 数字范围是否重叠判断 这里以int类型为例了&…

高德地图轨迹回放并提示具体信息

先上效果图 到达某地点后显示提示语:比如:12:56分驶入康庄大道、左转驶入xx大道等 <!doctype html> <html> <head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta n…

基于Vue.js的电商前端模板:Vue-Dashboard-Template的设计与实现

摘要 随着电子商务的飞速发展&#xff0c;前端页面的设计和实现变得愈发重要。本文介绍了一个基于Vue.js的电商前端模板——Vue-Dashboard-Template&#xff0c;旨在提供一个高性能、易扩展的电商平台前端解决方案。该模板遵循响应式设计、模块化、组件化开发等设计原则&#…

预制菜工厂MES系统:具体功能与应用场景

在现代化食品工业中&#xff0c;预制菜&#xff08;Ready-to-Eat, RTE&#xff09;因其方便快捷、卫生安全及营养均衡的特点&#xff0c;迅速在餐饮行业中占据重要地位。为了进一步提升预制菜工厂的生产效率、保障产品质量并降低生产成本&#xff0c;制造执行系统&#xff08;M…

C# 快速排序算法的详细讲解

目录 一、前言 二、例子 三、快速排序算法图片讲解 四、快速排序算法代码 五、纯净代码 一、前言 用比较好懂的方式讲一下快速排序算法。 二、例子 如果我有一堆钱&#xff0c;想数清楚&#xff0c;最快的方案是什么&#xff1f; 图1 一堆钱 答&#xff1a;先分类&…

【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)

目录 项目演示&#xff1a; 1. 主界面 技术讲解&#xff1a; TCP连接 进程的并发 链表 SQLite3 IO对文件的读写 功能实现 实现逻辑 我遇到的问题&#xff1a; 服务器端代码思路解析 必要条件 步骤详解 客户端代码思路解析 步骤详解 服务器源码如下&#xff1a;…

GD32实战项目-app inventor-BLE低功耗DX-BT24蓝牙上位机制作-文末有关于生成的软件闪退或者卡死问题的解决

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布&#xff1a; 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转&#xff1a; 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…

什么开放式耳机好用?五大王牌开放式耳机种草!

随着科技的持续进步&#xff0c;开放式蓝牙耳机悄然兴起&#xff0c;逐步取代了经典的入耳式耳机。入耳式耳机以其卓越的隔音性能著称&#xff0c;然而&#xff0c;长时间的使用却容易引发耳道受压&#xff0c;伴随而来的不仅是疼痛与不适&#xff0c;更潜藏着耳膜受损的风险。…

C++面试宝典30题丨第一题:开灯

专栏导读 见得题目越多&#xff0c;考试时抽中的概率也越大。每一题都有详细的解答思路和独有的视频讲解。 本文收录于&#xff1a;C面试宝典&#xff08;送视频讲解&#xff09; ☆☆☆购买专栏后&#xff0c;请加微信会私发讲解视频&#xff01; 题目描述 一条名叫Mango的街…