【Redis】shell脚本实现redis双机房容灾切换(主从模式)

redis同城双机房容灾 (在集群node创建时,master和slave都会将各自的currentEpoch设置为0,每次从其他node接收到数据包时,如果发现发送者的epoch值比自己的大,那么当前node将自己的currentEpoch设置为发送者的epoch,最终所有的nodes都会认同集群中最大的epoch值;当该slave节点执行 cluster failover命令时,(将切换为新master节点)处理完来自master的所有复制,客户端的访问将会自动由原master节点切换至新master节点。 阅读详情

熟悉redis的人都会知道,redis可以使用sentinel哨兵模式进行容灾切换,但是在一些生产中不方便用到redis的哨兵模式,那么我们就需要对双机房发生容灾进行手动的切换。本次是通过shell脚本实现的双机房容灾切换。

1、双机房切换场景模拟

1、初始的双机房场景
在这里插入图片描述
2、A机房宕机切换至B机房场景
在这里插入图片描述
3、A机房修复后,同步数据场景
在这里插入图片描述
4、调整A、B机房为初始环境
在这里插入图片描述

2、A机房的主从切换

  • 当我们需要解决双机房的容灾时,首先要解决的是单个机房的容灾。这里我们用keepalived对A机房的redis进行心跳检测,再通过通知脚本实现redis主从的来回切换。
2.1、A机房的主从切换方案

1、初始的A机房场景
在这里插入图片描述

  • A机房在Master与Slave节点分别搭建Keepalived,设置虚拟vip;
  • B机房salveof A机房的vip;

2、A机房容灾的场景
在这里插入图片描述

  • 编写keepalived脚本检测Master心跳,当A机房的Master宕机后,将A机房的Slave设置为新的Master;
  • 当宕机的Master恢复后,将宕机的Master改为Slave,进行同步数据;
  • 数据同步完毕后,切换回初始的Master与slave;
2.2、A机房的容灾测试过程

服务器172.18.40.173为A机房的Master
服务器172.18.40.174为A机房的Slave
173,174服务器上分别搭建keepalive,设置虚拟IP为172.18.40.222

1、在A机房的173、174服务器上搭建keepalived;

① keepalived的虚拟地址监控redis的Master节点, 所以搭建好keepalived虚拟VIP在173的master节点;
② 在173节点上通过ip addr就可以看到
在这里插入图片描述

2、分别修改与编写173,174服务器的Master与slave的keepalived.conf与redis_check.sh、redis_master.sh、redis_backup.sh脚本;

keepalived.conf与redis_check.sh、redis_master.sh、redis_backup.sh脚本具体见[2.3、A机房的keepalived配置文件与脚本]

3、启动向redis存储的程序,配置地址为虚拟Vip的地址;
在这里插入图片描述
4、查看Master与Slave的存储状态,发现Master写入数据正常,Slave备份数据正常;

由于程序在循环存入数据,查看数据时不是同一时间,所以图片显示的存储数量不同. 此处要说明Master在写入数据,Slave在进行备份,存储良好
在这里插入图片描述

5、关闭173的Master的节点;
在这里插入图片描述
6、keepalived的虚拟Vip已经漂移到174服务器,数据转移到174服务器进行写入;

keepalived的虚拟vip监控Master节点, 说明173的master宕机后,174的slave切换master成功
在这里插入图片描述

7、查看174服务器的存储情况与节点信息,174已经变为Master的状态,且正在进行写入数据;
在这里插入图片描述
在这里插入图片描述
8、重启173服务器的redis;
在这里插入图片描述
9、虚拟vip已经又漂移到173服务器;

说明当173的服务器恢复后,keepalived让主从切换为原来的状态
在这里插入图片描述

10、查看174服务器的节点状态,已改变为slave,且备份的偏移量相同
在这里插入图片描述
11、停止写入数据程序,查看173、174服务器存储情况,数据一致没有丢失;
在这里插入图片描述

2.3、A机房的keepalived配置文件与脚本

1.Master的keepalived.conf配置文件

! Configuration File for keepalived
global_defs {
   router_id redis01
}
vrrp_script chk_redis{
     script "/etc/keepalived/script/redis_check.sh 172.18.40.173 6379 auth"   ## 修改auth为密码
     interval 2
     timeout 2
     fall 3
}
vrrp_instance redis {
    state MASTER
    interface ens192   ##需要修改为实际网卡名称
    virtual_router_id 60
    priority 100          ##权重,数字越大权重越大,主节点数值大于备节点
    advert_int 1
authentication {   #all node must same
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.18.40.222     ##需要修改为实际分配的虚拟IP
    }
    track_script {
         chk_redis
    }

    notify_master "/etc/keepalived/script/redis_master.sh 127.0.0.1 172.18.40.174 6379 auth"     ## 172.18.40.174 6379需要修改为实际的远端主机IP   ## 修改auth为密码

    notify_backup "/etc/keepalived/script/redis_backup.sh 127.0.0.1 172.18.40.174 6379 auth"     ## 172.18.40.174 6379需要修改为实际的远端主机IP   ## 修改auth为密码
}

2.Master的redis_check.sh脚本文件

#!/bin/bash 

ALIVE=`/app/soft/redis-5.0.5/bin/redis-cli -h $1 -p $2 -a $3 PING` 
LOGFILE="/app/log/keepalived/status" 
echo "[CHECK]" >> $LOGFILE
date >> $LOGFILE
if [ "$ALIVE" == "PONG" ]; then
    echo "Success: redis-cli -h $1 -p $2 -a $3  PING $ALIVE" >> $LOGFILE 2>&1
    exit 0   
else  
    echo "Failed:redis-cli -h $1 -p $2 -a $3 PING $ALIVE " >> $LOGFILE 2>&1
    exit 1 
fi 

3.Master的redis_master.sh脚本文件

#!/bin/bash

REDISCLI="/app/soft/redis-5.0.5/bin/redis-cli -h $1 -p $3 -a $4"
LOGFILE="/app/log/keepalived/status"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE
echo "Run MASTER cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF $2 $3 >> $LOGFILE

##判断偏移量,也可以使用下面注释掉的sleep进行同步数据的等待

slave=$(/app/soft/redis-5.0.5/bin/redis-cli -h $2 -a $4 info | grep slave0 | awk -F "=" '{print $5}' | awk -F "," '{print $1}')  
master=$(/app/soft/redis-5.0.5/bin/redis-cli -h $2 -a  $4 info | grep master_repl_offset | awk -F ":" 
一文看懂 Redis 异地多活的演进历程 第二代多活基于 Kedis 架构,对 Redis-server 进行改造,可以把增量数据从 Redis 直接写入本机房的 MQ 中,由对端机房的 consumer 来消费 MQ,consumer 将数据写入对端 Redis 中。为了解决这个问题,我们对 Redis 的 aof 机制进行了改造,可以在网络故障时,增量数据都堆积在 Redis 的磁盘上,在网络恢复后,syncer 从 Redis 里拉取增量 aof 数据发送到对端机房,避免数据丢失。 阅读详情

相关推荐

【Redis】redis cluster模式实现双机房容灾切换

Redis的cluster集群模式能够自动实现主从之间的自由切换,所以在单个机房中Redis cluster集群中,当Master宕机后,Slave会被其他Master投票选举为新的Master,从而实现故障切换。今天我们要探讨的问题是相距两地的机房中怎么实现Redis cluster集群模式的容灾切换。 目录一、redis的集群搭建测试集群一测试集群二二、redis cluster相关知识 一、redis的集群搭建 测试集群一 Master Slave 172.18.40.129:6.

羽觞醉月 5112

FastAPI构建高可用AI微服务:Redis缓存、PTU与多区域容灾实战

在AI服务从原型走向生产的过程中,稳定性远比模型精度更关键。本文围绕高可用AI微服务的核心概念展开,解析异步框架原理(如FastAPI的event loop机制)、分布式缓存设计(Redis语义级缓存与防穿透策略)、云原生资源保障(Azure OpenAI PTU的保底与弹性平衡)等关键技术价值。面向真实工程场景,覆盖LLM服务常见的超时抖动、缓存雪崩、密钥轮换、跨区故障转移等典型问题,提供可落地的韧性架构方案。内容深度融合FastAPI与Redis两大热词,兼顾开发效率与系统鲁棒性。

weixin_30367169的博客 294

使用keepalived实现Redis双机热备、高可用

Redis高可用需求(1)Redis运行在docker容器中;(2)实现双机热备,当redis-master异常时,redis-slave快速切换成master提供服务。 (3)当redis-master数据更新时,redis-slave数据能同步更新。解决方案利用keepalived实现redis的高可用。keepalived利用shell脚本,定期检测redis服务是否正常。当redis服务异

覃冠日的博客 7518

Redis未授权访问漏洞:从原理到实战的渗透测试与安全加固指南

在分布式系统与Web应用架构中,内存数据库作为高性能缓存和会话存储的核心组件,其安全性直接关系到整个系统的稳定与数据隐私。Redis作为主流的内存数据库,其默认配置在追求性能与易用性的同时,也可能因安全意识的疏忽而引入严重风险。其核心访问控制机制依赖于密码认证与网络绑定配置,若配置不当,攻击者无需认证即可连接并操作数据库,这构成了未授权访问漏洞的底层原理。这种漏洞的技术危害极大,攻击者不仅能窃取全部缓存数据(可能包含用户会话、业务逻辑等敏感信息),更可利用Redis的数据持久化功能,通过写入SSH公钥或We

weixin_34357436的博客 490

滴滴运维笔试真题解析:Linux、数据库与故障排查高频考点

运维工程师的核心工作围绕系统稳定性与故障快速恢复展开,这要求扎实掌握Linux命令、网络排查、数据库优化与脚本自动化等基础技能。无论是处理服务器负载飙升、磁盘告警,还是定位MySQL主从延迟、Redis缓存异常,都遵循“现象→分层排查→定位根因→修复验证”的工程化路径。本文以滴滴秋招运维笔试题为样本,还原了Linux系统、网络、MySQL/Redis、脚本编写及高可用架构等高频考点的解题思路,帮助读者理解大厂运维的真实能力模型。通过梳理这些经典案例分析,旨在为准备SRE/运维开发岗位的读者提供一份贴近实战的

weixin_34221036的博客 386

OpenClaw AI指令网关部署与502故障根因解析

AI指令网关是企业级AI工作流中连接大模型与业务系统的协议适配中枢,其核心原理在于解耦飞书事件协议与异步AI执行逻辑,通过JWT鉴权、请求标准化、模型路由分发和异步确认机制保障高可靠通信。技术价值体现在将自然语言指令精准转化为多系统原子操作(如Zabbix告警+多维表格SQL+邮件渲染),并内置超时控制、重试策略与契约化Skill定义。典型应用场景包括销售数据自动分析、BI看板同步、文档智能归档等飞书驱动的自动化任务。本文聚焦OpenClaw这一开源AI指令网关的落地实践,深入解析gatewayd服务启动失

weixin_34268169的博客 593

网易运维实习生笔试题拆解:从Linux基础到生产环境排障

系统运维是保障业务稳定运行的关键岗位,要求工程师具备从单机到全局的完整知识体系。Linux基础、网络协议、Shell自动化、数据库与缓存原理,构成了运维能力的核心底座。理解TCP握手、HTTP状态码、MySQL主从复制等基础知识,不仅是为了应对笔试,更是生产环境排障的必备技能。随着云原生与DevOps普及,运维场景从单一服务器走向分布式架构,监控告警、容灾备份和变更管理成为系统落地的重要保障。当面对CPU飙高、磁盘占满、大量TIME_WAIT等典型故障时,系统化的排查思路比死记硬背命令更有价值。本文以网易系

weixin_30595035的博客 348

从硬件到软件:TSMaster报文过滤全链路配置指南(含同星设备适配)

本文详细介绍了TSMaster平台下CAN/LIN/FlexRay总线的报文过滤全链路配置指南,特别针对同星TC1016等硬件的兼容性进行实战演示。从硬件层预过滤到软件层可编程过滤,提供五维过滤体系构建方法,帮助工程师提升车载诊断与总线分析效率。重点解析混合总线过滤策略优化及诊断场景下的特殊过滤方案。

tensorflowjs6的博客 401

kettle9.0+ 连接Hadoop报错

kettle bug

x²+(y-√³x²)²=1的博客 1559

(Touch™)搭建 Windows 开发环境

> OpenHaptics 开发包参考文档。

置心一处,便无事不办 1500

DiffusionDrive实战:如何用截断扩散模型3个月搞定自动驾驶轨迹规划(附代码)

本文详细介绍了如何利用DiffusionDrive截断扩散模型,在三个月内快速构建端到端的自动驾驶轨迹预测系统。内容涵盖从环境搭建、数据处理、模型架构解析到训练调参和推理优化的完整实战流程,并提供了关键代码示例,旨在帮助开发者高效实现高质量的自动驾驶轨迹规划。

weixin_35578748的博客 147

还在手敲LaTeX公式?用Rime小狼毫打造你的专属数学输入法(附完整配置包)

本文介绍如何利用Rime小狼毫输入法引擎打造专属数学公式输入方案,显著提升LaTeX公式输入效率。通过详细配置教程和智能补全技巧,帮助科研人员和学生实现3-5倍的输入速度提升,特别适合学术写作和技术文档创作场景。

weixin_32520601的博客 282

研究生课程笔记:软件包在流行病学中的应用(三)——STATA软件

关键词:STATA软件基本操作、STATA对于流行病学研究的实现、STATA对复杂抽样设计样本量计算的实现 一、STATA软件基本操作 这部分网上教程有很多,也可以直接根据stata自带的help功能进行自学,在此只记录课程中提及的功能项。 1. 变量编辑 1.1 赋值:label type(按精度区分) 1) 整型:int(32), short(16), long(32) 2) 实型:flo...

