Nginx-集群架构-2-基础应用-VIP漂移

回顾:

在 “Nginx-集群架构-1-LANMP部署” 文章中,进行了LANMP部署,并利用Nginx的反向代理、虚拟主机,完成了对于WordPress&Discuz的发布;并打上快照,快照名称”LAMP+Nginx集群架构-1″

拓扑如下:

在上述拓扑中,Nginx具备了单点故障,解决方案:使用VIP漂移;

在 “Nginx-集群架构-1-LANMP部署” 文章中,部署完LANMP之后,进行了快照,所以在本文章中我们利用恢复快照”LAMP+Nginx集群架构-1″继续进行VIP漂移的部署;


当前三台设备基本网卡信息:默认都是一个网卡

LB:

Lamp1:

Lamp2:


1、在LB(Nginx)设备上创建网卡:ifcfg-ens33:1
[root@LB ~]# cd /etc/sysconfig/network-scripts/
[root@LB network-scripts]# cp -a ifcfg-ens33 ifcfg-ens33:1

ifcfg-ens33:1 内容如下:

TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.169.210
NETMASK=255.255.255.0
[root@LB network-scripts]# ifup ifcfg-ens33:1

Curl通过新增网卡可以访问页面;

[root@LB network-scripts]# curl -I 192.168.169.210
HTTP/1.1 302 Found
Server: nginx/1.12.2
Date: Mon, 19 Oct 2020 06:36:13 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.4.16
location: install

[root@LB network-scripts]# 

2、VIP漂移原理:

VIP漂移的原理就是在两台Nginx设备上使用192.168.169.210作为浮动IP,利用shell脚本实现IP地址在两台Nginx设备上漂移,所以此时需要添加一台Nginx设备;拓扑图调整如下:


3、配置Nginx第二台设备(192.168.169.204)
[root@LB2 ~]# yum install -y vim wget gcc gcc-c++ pcre-devel zlib-devel lrzsz

上传Nginx、预编译、编译、安装;安装的Nginx需要和192.168.169.201相同

[root@LB2 ~]# tar xf nginx-1.14.2.tar.gz 
[root@LB2 ~]# cd nginx-1.14.2
[root@LB2 nginx-1.14.2]# useradd www -s /sbin/nologin -M
[root@LB2 nginx-1.14.2]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --user=www --group=www

[root@LB2 nginx-1.14.2]# make && make install

[root@LB2 nginx-1.14.2]# mkdir -p /usr/local/domain

4、将LB上的配置文件传输给LB2;
[root@LB ~]# scp -r /usr/local/domain/* 192.168.169.204:/usr/local/domain/
[root@LB ~]# scp /usr/local/nginx/conf/nginx.conf 192.168.169.204:/usr/local/nginx/conf/
[root@LB network-scripts]# scp ./ifcfg-ens33:1 192.168.169.204:/etc/sysconfig/network-scripts/          #将网卡scp过去,不能启动,否则会产生地址冲突。

5、修改本地电脑host解析的文件
192.168.169.210 bbs.zhanggeng.com
192.168.169.210 blog.zhanggeng.com

将LB上的ifcfg-ens33:1 关闭,LB2上的ifcfg-ens33:1开起来,然后访问域名,可以正常访问:

[root@LB ~]# ifdown /etc/sysconfig/network-scripts/ifcfg-ens33:1
[root@LB2 ~]# ifup /etc/sysconfig/network-scripts/ifcfg-ens33:1
[root@LB2 ~]# /usr/local/nginx/sbin/nginx 

此时192.168.169.210设置在LB2上面,能够正常访问,所以LB2上的Nginx是没有问题的,但是VIP地址的漂移,我们是通过手动的方式进行的,所以在本文章中,可以利用shell脚本实现自动切换;


6、编写Shell脚本

下列脚本无非就是一堆命令的集合,很好理解,这里就不做解释,也不需要去记忆它,知道逻辑即可!

#!/bin/bash
#15点31分
# author By zhanggeng@hope.com
# Used to auto check and change Nginx VIP
###############################################
NGINX_NUM=`ps -ef | grep nginx | grep -v grep | grep -v check | wc -l`

if [ $NGINX_NUM -eq 0 ]; then
    ifdown ens33:1 > /dev/null 2>&1
    rm -rf /etc/sysconfig/network-scripts/ifcfg-ens33:1
else
    ping -c 5 192.168.169.210 > /dev/null 2>&1
    if [ $? -ne 0  ]; then
        cat > /etc/sysconfig/network-scripts/ifcfg-ens33:1  <<EOF
TYPE=Ethernet
BOOTPROTO=static
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.169.210
NETMASK=255.255.255.0
EOF
   ifup ifcfg-ens33:1 > /dev/null 2>&1

  fi
fi
[root@LB ~]# scp auto_check_nginx_vip.sh 192.168.169.210:/root/

LB和LB2每隔5秒在后台运行一次该脚本:
[root@LB ~]# while sleep 5 ; do bash auto_check_nginx_vip.sh ;done &
[root@LB2 ~]# while sleep 5 ; do bash auto_check_nginx_vip.sh ;done &

7、验证Shell脚本的VIP漂移是否成功

目前192.168.169.210在LB2上,如下:

此时将LB2上的Nginx 先down掉,然后查看192.168.169.210网卡是否会自动删除,以及会不会在LB上自动新建网卡,即可验证;结果如下图:

此时业务依然可以正常访问,所以VIP漂移的基础应用就完成了;