当前位置: 首页 > news >正文

Redis5主备安装-Redis

本次Redis有两台服务器及3个独立IP:主服务器的ip地址是192.168.31.190,从服务器的IP地址是192.168.31.191,vipIP地址是192.168.31.216

主备方案承载Redis最大的好处是无需考虑Redis崩后无法访问。

 前提是需要优先安装keepalived,其次安装Redis。

1、master配置

! Configuration File for keepalivedglobal_defs {router_id master
}vrrp_script chk_redis {script "/data/keepalived/redis_check.sh"interval 2    
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 150advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.31.216 dev ens33 label ens33:1}track_script {chk_redis}notify_master "/data/keepalived/redis_master.sh master"notify_backup /data/keepalived/redis_backup.shnotify_fault /data/keepalived/redis_fault.shnotify_stop /data/keepalived/redis_stop.sh
}

2、backup1配置

! Configuration File for keepalived
global_defs {router_id backup1
}
vrrp_script chk_redis {script "/data/keepalived/redis_check.sh"interval 2
}
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.31.216 dev ens33 label ens33:1}track_script {chk_redis  }notify_master "/data/keepalived/redis_master.sh master"notify_backup /data/keepalived/redis_backup.shnotify_fault /data/keepalived/redis_fault.shnotify_stop /data/keepalived/redis_stop.sh
}

3、创建脚本目录

mkdir -p /data/keepalived

4、编辑监听脚本

vi /data/keepalived/redis_check.sh
#!/bin/bash
ALIVE=`redis-cli -a 123456 PING` 
if [ "$ALIVE" == "PONG" ];thenecho $ALIVEexit 0
elsesystemctl stop keepalived.serviceexit 1
fi

5、默认监听脚本

vi /data/keepalived/redis_fault.sh
#!/bin/bash 
LOGFILE=/data/keepalived/redis-state.log
echo "[fault]" >> $LOGFILE 
date >> $LOGFILE

6、停止监听脚本

vi /data/keepalived/redis_stop.sh
#!/bin/bash 
LOGFILE=/data/keepalived/redis-state.log
echo "[stop]" >> $LOGFILE 
date >> $LOGFILE

7、master服务器master脚本

vi /data/keepalived/redis_master.sh
#!/bin/bash
REDISCLI="redis-cli -a 123456"
LOGFILE="/data/keepalived/redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.31.191 6379 >> $LOGFILE  2>&1
sleep 10
echo "Run REPLICAOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI REPLICAOF NO ONE >> $LOGFILE 2>&1
date >> $LOGFILE
在该节点的keepalived第一次启动,指keepalived组中仅有这一台或者这一台的优先级别最高,自动成为主节点,然后就会调用该脚本;
脚本中先从备机上同步数据,如果备机没有运行或故障了,则过几秒执行命令使这个节点的Redis成为主节点(提供读写能力)。
邮件配置
contact=(1509454760@qq.com) #接收者邮箱,多个以空格分隔
HOST_IP=[192.168.31.190] #本机ip
notify() {mailsubject="Redis发生切换($HOST_IP)" #邮件主题mailbody="$(date +'%F %T'): vrrp transition, $HOST_IP keepalived changed to be $1" #邮件正文for receiver in ${contact[*]}doecho "$mailbody" | mail -s "$mailsubject" $receiver #发送邮件done
}
case $1 in
master)notify master;;
backup)notify backup;;
fault)notify fault;;
*)echo "Usage:{master|backup|fault}"exit 1;;
esac

8、master服务器backup脚本

vi /data/keepalived/redis_backup.sh
#!/bin/bash
REDISCLI="redis-cli -a 123456"
LOGFILE="/data/keepalived/redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.31.191 6379 >> $LOGFILE  2>&1
sleep 15
echo "Run REPLICAOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI REPLICAOF NO ONE >> $LOGFILE 2>&1
当这个原来是主节点,但是中途挂了,最后又重新启动后,这个时候已经由一个备节点变成了主节点,则keepalived会执行该脚本;
该脚本首先等一段时间,给备机充足的时间切换为主节点,然后该脚本执行命令,让本节点的Redis成为新主节点Redis的备份服务。

