双击热备方案实现(全)

双击热备是应用与服务器的一种解决方案,其构造思想是主机和从机通过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盘/移动硬盘、数码相机、手机以及其它多媒体移动设备。能恢…

bfs P2895 [USACO08FEB] Meteor Shower S

[P2895 USACO08FEB] Meteor Shower S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) bfs。难点在于处理走到该点时的时间与该处陨石降落的时间的比较。 可以发现,在某处可能有多个陨石降落,但是此题只考虑陨石降落的最小时间。因此,我们可…

测试:JMeter和LoadRunner比较

比较 JMeter和LoadRunner是两款常用的软件性能测试工具,它们在功能和性能上有一定的相似性和差异。下面从几个方面对它们进行比较: 1. 架构和原理: JMeter和LoadRunner的架构和原理基本相同,都是通过中间代理监控和收集并发客户…

软件测试【理论基础】

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

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

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

软件工程 单选多选补充 复刻

原文 软件的主要特性:无形、高成本、包括程序和文档 软件工程三要素:方法、工具、过程 螺旋模型包含风险分析 软件工程的主要目标:风险分析 面向对象开发:Booch、UML、Coad、OMT 软件危机的主要表现:软件成本太高…

单细胞测序并不一定需要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…

C++获取当前exe或者 dll所在的路径,并读取配置文件

目录 一、C获取当前动态库所在的路径两种方式: 1、使用操作系统相关的API来实现 2、利用GetModuleFileNameA 二、读取配置文件 1、先了解下GetPrivateProfileString 读取配置信息 2、读取配置信息示例说明: 3、梳理集中类型获取值的示例 一、C获取…

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

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

mac如何永久设置环境变量

1. 先将默认shell修改为bash mac修改默认shell为bash-CSDN博客 2. 修改环境变量 Mac中的环境变量介绍 Mac系统的环境变量,加载顺序为: /etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc 当然/etc/profile和/etc/paths…

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;致力于成为中国数字化团队首选的通用工具软件提供商。在软件产品不…