利用两台虚拟机搭建Nginx高可用集群、宕机测试、宕机恢复

一、准备阶段:

准备:两台虚拟机 CentOS Linux release 7.5.1804 (Core)、pcre-8.45.tar.bz2nginx-1.21.3.tar.gz
ip地址分别为:192.168.10.102192.168.10.103
关于网关和子网掩码:请看下图,可以知道两台虚拟机所在的子网为192.168.10.xxx,所以下面设置的虚拟ip就是要满足这个要求
虚拟机ip可通过ifconfig查找获取
在这里插入图片描述
在这里插入图片描述

查看两台虚拟机防火墙,保证处于关闭状态:

[root@hadoop102 nginx-1.21.3]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
[root@hadoop103 local]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

2.1 进入 nginx 官网,下载
下载ngnixpcre
ngnix:http://nginx.org
pcre:命令拉取
进入/opt/software/拉取pcre

cd /opt/software/
wget http://downloads.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz
#查看当前目录内容
ls -l

二、安装阶段:

1.安装pcre及其依赖

解压文件

tar xvf pcre-8.45.tar.gz

进入解压后的目录

cd pcre-8.45
[root@hadoop102 pcre-8.45]# pwd
/opt/software/pcre-8.45

在当前目录下,先安装相关依赖
安装 opensszlib

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

然后

./configure

./configure 完成后,回到 pcre 目录下执行 make
再执行 make install

make && make install

验证安装

[root@hadoop102 pcre-8.45]# pcre-config --version
8.45

/usr/local/bin目录下会生成pcre-configpcregreppcretest三个文件
在这里插入图片描述

2.安装ngnix

类似pcre安装,不用再次安装依赖包了,步骤如下
1、 解压缩 nginx-xx.tar.gz 包。
2、 进入解压缩目录, 执行./configure。
3、 make && make install
验证安装
c
进入nginx目录下的sbin目录,启动nginx

./nginx

在本机浏览器中输入192.168.10.102访问缺省时端口是80,来启动nginx,出现以下结果说明nginx启动正常
在这里插入图片描述

退回nginx主目录,ls查看内容
在这里插入图片描述
两台虚拟机同样安装上面步骤安装,不要使用xcall分发,会导致用不了

3.安装keepalived

不要通过yum安装!不要通过yum安装!不要通过yum安装!
重要事情说三遍,亲测,版本太低,导致与nginx无法兼容,报错,一直无法解决

三、配置阶段:

配置高可用文件
(1)修改/etc/keepalived/keepalived.conf 配置文件
进入/opt/software目录下拉取2.0.9版本的keepalived,下载很快,用的华为云的镜像,而且很好用

wget https://mirrors.huaweicloud.com/keepalived/keepalived-2.0.9.tar.gz

解压并安装

 tar xf keepalived-2.0.9.tar.gz
 cd keepalived-2.0.9/
 ./configure
 make && make insatll

执行文件keepalived.service安装位置默认安装在/usr/local/sbin
配置文件keepalived.conf安装位置默认安装在/usr/local/etc/keepalived/keepalived.conf
不想用了的话,也很好卸载,卸载时把这两个位置卸载即可
/usr/local/etc{sysconfig, keepalived}/usr/local/sbin/keepalived.service
或通过whereis keepalived来查找路径
配置keepalived

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ # 配置在优先级最高处
cp /usr/local/sbin/keepalived /etc/init.d/ #设置为全局

启动keepalived

systemctl daemon-reload
systemctl start keepalived

查看服务是否启动成功
在这里插入图片描述
配置/etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
        notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
        }
        notification_email_from Alexandre.Cassen@firewall.loc
        smtp_server 192.168.10.102
        smtp_connect_timeout 30
        router_id LVS_DEVEL #也可以写ip地址,这里是host的映射名,需要到host中配
        #置,不过随便写一个唯一也没事,最多就是警报的时候找不到ip,通知不到而已,host
        #文件位置在/etc/hosts
}