9、backup1服务器master脚本

vi /data/keepalived/redis_master.sh
#!/bin/bash
REDISCLI="redis-cli -a 123456"
LOGFILE="/data/keepalived/redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.31.190 6379 >> $LOGFILE  2>&1
sleep 10
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
当该节点在主节点挂掉之后会执行;
脚本会先从主节点同步数据,然后脚本执行命令让本机Redis独立为主服务(提供读写能力)
邮件配置
contact=(1509454760@qq.com) #接收者邮箱,多个以空格分隔
HOST_IP=[192.168.31.191] #本机ip
notify() {mailsubject="Redis发生切换($HOST_IP)" #邮件主题mailbody="$(date +'%F %T'): vrrp transition, $HOST_IP keepalived changed to be $1" #邮件正文for receiver in ${contact[*]}doecho "$mailbody" | mail -s "$mailsubject" $receiver #发送邮件done
}
case $1 in
master)notify master;;
backup)notify backup;;
fault)notify fault;;
*)echo "Usage:{master|backup|fault}"exit 1;;
esac

10、backup1服务器backup脚本

vi /data/keepalived/redis_backup.sh
#!/bin/bash
REDISCLI="redis-cli -a 123456"
LOGFILE="/data/keepalived/redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
sleep 15
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.31.190 6379 >> $LOGFILE  2>&1
该脚本是在主节点的Redis成为主服务时,或主节点服务已经开启,备机服务再开启后自动执行;
脚本先等待一段时间,让主节点切换为主服务,然后脚本执行命令使本节点的Redis成为主节点的备机。

11、授权

cd /data/keepalived/
chmod +x *.sh
touch redis-state.log

12、启动注意事项

#优先启动master服务器的keepalived,但是前提是Redis已经启动完毕咯,第二是keepalived端口已经放出来咯
#第一次启动时,backup1节点的服务一定是在主master节点服务都开启后才启动,本机Redis只能提供读的功能(可配置为可写,但不安全)。
systemctl start keepalived.service #启动服务
systemctl stop keepalived.service #停止服务
systemctl restart keepalived.service #重启服务
ps -ef|grep keepalive #检查keepalive服务
ip addr #检查vip是否启动

13、测试

redis-cli -h 192.168.31.216 -p 6379
auth 123456
set id 1
get id
redis-cli -h 192.168.31.190 -p 6379
auth 123456
get id
redis-cli -h 192.168.31.191 -p 6379
auth 123456
get id
确认都有数据的情况下,停止192.168.31.190的Redis,正常来说,会将192.168.31.216IP漂移到192.168.31.191这台服务器上,然后测试
190这台服务器上的操作
systemctl stop redis.service
ps -ef|grep keepalive #检查keepalive服务
ip addr #检查vip是否启动
191这台服务器上的操作
ps -ef|grep keepalive #检查keepalive服务
ip addr #检查vip是否启动
redis-cli -h 192.168.31.216 -p 6379
auth 123456
set name wangyulong
get name
redis-cli -h 192.168.31.191 -p 6379
auth 123456
get name
再次整个漂移是成功的
如果再次启动192.168.31.190的Redis服务以及keepalive服务,正常来说又会回到以前
systemctl start redis.service #启动redis服务 
systemctl start keepalived.service #启动服务
然后到192.168.31.191这台服务器上去查看keepalive服务以及vip是否存在
ps -ef|grep keepalive #检查keepalive服务
ip addr #检查vip是否启动
正常来说,在192.168.31.191这台服务器上keepalive服务是正常运行的,而VIP却是不存在的。因为vip又回到了主服务(192.168.31.190)上
再到192.168.31.190这台服务器上去查看keepalive服务以及vip是否存在
ps -ef|grep keepalive #检查keepalive服务
ip addr #检查vip是否启动
正常来说,在192.168.31.190这台服务器上keepalive服务是正常运行的,VIP服务也是正常运行的。最后首先采用vip连接到redis服务里面,查看name是否存在
redis-cli -h 192.168.31.216 -p 6379
auth 123456
get name
redis-cli -h 192.168.31.190 -p 6379
auth 123456
get name

 前提是需要优先安装keepalived,其次安装Redis

