redis搭建一主一从+keepalived(虚拟IP)实现高可用

redis搭建一主一从+keepalived(虚拟IP)实现高可用

前提
有两台机器:如 10.50.3.141 10.50.3.142,虚拟ip如:10.50.3.170

安装redis(两台机器执行):

# 启用Remi仓库(CentOS 7)
sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm# 安装Redis 6.x
sudo yum --enablerepo=remi install redis -y# 验证版本
redis-server --version

配置Redis主从
vim /etc/redis.conf
主节点的配置文件

bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
save 60 100
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
# 从节点同步密码
masterauth 123456
slave-serve-stale-data no
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
#配置正确的redis连接密码
requirepass 123456appendonly yes
appendfilename "appendonly.aof"
appendfsync always
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb#这是虚拟IP
replicaof 10.50.3.170 6379

从节点的配置文件

bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised systemd
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "/var/log/redis/redis.log"
databases 16
save 60 100
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir "/var/lib/redis"
# 从节点同步密码
masterauth "123456"
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
#配置正确的redis连接密码
requirepass "123456"
slave-serve-stale-data noappendonly yes
appendfilename "appendonly.aof"
appendfsync always
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb# Generated by CONFIG REWRITE
latency-tracking-info-percentiles 50 99 99.9
user default on sanitize-payload #ea2c0ed04d278df4c7b5f9de01217a0c8122313ecc7514483f3e4af9f702029a ~* &* +@all

重启Redis服务(两台服务器执行)

sudo systemctl restart redis
sudo systemctl enable redis

安装Keepalived(两台服务器执行)​

sudo yum install keepalived -y

配置Keepalived虚拟IP
主节点的配置文件
vim /etc/keepalived/keepalived.conf

global_defs {router_id REDIS_HA_MASTER     # 主节点标识(从节点改为REDIS_HA_SLAVE)vrrp_skip_check_adv_addr      # 允许忽略广播地址检查#vrrp_strict                  # 必须注释,否则VIP无法绑定
}! ------------------- Redis健康检查配置 -------------------
vrrp_script chk_redis {script "/usr/local/bin/check_redis.sh"interval 2weight -20timeout 5
}! ------------------- Redis虚拟IP实例 -------------------
vrrp_instance VI_REDIS {state MASTER                  # 从节点改为 BACKUPinterface eth0                # 网卡名用ip addr确认(如ens192)virtual_router_id 88          # 主从必须相同(1-255,不与其它服务冲突)priority 100                  # 主节点100,从节点设为更低值(如90)advert_int 1authentication {auth_type PASSauth_pass RedisHA@123     # 主从密码需一致(建议修改)}virtual_ipaddress {10.50.3.170/24 dev eth0           # 虚拟IP(掩码按实际网络调整)}track_script {chk_redis}# 确保启用抢占模式(主节点恢复后自动夺回VIP)preempt delay 300notify_master "/usr/local/bin/master.sh"notify_backup "/usr/local/bin/backup.sh"
}

从节点的配置文件

global_defs {router_id REDIS_HA_SLAVE     # 主节点标识(从节点改为REDIS_HA_SLAVE)vrrp_skip_check_adv_addr      # 允许忽略广播地址检查#vrrp_strict                  # 必须注释,否则VIP无法绑定
}! ------------------- Redis健康检查配置 -------------------
vrrp_script chk_redis {script "/usr/local/bin/check_redis.sh"interval 2weight 2timeout 5
}! ------------------- Redis虚拟IP实例 -------------------
vrrp_instance VI_REDIS {state BACKUP                  # 从节点改为 BACKUPinterface eth0                # 网卡名用ip addr确认(如ens192)virtual_router_id 88          # 主从必须相同(1-255,不与其它服务冲突)priority 90                   # 主节点100,从节点设为更低值(如90)advert_int 1authentication {auth_type PASSauth_pass RedisHA@123     # 主从密码需一致(建议修改)}virtual_ipaddress {10.50.3.170/24 dev eth0}track_script {chk_redis}# 确保启用抢占模式(主节点恢复后自动夺回VIP)preempt delay 300notify_master "/usr/local/bin/master.sh"notify_backup "/usr/local/bin/backup.sh"
}

配置健康检查及切换脚本
主节点
/usr/local/bin/check_redis.sh

