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

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

今天继续给大家介绍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 nginx

NGINX_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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
上述脚本完成后,我们需要将该脚本写成定时任务,间隔执行,进行检测,如下:

while sleep 5; do bash /root/nginx_vip.sh ; done &
1
执行该命令后,我们的Nginx虚拟IP实战就配置完成了。

三、效果检验
最后,让我们进行结果检验。在两个设备上,都开启Nginx服务,并且都运行上述检测脚本。从另一台设备上不断访问虚拟IP地址,这时关闭其中一台设备的Nginx服务,观察现象如下所示:

可以看出,该虚拟IP地址在短暂的终端后,恢复正常响应,这就说明了我们在断开Nginx服务的时候,该设备上的后台脚本启动,关闭了自身的网卡,同时,另一台设备开启了自身的虚拟IP网卡,这就解释了为什么会失去响应后立即恢复的现象。
当我们访问该虚拟IP地址网页时,发现一切正常,如下所示:

综上,我们的Nginx虚拟IP实战配置成功!
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_40228200/article/details/122991752

目录
相关文章
|
24天前
|
应用服务中间件 nginx
树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问
树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问
|
1月前
|
Web App开发 编解码 运维
LNMP详解(十二)——Nginx URL重写实战
LNMP详解(十二)——Nginx URL重写实战
20 2
|
1月前
|
运维 前端开发 应用服务中间件
LNMP详解(八)——Nginx动静分离实战配置
LNMP详解(八)——Nginx动静分离实战配置
36 0
|
3月前
|
应用服务中间件 PHP 开发工具
Nginx解析环境搭建及实战
Nginx解析环境搭建及实战
26 0
|
1月前
|
运维 负载均衡 应用服务中间件
LNMP详解(九)——Nginx虚拟IP实战
LNMP详解(九)——Nginx虚拟IP实战
71 2
|
5月前
|
Java 应用服务中间件 nginx
Nginx之服务端获取真实客户端IP
Nginx之服务端获取真实客户端IP
160 5
|
5天前
|
域名解析 弹性计算 应用服务中间件
基于nginx反向代理实现OSS固定域名IP访问
本文基于阿里云OSS手册:https://help.aliyun.com/zh/oss/use-cases/use-an-ecs-instance-that-runs-centos-to-configure-a-reverse-proxy-for-access-to-oss,继续深入讨论如何利用nginx反向代理,实现固定的IP/域名访问OSS bucket。官方文档能够解决大部分的反向代理固定IP访问oss bucket的场景,但是对于必须使用域名作为endpoint的系统,会出现signatrue鉴权问题。本文继续在官方文档的基础上,将反向代理需要域名作为endpoint的场景补齐方案。
|
6天前
|
应用服务中间件 nginx
如何在树莓派部署Nginx并实现无公网ip远程访问内网制作的web网站
如何在树莓派部署Nginx并实现无公网ip远程访问内网制作的web网站
9 0
|
12天前
|
监控 数据可视化 安全
如何查找访问 Nginx 的前 10 个 IP?
【5月更文挑战第1天】
24 1
如何查找访问 Nginx 的前 10 个 IP?
|
25天前
|
Ubuntu 应用服务中间件 Linux
nginx 配置代理ip访问https的域名配置
nginx 配置代理ip访问https的域名配置