双击热备方案实现(全)

双击热备是应用与服务器的一种解决方案,其构造思想是主机和从机通过TCP/IP网络连接,正常情况下主机处于工作状态,从机处于监视状态,一旦从机发现主机异常,从机将会在很短的时间内代替主机。完全实现主机的功能。

要想实现双击热备方案,就需要用到keepalived软件。

1.Keepalived介绍

Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。

Keepalived是Linux下一个轻量级别的高可用解决方案。使用的是VRP协议,VRP协议将两台或多台设备组成一个虚拟路由组,在这个虚拟路由组中会存在一个MASTER书点以及多个BACKUP节点,在MASTER节点上会绑定一个虚拟VIP虚拟VIP),作为客户机只需要使用这个VIP来访问后端的服务器即可。虚拟IP的使用和真是P其实没有区别。当MASTER节点宕机以后,此时会从多个BACKUP节点中选择一个节点作为MASTER节点,而只有MASTER节点才可以绑定对应的VP,此时VIP就会重新绑定到新的MASTER节点上,这样就实现了ip的飘逸。而整个过程对客户机是透明的,客户机是感知不到ip飘逸的整个过程。

2.实操演示

2.1环境说明

本次我们使用两个虚拟机来演示一下借助于keepalived来实现双机热备。具体的环境说明如下所示:

2.2nginx安装

分别安装nginx

查看正在运行的进程并过滤出包含nginx关键字的进程的命令 :

ps -ef | grep nginx

查看防火墙状态:

systemctl status firewalld.service

如果状态为running

关闭防火墙:

systemctl stop firewalld.service

浏览器输入主从节点的IP查看nginx页面

主节点:

从节点:

2.3keppalived安装

主节点配置文件内容:

#定义虚拟网卡需要和当前服务器(192.168.35.xxx)绑定的网卡相对应

#定义组vriid,主从节点id配置相同

#adver_int : 1 每一秒发送一次心跳检查包

#主从节点之间的认证是通过密码认证,主从节点配置必须相同

#设置虚拟ip:用户去访问的ip,主从节点需要一致

备份节点配置文件内容:

配置完毕后启动Keepalived服务:

(先启动主节点,在启动从节点)

启动完成之后,查看ens33网卡ip地址是否新增了前面所配置的虚拟ip地址(110)

此时在主节点上查看查看ens33网卡ip地址时,可查看新增的110ip,从节点不显示110ip。

主节点:

从节点:

2.4 进行测试

1、使用虚拟ip访问nginx服务:http://192.168.136.1102、关闭主节点上的keepalived软件,查看ip是否可以自动飘逸

2.当把主节点(150)的keepalived服务停止时

停止后查看主节点(150)ens33网卡ip地址时,IP已发生飘逸变成150的IP

查看从节点(151)时,IP已经变成110

3.当把主节点(150)的keepalived服务启动时

启动后查看主节点(150)ens33网卡ip地址时,IP已发生飘逸变成110的IP

查看从节点(151)时,IP已经不显示虚拟IP

3.编写检测脚本

在刚才我们是通过手动关闭keepalived软件然后让ip飘逸到从节点上了,大家试想一下如果这个主机上的keepalived软件没有出现问题,而是nginx出现了问题,此时ip开会自动飘逸吗?肯定是不会的,那么此时用户使用虚拟ip访问的还是有问题的nginx,此时就无法完成请求访问。

虚拟IP(110)访问失败,因为目前110绑定的是主节点150,当访问虚拟IP110时,实际上访问的是主节点150的nginx,此时主节点150的nginx挂了,nginx访问失败。

解决该问题的思路:就是编写一个检测nginx服务的脚本,然后让keepalived每隔一段时间执行一次,一旦检测到了nginx出现问题了以后,就将keepalived进程关闭掉,keepalived进程关闭后,IP会进行漂移到另一台服务器。

检测脚本(check_nginx.sh):

(反引号)判断nginx的结果,当结果A=0时,标识nginx没启动,此时就将keepalived进程关闭掉。

设置可执行权限:

可将此脚本放在keepalived配置文件的相同目录

脚本执行命令:sh /路径/check_nginx.sh

测试

当执行脚本之后,主节点150 ens33网卡ip地址没有虚拟IP 110 ,此时访问110 时实际访问的是另一台服务器(151)的nginx

现在就能解决该问题,但是以上脚本时手动执行的,不现实,下面将修改配置,自动执行检测脚本。

在原来主节点的keepalived配置文件加上如下配置

注意:如果发现检测脚本不执行,此时就需要关闭linux中安全检测模块。

测试

1.启动主节点(150)的nginx,在启动主节点(150)的keepalived,此时查看主节点的 ens33网卡ip地址,发现虚拟IP110已经漂移回来了。

此时访问虚拟IP 110时,实际访问的是主节点 150的nginx

2.主动关闭主节点上的nginx

再次访问虚拟IP 110,此时实际访问的从节点151的nginx

至此,完整的双击热备解决方案得以解决!

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

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

相关文章

golang之net/http模块学习

文章目录 开启服务开启访问静态文件获取现在时间按时间创建一个空的json文件按时间创建一个固定值的json文件 跨域请求处理输出是json 开启服务 package mainimport ("fmt""net/http" )//路由 func handler(w http.ResponseWriter, r *http.Request){fmt.…

2023年多元统计分析期末试题

