LNMP详解(九)——Nginx虚拟IP实战

article/2025/10/14 5:41:49

今天继续给大家介绍Linux运维的相关知识,本文主要内容是Nginx的虚拟IP实战。

一、实战背景

在LNMP详解(七)——Nginx反向代理配置实战一文中,我们实现了如下所示的架构:
在这里插入图片描述
在该架构中,Nginx作为反向代理,起到了负载均衡的作用,还可以在该架构的基础上实现动静分离。但是,该架构存在一个很明显的缺陷,即当Nginx发生故障后,整个架构就会宕掉,无法正常工作。
为了弥补这一缺陷,我们可以引入两台Nginx服务器,这两台Nginx服务器一主一备,当主Nginx服务器宕机后,备用Nginx服务器立即工作,起到了故障转移的作用。为了实现这一目的,我们不希望在Nginx主备切换时更改DNS消息或者其他设置,因此,我们可以借鉴计算机网络中VRRP的思路,使这两台Nginx服务器共享一个虚拟的IP地址,当主Nginx服务正常运行时,备Nginx时刻监听主Nginx服务器的状态;当主Nginx服务宕机后,备Nginx会新创建一个虚拟网卡,监听该虚拟IP地址。这样,就实现了两台Nginx服务器的故障转移了。

二、虚拟IP配置

接下来,我们进行Nginx的虚拟IP配置实战,实战架构如下:
设备1IP:192.168.136.101
设备2IP:192.168.136.102
虚拟IP:192.168.136.200
为了实现Nginx虚拟IP的设置,我们需要在每个Nginx设备上运行脚本,脚本思路如下:首先,检测自身是否开启Nginx服务,当自身没有开启Nginx服务时,就必须关闭虚拟IP所对应的网卡。当自身开启Nginx服务时,就要检测虚拟IP地址是否存在,如果存在,则说明另一台设备上已经运行了虚拟IP地址,那么我们就不能启动该虚拟IP对应的网卡,以防网卡冲突,如果虚拟IP地址不存在,就说明另一台设备上没有运行虚拟IP地址对应的网卡,那么我们自身就可以创建并启动虚拟IP网卡,监听虚拟IP地址,提供Nginx服务。
Nginx虚拟网卡对应的脚本(包含详细解释)如下所示:

#!/bin/bash
# 2022-02-17
# writed by pzz
# Used to realize the failover of nginxNGINX_NUM=`ps -ef | grep nginx | wc -l`
# ps -ef | grep nginx表示抓取当前系统中的所有进程,并选取包含Nginx字符的进程,wc -l 表示统计行数
# NGINX_NUM变量保存了上述执行的结果,用于下面的if判断语句,采用这种方式来判断自身的Nginx服务是否开启
if [$NGINX_NUM -eq 3];then
# 判断自身Nginx服务是否开启,if表达式表示Nginx服务没有开启,之所以该值不等于1,是因为grep自身的进程和本进行会也会被抓取,这会影响抓取结果ifdown ens32-virtual > /dev/null 2>&1
# 当Ngixn服务没有开启,自身需要关闭虚拟IP对应的网卡,后面的标识无论是否执行正确,结果都不会显示在桌面上。rm -rf /etc/sysconfig/network-scripts/ifcfg-ens32-virtual
# 表示删除虚拟网卡文件
else
# 表示当自身的Nginx服务开启后ping -c 1 192.168.136.200 > /dev/null 2>&1
# 表示检测虚拟IP地址是否存在if [$? -ne 0];then
# 如果虚拟IP地址不存在,那么上一条命令会执行失败,那么结果也就不会为0,就会进入这个if语句cat >/etc/sysconfig/network-scripts/ifcfg-ens32-virtual <<EOF
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32-virtual
ONBOOT=no
IPADDR=192.168.136.200
NETMASK=255.255.255.0
GATEWAY=192.168.136.254
DNS1=114.114.114.114
EOF
# 以上命令表示把EOF之中的内容写成ifcfg-ens32-virtual文件中,放在/etc/sysconfig/network-scripts/目录下ifup ens32-virtual > /dev/null 2>&1
# 以上命令表示开启虚拟IP对应的网卡fi
fi

上述脚本完成后,我们需要将该脚本写成定时任务,间隔执行,进行检测,如下:

while sleep 5; do bash /root/nginx_vip.sh ; done &