REDIS_PASS="123456"
LOG_FILE="/var/log/redis_health.log"# 检查Redis进程
if ! pgrep -x redis-server >/dev/null; thenecho "$(date) - Redis进程不存在" >> $LOG_FILEexit 1
fi# 检查服务响应(增加超时3秒)
if ! timeout 3 redis-cli -a "$REDIS_PASS" ping 2>/dev/null | grep -q PONG; thenecho "$(date) - Redis服务无响应" >> $LOG_FILEexit 1
fiecho "$(date) - 状态正常" >> $LOG_FILE
exit 0

/usr/local/bin/master.sh

#!/bin/bash
redis-cli -a 123456 replicaof no one

/usr/local/bin/backup.sh

#!/bin/bash
redis-cli -a 123456 replicaof 10.50.3.170 6379

从节点
/usr/local/bin/check_redis.sh

REDIS_PASS="123456"
LOG_FILE="/var/log/redis_health.log"# 检查Redis进程
if ! pgrep -x redis-server >/dev/null; thenecho "$(date) - Redis进程不存在" >> $LOG_FILEexit 1
fi# 检查服务响应(增加超时3秒)
if ! timeout 3 redis-cli -a "$REDIS_PASS" ping 2>/dev/null | grep -q PONG; thenecho "$(date) - Redis服务无响应" >> $LOG_FILEexit 1
fiecho "$(date) - 状态正常" >> $LOG_FILE
exit 0

/usr/local/bin/master.sh

#!/bin/bash
# 提升为主节点时,强制所有其他节点成为本节点的从节点
redis-cli -a 123456 REPLICAOF NO ONE
# 更新其他节点的复制关系(假设节点列表已知)
for node in 10.50.3.141; doredis-cli -h $node -a 123456 REPLICAOF 10.50.3.170 6379
done

/usr/local/bin/backup.sh

#!/bin/bash
redis-cli -a 123456 replicaof 10.50.3.170 6379

启动Keepalived

sudo systemctl start keepalived
sudo systemctl enable keepalived

验证

redis-cli -a 123456 SET testkey "hello"
redis-cli -a 123456 GET testkey主节点 systemctl stop redis
ip addr  看是否漂移到从节点,然后set get key来试下是否正常

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

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

相关文章

【Golang那些事】go1.22和1.23 更新重点及测评

好久没有写文章了,攒了一年的Golang版本特性的技术点以及踩过的坑,那就在新年第一篇的文章中做一个总结吧: 一、关于迭代器 (一)迭代器去掉了共享共享内存 一个经典的面试题 说到Golang经典的面试题,大家可能都刷到过很多&…

【css酷炫效果】纯CSS实现照片堆叠效果

【css酷炫效果】纯CSS实现照片堆叠效果 缘创作背景html结构css样式完整代码基础版进阶版(增加鼠标悬停查看) 效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492022 缘 创作随缘,不定时更新。 创…

labview与西门子1500plc进行S7通讯(仿真效果)

环境: 1.博图V16 2.S7-PLCSIM Advanced V3.0 3.labview2020 4.HslCommunication的dll文件 运行效果图 通过使用HslCommunication的库文件来对西门子plc进行通讯 labview代码 代码打包 通过网盘分享的文件:labview进行s7通讯测试.rar 链接: https:/…

[蓝桥杯 2023 省 B] 飞机降落(不会dfs的看过来)

[蓝桥杯 2023 省 B] 飞机降落 题目描述 N N N 架飞机准备降落到某个只有一条跑道的机场。其中第 i i i 架飞机在 T i T_{i} Ti​ 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 D i D_{i} Di​ 个单位时间,即它最早可以于 T i T_{i} Ti​ 时刻…

实验1:Vue基础实验

Web前端开发技术实验报告 实验1:Vue基础实验 一、实验目的: 掌握Vue实例的创建方法理解并初步掌握Vue实例的生命周期及钩子函数的使用掌握计算属性与侦听器使用方法 二、实验要求: 掌握Vue的基本语法及使用。编写程序并调试,完…

Spring Cloud 服务监控 - Sleuth + Zipkin 全链路追踪实战

一、为何需要全链路追踪? 在微服务架构中,用户请求通常涉及多个服务的交互(如订单→支付→库存)。这使得性能瓶颈和故障排查变得更加复杂。传统的日志分析面临两大核心挑战: • 性能瓶颈模糊:当响应延迟增…

数据类设计_图片类设计之6_矩阵图形类设计(前端架构)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇,讨论矩阵图形类设计 方法论-现在能做什么 这段属于聊天内容---有句话是这么说的:不要只埋头拉车,还要抬头看路。写代码也是…