一、简答题 1、试述距离判别法、Fisher判别法和贝叶斯判别法的异同。 二、 2、设 X {X} X~ N 2 {N_2} N2​(μ,Σ),其中 X {X} X ~ ( X 1 {X_1} X1​, X 2 {X_2} X2​, X 3 {X_3} X3​),μ ( μ 1 {μ_1} μ1​, μ 2 {μ_2} …

2024不收费的数据恢复软件EasyRecovery16

EasyRecovery2024是一款操作安全、用户可自主操作的数据恢复方案,它支持从各种各样的存储介质恢复删除或者丢失的文件,其支持的媒体介质包括:硬盘驱动器、光驱、闪存、硬盘、光盘、U盘/移动硬盘、数码相机、手机以及其它多媒体移动设备。能恢…

软件测试【理论基础】

软件测试的IEEE定义:使用人工或自动的手段来运行或测量软件系统的过程,目的是检验软件系统是否满足规定的需求,并找出与预期结果之间的差异。 软件测试的发展趋势: ① 测试工作将进一步前移。软件测试不仅仅是单元测试、集成测…

数据结构算法-插入排序算法

引言 玩纸牌 的时候。往往 需要将牌从乱序排列变成有序排列 这就是插入排序 插入排序算法思想 先看图 首先第一个元素 我默认已有序 那我们从第二个元素开始,依次插入到前面已有序的部分中。具体来说,我们将第二个元素与第一个元素比较,…

单细胞测序并不一定需要harmony去除批次效应

大家好,今天我们分享的是单细胞的学习教程https://www.singlecellworkshop.com/analysis-tutorial.html 教程的作者使用了四个样本,但是没有使用harmony或者其他方法去整合 去除批次效应。 主要内容: SCTransform流程代码及结果 harmony流程…

Shell脚本介绍

Shell脚本是一种使用文本编辑器编写的简单脚本语言,它可以自动化常见的系统任务,例如执行命令、处理文件和文本数据等。Shell脚本通常使用Unix或Linux系统中的shell(例如bash)来解释执行。 Shell脚本的基本语法包括: …

scrapy的建模及管道的使用

一、数据建模 通常在做项目的过程中,在items.py中进行数据建模 为什么建模 定义item即提前规划好哪些字段需要抓,防止手误,因为定义好之后,在运行过程中,系统会自动检查,配合注释一起可以清晰的知道要抓…

【面试经典150 | 二叉树】二叉树的最大深度

文章目录 写在前面Tag题目来源解题思路方法一:递归方法二:迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的…

MVSNeRF:多视图立体视觉的快速推广辐射场重建

MVSNeRF:多视图立体视觉的快速推广辐射场重建 摘要1 引言 摘要 在2021年,作者提出了MVSNeRF,一种新的神经渲染方法,在视图合成中可以有效地重建神经辐射场。与之前对神经辐射场的研究不同,我们考虑了对密集捕获的图像…

十分钟带你看懂——Python测试框架之pytest最全讲

pytest特短 pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手 支持参数化 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试&#xff08…

如何能够对使用ShaderGraph开发的Shader使用SetTextureOffset和SetTextureScale方法

假设在ShaderGraph中的纹理的引用名称为"_BaseMap",同时对这个"_BaseMap"纹理使用了采样的节点"SampleTexture2D",然后该采样节点的uv接入的TilingAndOffset节点,此时的关键步骤是新建一个Vector4属性&#xf…

C++实现顺序栈的基本操作(扩展)

#include <stdio.h> typedef char ElemType; #define StackSize 100 /*顺序栈的初始分配空间*/ typedef struct { ElemType data[StackSize]; /*保存栈中元素*/int top; /*栈顶指针*/ } SqStack; void InitStack(SqStack &st) {st.top-1; } …

SSM整合(注解版)

SSM 整合是指将学习的 Spring&#xff0c;SpringMVC&#xff0c;MyBatis 进行整合&#xff0c;来进行项目的开发。 1 项目基本的配置类 1.1 Spring 配置类 这个配置类主要是管理 Service 中的 bean&#xff0c;controller 层的 bean 对象是 SpringMVC 管理的 package cn.ed…

案例研究|作为一家BI厂商,飞致云是如何人人使用DataEase的?

杭州飞致云信息科技有限公司&#xff08;以下简称为飞致云&#xff09;长期秉持“软件用起来才有价值&#xff0c;才有改进的机会”的核心价值观&#xff0c;以“为数字经济时代创造好软件”为使命&#xff0c;致力于成为中国数字化团队首选的通用工具软件提供商。在软件产品不…

编码器-解码器(seq-seq)

1. 背景 encoder-decoder和seq-seq模型可以解决输入与输出都是不定长序列的问题。它们都用到了两个循环NN&#xff0c;分别叫做编码器(用来分析输入序列)与解码器(用来生成输出序列)。 2. 编码器 把一个不定长的输入序列变换成一个定长的背景变量c&#xff0c;并在其中编码输入…

大文件分片上传、分片进度以及整体进度、断点续传【前端原生、后端 Koa、Node 原生】(一)

分片&#xff08;500MB&#xff09;进度效果展示 效果展示&#xff0c;一个分片是 500MB 的 分片&#xff08;10MB&#xff09;进度效果展示 大文件分片上传效果展示 前端 思路 前端的思路&#xff1a;将大文件切分成多个小文件&#xff0c;然后并发给后端。 页面构建 先在页…

数据结构学习笔记——广义表

目录 一、广义表的定义二、广义表的表头和表尾三、广义表的深度和长度四、广义表与二叉树&#xff08;一&#xff09;广义表表示二叉树&#xff08;二&#xff09;广义表表示二叉树的代码实现 一、广义表的定义 广义表是线性表的进一步推广&#xff0c;是由n&#xff08;n≥0&…

C++11(上)

统一的列表初始化 首先要说明&#xff1a; 这个列表初始化和类和对象那里的初始化列表不是一个概念. {} 初始化 在C98中, 标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定. 比如: C语言里面其实就是这样支持的, 所以可以认为C支持这样就是因为要兼容C. 在…

IDEA中也能用postman了?

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…