执行该命令后,我们的Nginx虚拟IP实战就配置完成了。

三、效果检验

最后,让我们进行结果检验。在两个设备上,都开启Nginx服务,并且都运行上述检测脚本。从另一台设备上不断访问虚拟IP地址,这时关闭其中一台设备的Nginx服务,观察现象如下所示:
在这里插入图片描述
可以看出,该虚拟IP地址在短暂的终端后,恢复正常响应,这就说明了我们在断开Nginx服务的时候,该设备上的后台脚本启动,关闭了自身的网卡,同时,另一台设备开启了自身的虚拟IP网卡,这就解释了为什么会失去响应后立即恢复的现象。
当我们访问该虚拟IP地址网页时,发现一切正常,如下所示:
在这里插入图片描述
综上,我们的Nginx虚拟IP实战配置成功!
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200


http://chatgpt.dhexx.cn/article/acTFC25P.shtml

相关文章

centos7 配置虚拟ip

环境概览 master&#xff1a;192.168.46.26 slave1&#xff1a;192.168.46.27 测试机&#xff1a;192.168.46.22&#xff08;用于ping机器&#xff09; 安装keepalived yum install -y keepalived修改master keepalived.conf 配置文件 vim /etc/keepalived/keepalived.confi…

计算机 修改 虚拟ip,怎么样在电脑中设置虚拟IP地址?

满意答案 wtc6981 2020.03.01 采纳率&#xff1a;56% 等级&#xff1a;9 已帮助&#xff1a;114人 更改IP地址 广域IP: 1、如果是PPOE上网只需断开连接再重新连上就好了,服务器会从IP地址池中随机分配一个IP地址给你。 2、固定IP上网那你要找运营商更改了,这样改是快不了的。…

虚拟服务器的真实ip,虚拟ip和真实ip区别(图文)

【导读】虚拟ip和真实ip区别&#xff0c;下面就是191路由网整理的网络知识百科&#xff0c;来看看吧&#xff01; 大家好&#xff0c;我是191路由器网小编&#xff0c;上述问题将由我为大家讲解。 虚拟ip和真实ip区别是真实IP是网络运营商提供的所以不能自己变更&#xff0c;虚…

keepalived配置虚拟IP

YUM安装 # yum安装 yum -y install keepalived # 查看安装版本 rpm -qa keepalived # 查看安装路径 rpm -ql keepalived或是使用源码安装 到这里下载 https://www.keepalived.org/download.html # 安装依赖 yum -y install gcc openssl-devel libnfnetlink-devel 下载源码包…

虚拟ip的概念

1.虚拟IP是什么&#xff1f; 要是单讲解虚拟 IP,理解起来很困难,所以干脆把 动态 IP 、固定 IP 、实体 IP 与虚拟 IP都讲解一下,加深理解和知识扩展 实体 IP&#xff1a;在网络的世界里&#xff0c;为了要辨识每一部计算机的位置&#xff0c;因此有了计算机 IP 位址的定义。一…

虚拟IP简介

什么是虚拟IP 虚拟IP&#xff08;Virtual IP Address&#xff0c;简称VIP&#xff09;是一个未分配给真实弹性云服务器网卡的IP地址。弹性云服务器除了拥有私有IP地址外&#xff0c;还可以拥有虚拟IP地址&#xff0c;用户可以通过其中任意一个IP&#xff08;私有IP/虚拟IP&…

浮点数的表示及其运算

目录 浮点数一般表示 科学计数法 浮点数一般表示 浮点数表示范围 浮点数规格化 IEEE 754 浮点数一般表示 科学计数法 科学记数法的形式是由两个数的乘积组成的。表示为a10^b&#xff0c;例如电子质量9 x 10^28kg 浮点数一般表示 对于浮点数也是类似 ,S&#xff1a;正…

CPU算力(cpu理论浮点运算值)

最近因碰到CPU的算力是多少&#xff1f;所以研究了一下CPU的浮点计算理论值&#xff0c;做个笔记 FLOPS&#xff0c;即每秒浮点运算次数, 是每秒所执行的浮点运算次数&#xff08;Floating-point operations per second&#xff1b;缩写&#xff1a;FLOPS&#xff09;的简称&a…

CPU和GPU浮点运算方法-公式