OpenCV图像拼接(1)概述

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 此图说明了在Stitcher类中实现的拼接模块流程。使用该类,可以配置/移除某些步骤,即根据特定需求调整拼接流程。流程中的所…

【开原宝藏】30天学会CSS - DAY1 第一课

下面提供一个由浅入深、按步骤拆解的示例教程,让你能从零开始,逐步理解并实现带有旋转及悬停动画的社交图标效果。为了更简单明了,以下示例仅创建四个图标(Facebook、Twitter、Google、LinkedIn),并在每一步…

【pytest框架源码分析五】pytest插件的注册流程

前文介绍到pytest整体是运用插件来实现其运行流程的。这里仔细介绍下具体过程。 首先进入main方法 def main(args: list[str] | os.PathLike[str] | None None,plugins: Sequence[str | _PluggyPlugin] | None None, ) -> int | ExitCode:"""Perform an i…

谷歌or-tools开源库入门

1.命令行编译程序 这里要说明下,直接用qt或者VS2022打开cmake工程,编译没有成功。所以,老老实实的按照官方教程来,使用命令行编译。 (1)准备 1)安装cmake,版本3.18以上&#xff0…

Python实现WYY音乐下载

一、需求背景 WYY音乐作为国内主流音乐平台,其歌曲资源丰富但下载接口存在多重加密保护。本文将通过Python结合JS逆向技术,解析其核心加密逻辑,实现免费歌曲的下载功能。 二、技术难点分析 1. 接口加密机制 通过抓包分析可知,网易云核心接口使用两次加密: 第一次:获取…

拥抱健康生活,开启养生之旅

在快节奏的现代生活中,健康养生愈发重要,它不仅能让我们保持良好状态,更是享受美好生活的基石。​ 饮食养生是健康的关键。我们应秉持均衡原则,一日三餐合理搭配。多摄入新鲜蔬果,它们富含维生素、矿物质与膳食纤维&a…

《Waf 火绒终端防护绕过实战:系统程序副本+Certutil木马下载技术详解》

目录 绕过火绒终端安全软件的详细方法 方法一:利用系统程序副本绕过命令监控 方法二:结合certutil.exe副本下载并执行上线木马 注意事项 总结 实际案例解决方案 前提条件 详细操作步骤 1. 攻击主机(VPS)上的准备工作 2.…

机器学习概要

文章目录 一、什么是机器学习 二、机器学习的种类 1. 有监督学习 2. 无监督学习 3.强化学习 三、机器学习的应用 四、机器学习的步骤 1. 数据的重要性 2. 数据和学习的种类 3. 可视化 一、什么是机器学习 机器学习指的是计算机根据给定的问题、课题或环境进行学习&a…

C# Winform 实现换肤,并自定义皮肤功能

具体实现原理详见 SkinHelp.cs类,实现了对原有控件的重绘,详见源码 public abstract class SkinHelp{private static SkinColor _currentSkinColor SkinColor.Default;private static BackgroundStripe _currentStripe BackgroundStripe.Default;priva…

基于FPGA的3U机箱模拟量高速采样板ADI板卡,应用于轨道交通/电力储能等

板卡简介: 本板为模拟量高速采样板(ADI),主要用于电机转速和相电流检测,以实现电机闭环控制。 性能规格: 电源:DC5V,DC3.3V,DC15V,DC24V FPGA:…

python爬虫概述

0x00 python爬虫概述 以豆瓣的选电影模块为例,当查看源代码搜索猫猫的奇幻漂流瓶是搜不到的 这时服务器的工作方式应该是这样的 客户端浏览器第一次访问其实服务器端是返回的一个框架(html代码) 当客户端浏览器第二次通过脚本等方式进行访问时服务器端才返回的数据…

win10 如何用我的笔记本 接网线 远程控制 台式机

1.查看笔记本ip,台式机ip。确保在同一网段 可以ping通 1.1 ip在同一网段,但是ping不通 1.解决:把双方防火墙关闭 2.解决:当前网口,先禁用再启用 以上两台电脑就可以ping通了 2.设置双方电脑 启动远程控制 此电脑-》…

给管理商场消防安全搭建消防安全培训小程序全过程

一、需求沟通 “我是管理商场消防安全的嘛,做这个的作用呢,1是商场的所有商户员工可以看平面或者视频随时自学, 2是我们定期培训必修课程、考试,这个需要留存他们的手签字的签到表确认我们讲给他们听了(免责很重要&am…