相关文章:

Redis5主备安装-Redis

本次Redis有两台服务器及3个独立IP:主服务器的ip地址是192.168.31.190,从服务器的IP地址是192.168.31.191,vipIP地址是192.168.31.216 主备方案承载Redis最大的好处是无需考虑Redis崩后无法访问。 前提是需要优先安装keepalived,…...

C++票据查验、票据ocr、文字识别

现在,80、90后的人们逐渐过渡为职场上的主力人员,在工作中当然也会碰到各种各样的问题。比如,当你的老板给你一个艰难的任务时,肯定是不能直接拒绝的。那么我们该怎么做呢?翔云建议您先认真考虑老板说的任务的难度&…...

pytest.ini介绍

1.pytest.ini是什么 ? pytest.ini文件是pytest的主配置文件;pytest.ini文件的位置一般放在项目的根目录下,不能随便放,也不能更改名字。在pytest.ini文件中都是存放的一些配置选项 ,这些选项都可以通过pytest -h查看到…...

Vue项目打包成桌面应用

Vue项目打包成桌面应用 一、使用 NW.js 打包 NW.js基于Chromium和Node.js。它允许您直接从浏览器调用Node.js代码和模块,并在应用程序中使用Web技术。此外,您可以轻松地将web应用程序打包为本机应用程序。 NW官网...

DEFAULT_JOURNAL_IOPRIO