vrrp_script chk_http_port {
        script "/usr/local/src/nginx_check.sh"
        interval 2 #(检测脚本执行的间隔)
        weight 20
}

vrrp_instance VI_1 {
        state MASTER # 备份服务器上将 MASTER 改为 BACKUP
        interface ens33 //网卡
        virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
        priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
        advert_int 1

        authentication {
                auth_type PASS
                auth_pass 1111
        }

        track_script{ # 这里调用检测脚本执行,一秒检测一次
                chk_http_port
        }

        virtual_ipaddress {
                192.168.10.50 // VRRP H 虚拟地址
        }
}

从机只改两处:

state MASTER # 备份服务器上将 MASTER 改为 BACKUP
priority 100 # 备用机改为90就好,备机取不同的优先级,主机值较大,备份机值较小

这里主机写权值为100,而备用机写90是有根据的,是靠调用检测脚本来的,里边有权重20,只要检测不到,说明宕机了,那那权重就不给这台机器了,总体权限priority+weight就会降低为priority,而备用机没有宕机依旧是priority+weight,就在这里发生了主备切换了
(2)在/usr/local/src 添加检测脚本nginx_check.sh,并添加执行权限

#!/bin/bash
# 获取nginx进程数,并赋值给A,没有进程则为0
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
        # 开启nginx服务
        /usr/local/nginx/sbin/nginx
        sleep 2
        # nginx没有启动成功
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                # 杀死keepalived进程
                killall keepalived
        fi
fi

通过以下命令添加执行权限

chmod +x nginx_check.sh

如果是复制我的脚本,复制后先./nginx_check.sh看能否运行

[root@hadoop102 src]# ./nginx_check.sh
-bash: ./xxxxx.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录

如果出现以上错误,说明很有可能是由以下原因引起的:
1.在Windows系统上编写的Shell脚本,然后上传到Linux服务器执行
2.Windows系统中的换行符是"\n\r",Linux系统中的换行符是"\n",因此需要将\r替换为空白。

解决方案:
Linux sed命令可自动编辑一个或多个文件,执行以下命令即可。

sed -i 's/\r$//' xxxxx.sh

四、启动阶段:

启动前可以先开启服务器系统日志,方便查错

tail -f /var/log/messages

开启后,将该会话作为日志跟踪,再开启另外两个会话给两台虚拟机

1.集群测试

集群启动必须按照以下顺序启动,否则无法唤醒从机
1.启动两台虚拟机的ngnix

./nginx

2.启动主节点的keepalived
3.启动从节点的keepalived

测试:
浏览器输入虚拟ip地址:192.168.10.50
在这里插入图片描述
192.168.10.102:查看虚拟ip192.168.10.50保持开放着
在这里插入图片描述192.168.10.103:还没有唤醒192.168.10.50这个虚拟ip
在这里插入图片描述

2. 宕机测试

先关闭主节点keepalived,再关闭nginx,没有为什么,先关闭nginx后,keepalived的脚本检测不到nginx进程后会试图去启动服务,需要先关闭keepalived服务
192.168.10.102:虚拟ip已经没有了,看看是否转移到了192.168.10.103节点去了
在这里插入图片描述192.168.10.103:发现多了一个虚拟ip
在这里插入图片描述再次访问页面:
在这里插入图片描述
访问成功,192.168.10.102宕机后,192.168.10.103接替了这个虚拟ip

这时还没完,先把nginx服务开启,再开启keepalived后,发现102节点多了虚拟ip,103的虚拟消失了,再次访问页面,成功,说明102优先级是高于103

为了解决集群,足足切换了好几个版本的keepalived,所以,想配置集群而且刚好看到本文的,推荐连同ngnixpcre的版本保持一致

特别鸣谢:https://www.cnbugs.com/post-2857.html
解决文件执行问题:https://blog.csdn.net/l1028386804/article/details/110246256
以及B主尚硅谷:https://www.bilibili.com/video/BV1zJ411w7SV?p=15
Keepalived权值问题详见:https://blog.csdn.net/HzSunshine/article/details/62041036

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嗝屁小孩纸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值