处理器和GPU的计算能力如何计算&#xff1f; &#xff08;一&#xff09; CPU的浮点计算性能公式 我们常用双精度浮点运算能力衡量一个处理器的科学计算的能力&#xff0c;就是处理64bit小数点浮动数据的能力 intel的最新cpu支持高级矢量指令集AVX2、AVX512&#xff0c; 其中…

定点运算,浮点运算,算术逻辑单元

定点运算 &#xff08;一&#xff09;移位运算 1、移位运算的数学意义 先举一个例子&#xff1a;15m 1500 cm&#xff0c;在这个变换过程中&#xff0c;就可以通过移位运算进行实现&#xff0c;实际上在这个等式中&#xff0c;小数点被隐含了&#xff0c;在15m和1500cm数值最…

计算机组成原理之浮点运算

总结一下自己的学习过程&#xff0c;如果有错误的地方&#xff0c;希望你们可以不吝赐教哦♥ 浮点运算中数的形式 如&#xff1a; 浮点运算中补码的表示形式 如&#xff1a; 浮点运算的步骤 1.求阶差&#xff0c;对阶 对阶时要遵循小阶向大阶看齐的原则 2.尾数求和 3.规格化…

浮点数的算数运算

看下面代码 看结果 注意&#xff01;浮点数不能参与取余 如何保留小数点后两位 我们看下运行结果

计算机中的浮点数运算

计算机中的浮点数 计算机中以固定长度存储浮点数的方式&#xff0c;造成了浮点数运算过程容易产生上溢和下溢。以float32为例, 其标记位占1bit,指数位占8bit,小数部分占23bit 经典下溢场景 不满足精度导致截断误差 #include <iostream> #include <iomanip> usin…

常用算法公式之取模

文章目录 前言求最大公约数&#xff08;欧几里得算法&#xff09;贝祖等式蓝桥杯&#xff1a;一步之遥暴搜解法贝祖解法&#xff08;欧几里得&#xff09; 模运算&#xff08;同余方程&#xff09;青蛙的约会&#xff08;例题&#xff09; 求逆元总结 前言 今天呢&#xff0c;…

大数取模运算,快速幂取模运算

1.快速幂取模 http://www.cnblogs.com/yinger/archive/2011/06/08/2075043.html 快速幂取模就是在O(logn)内求出a^n mod b的值。算法的原理是ab mod c(a mod c)(b mod c)mod c long exp_mod(long a,long n,long b) {long t;if(n0) return 1%b;if(n1) return a%b;texp_mod(a…

关于取模运算(mod)和求余(rem)运算

通常情况下取模运算(mod)和求余(rem)运算被混为一谈&#xff0c;因为在大多数的编程语言里&#xff0c;都用’%’符号表示取模或者求余运算。在这里要提醒大家要十分注意当前环境下’%’运算符的具体意义&#xff0c;因为在有负数存在的情况下&#xff0c;两者的结果是不一样的…

模运算——神奇的9

2012/10/11 19:55 在求余运算中&#xff0c;9是个神奇的数&#xff0c;它让求余变得如此简单。 求 2468 Mod 9&#xff0c;对于2468这个数&#xff0c;可以直接计算得出结果&#xff0c;这里并不这样做&#xff0c;而是用它来引出9的神奇特性。 因为 2468 2000 400 60 8 上…

模n运算

2019独角兽企业重金招聘Python工程师标准>>> 注意:只是个人理解,可能有不正确的地方 对于整数a、n,模n运算就是求a除以n的余数 如果a=10,n=3,那么a除以n的商为3,余数为1 C语言等编程语言中常使用%代表求模运算:a%n 10%3=1 英文中也使用mod代表求模运算:a mo…

密码学-模逆运算

扩展欧几里得算法 给予二整数 a 与 b, 必存在有整数 x 与 y 使得 ax by gcd(a,b) 。 有两个数a,b&#xff0c;对它们进行辗转相除法&#xff0c;可得它们的最大公约数——这是众所周知的。然后&#xff0c;收集辗转相除法中产生的式子&#xff0c;倒回去&#xff0c;可以得…

什么是长轮询

短轮询 vs 长轮询短轮询长轮询 长轮询的原理demotomcat线程池AsyncContext源码分析 短轮询 vs 长轮询 在看apollo和nacos等配置中心的源码的时候发现&#xff0c;配置更新的实时感知都是采用的长轮询的方式。那么什么是长轮询的呢&#xff1f;在讲解长轮询之前我们先了解一下什…