/* * 这些是 CFQ(完全公平排队)实现的 I/O 优先级组。 RT 是实时类,它总是能获得优质服务。 BE 是尽力而为的调度类,是任何进程的默认类别。 IDLE 是空闲调度类,只有在没有其他人使用磁盘时才会被服务。 */ /* *…...

【阿卡迈防护分析】Vueling航空Akamai破盾实战

文章目录 1. 写在前面2. 风控分析3. 破盾实战 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...

使用AWS Lambda轻松开启Amazon Rekognition之旅

这是本系列文章的第一篇,旨在通过动手实践,帮助大家学习亚马逊云科技的生成式AI相关技能。通过这些文章,大家将掌握如何利用亚马逊云科技的各类服务来应用AI技术。 那么让我们开始今天的内容吧! 介绍 什么是Amazon Rekognition&…...

如何获取VS Code扩展的版本更新信息

获取VS Code 扩展的版本更新的需求 因为企业内部有架设私有扩展管理器的要求,但是对于一些官方市场的插件,希望可以自动获取这些扩展的更新并上传至私有扩展管理器。于是就有了本篇介绍的需求: 通过API的方式获取VS Code 扩展的更新。 关于…...

Python开源项目周排行 2024年第13周

#2024年第13周2024年8月5日1roop一款基于深度学习框架TensorFlow和Keras开发的单图换脸工具包,提供了丰富的功能和简洁易用的界面,使得用户可以轻松实现单图换脸操作。支持多张人脸替换成同一个人脸,勾选多人脸模式即可 人脸替换 高清修复自…...

day04--js的综合案例

1.1 商品全选 需求&#xff1a;商品全选 1. 全选 &#xff1a;点击全选按钮,所有复选框都被选中 2. 全不选 &#xff1a;点击全不选按钮,所有复选框都被取消选中 3. 反选 &#xff1a; 点击反选按钮,所有复选框状态取反 <!DOCTYPE html> <html lang"en">…...

【产品经理】定价策略

年初的时候&#xff0c;尝试自己独立运营了一个美团店铺&#xff0c;最终没有继续做下去了&#xff0c;原因是利润率太低&#xff0c;平台和骑手把利润拿走太多了&#xff0c;根本没有钱赚&#xff0c;烧钱搞流量更是深不见底。 不过也学到了很多东西&#xff0c;比如选品策略…...

webrtc学习笔记3

Nodejs实战 对于我们WebRTC项目而言&#xff0c;nodejs主要是实现信令服务器的功能&#xff0c;客户端和服务器端的交互我们选择websocket作为通信协议&#xff0c;所以以websocket的使用为主。 web客户端 websocket WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行…...

Transformer架构;Encoder-Decoder;Padding Mask;Sequence Mask;

目录 Transformer架构 Transformer架构的主要组成部分: 简单举例说明输入和输出: Encoder-Decoder 编码器/解码器组成 6、位置前馈网络(Position-wise Feed-Forward Networks) 7、残差连接和层归一化 10、掩码Mask 10.1 Padding Mask 10.2 Sequence Mask 为什么…...

【leetcode详解】特殊数组II : 一题代表了一类问题(前缀和思想)

前缀和的优势 给定一个数组&#xff0c;前缀和的特点在于&#xff0c;任意给出一对始末位置&#xff0c;能够用O(1)的时间复杂度得到始末位置之间所有元素的某种关系。 题型分析 这道题目正是“给出始末位置&#xff0c;检测其中元素特点”那一类&#xff0c;那我们就想&#…...

SQL每日一练-0814

今日SQL题难度&#xff1a;&#x1f31f;☆☆☆☆☆☆☆☆☆ 1、题目要求 找出每个部门中薪资最高的员工显示部门ID、部门名称、员工ID、员工姓名以及对应的薪资 2、表和虚拟数据 现有两个表&#xff1a;Employees 和 Departments&#xff0c;记录了员工和部门信息。…...

Android持久化技术—文件存储

Android持久化技术—文件存储 文件存储是Android中最基本的一种数据存储方式&#xff0c;它不对存储的内容进行任何的格式化处理&#xff0c;所有数据都是原封不动地保存到文件当中的&#xff0c;因而它比较适合用于存储一些简单的文本数据或二进制数据。如果你想使用文件存储…...

动手学深度学习(pytorch)学习记录12-激活函数[学习记录]

激活函数 激活函数&#xff08;activation function&#xff09;通过计算加权和并加上偏置来确定神经元是否应该被激活&#xff0c; 它们将输入信号转换为输出的可微运算。 import torch import matplotlib.pyplot as plt 简单定义一个画图的函数 def graph_drawing(x_,y_…...

微服务实战系列之玩转Docker(十)

前言 我们知道Docker的“使命”是为了快速完成应用的迁移和部署。为提升它的战斗能力&#xff0c;Docker官方携手发布了Docker Swarm—— 一个快速完成Docker集群构建的利器。那么请先回忆一下本系列第八篇&#xff08;重点compose&#xff09;和第九篇&#xff08;重点networ…...

Mysql(四)---增删查改(进阶)

文章目录 前言1.查询操作1.1.全列查询1.2.指定列查询1.3.列名为表达式查询1.4.查询中使用别名1.5.去重查询1.6.排序1.6.2.NULL 1.7.条件查询1.8.分页查询 2.修改3.删除 前言 上一篇博客&#xff0c;我们学习了一些主键的概念&#xff0c;并且分别创造了一些示例表&#xff0c;…...

SOAP @WebService WSDL

SOAP & WebService & WSDL SOAP&#xff08;Simple Object Access Protocol&#xff09;WebService&#xff08;Web服务&#xff09;WSDL&#xff08;Web Services Description Language&#xff09; SOAP&#xff08;Simple Object Access Protocol&#xff09; **是一…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...

工厂方法模式和抽象工厂方法模式的battle

1.案例直接上手 在这个案例里面&#xff0c;我们会实现这个普通的工厂方法&#xff0c;并且对比这个普通工厂方法和我们直接创建对象的差别在哪里&#xff0c;为什么需要一个工厂&#xff1a; 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类&#xff1a; 两个发…...