weixin_45463530的博客 2432

一个服务如何被找到、被调用、被看见:注册中心、发布注册、发现调用与服务监控的治理闭环

服务数量一多,“对方在哪儿”就成了时刻变化的变量。本文沿发布、注册、发现、调用、监控的治理闭环展开:注册中心的数据模型、健康检查与AP/CP取舍,自我保护、推空保护与本地快照三道自保机制;服务发布的启动器、动态代理、发布管理器、协议服务器与登记顺序;消费端的服务目录、请求ID配对、六种集群容错与三种发现模式;日志、指标、链路三支柱与熔断舱壁。配套五个Java演示程序实测:默认参数下宕机实例平均240秒才被摘除,优雅下线可降至45秒,统计窗口长于租约会让自我保护失效,尾部采样可捕获全部慢请求。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 169万+

milvus | 第 1 章:从“相似图片搜索”理解 Milvus 向量数据库

本文介绍了向量数据库Milvus的核心概念和基本架构。主要内容包括:1)向量数据库解决的是高维向量相似度检索问题,通过Embedding将非结构化数据转换为向量进行比较;2)Milvus作为分布式向量数据库,包含Proxy、Coordinator、QueryNode等多个组件协同工作;3)关键概念如Collection、Schema、Segment等构成了Milvus的数据组织方式;4)典型使用流程包括创建集合、插入数据、构建索引、加载数据和执行搜索五个步骤。文章为后续深入理解Milvus源码提供了基础知识

weixin_43674738的博客 133

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

下一篇: 【Redis】redis cluster模式实现双机房容灾切换
羽裳醉月
博客等级 码龄7年 18粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值