Nginx高可用部署

Nginx高可用部署

前言

目前是通过Nginx做Web服务器和负载均衡,如果Nginx服务宕掉的话,会导致所有服务都无法进行访问,需要对Nginx来做高可用,目前是通过keepalived的虚拟IP(VIP)的漂移来实现的,当一台Nginx服务器宕掉后VIP会自动漂到另一台服务器继续提供访问。

部署环境及版本

系统版本:CentOS Linux release 7.9.2009
Nginx版本:1.19.6
Keepalived版本:v1.3.5

准备

主机ip安装程序
192.168.102.212Nginx、Keepalived
192.168.102.213Nginx、Keepalived

1、关闭自带防火墙,用iptables,添加hosts文件解析

# 关闭SELinux
setenforce 0 
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config# 关闭Firewalld并禁止自启动
systemctl stop firewalld
systemctl disable firewalld# 安装iptables
yum install -y iptables-services# 启动iptables服务,并设置开机自启动(修改规则在/etc/sysconfig/iptables)
systemctl start iptables
systemctl enable iptables.service

2、时间同步

yum -y install ntp
systemctl enable ntpd
systemctl start ntpd
timedatectl set-timezone Asia/Shanghai
ntpdate -u time.nist.gov
ntpdate -u time.nist.gov
date

一、Nginx部署

1、基础环境部署脚本

vim Deployment_preparation.sh
#!/bin/bash
#部署前准备
yum update -y
yum install ntpdate -y
ntpdate time.windows.com
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl stop firewalld.service
systemctl disable firewalld.service
firewall-cmd --state
systemctl list-unit-files | grep firewalld
yum install -y iptables-services
systemctl enable iptables.service
systemctl start iptables
systemctl restart iptables

2、Nginx部署脚本

      
#!/bin/bash
read -p "please input your Intranet address : " IP
package_PATH_="/server/tools"
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install gcc-c++ -y
yum install -y openssl openssl-devel
yum install lua-devel -y    
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel wget unzip
if [ -d ${package_PATH_} ];thenecho dir ${package_PATH_} exist!
elsemkdir -p /server/tools
fi
cd $package_PATH_
if [ -e nginx-1.19.6.tar.gz ];thenecho "nginx-1.19.6.tar.gz is exist !"
elseecho "Please An installation package nginx-1.19.6.tar.gz is available"exit 24
fi
tar -zvxf nginx-1.19.6.tar.gz
useradd work
cd  nginx-1.19.6
./configure --user=work --group=work --prefix=/data/nginx --with-http_v2_module --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre
make  && make install
sed -i '2c user work work;' /data/nginx/conf/nginx.conf
sed -i '3c worker_processes  auto;' /data/nginx/conf/nginx.conf
sed -i '9c pid        logs/nginx.pid;' /data/nginx/conf/nginx.conf
sed -i '13c worker_connections  10240;' /data/nginx/conf/nginx.conf
sed -i '116c include /data/nginx/conf/vhost/*.conf;' /data/nginx/conf/nginx.conf 
mkdir -pv /data/nginx/conf/vhost
cd /usr/lib/systemd/system
cat > nginx.service << EOF
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
ExecStart=/data/nginx/sbin/nginx -c /data/nginx/conf/nginx.conf
ExecReload=/data/nginx/sbin/nginx -s reload
ExecStop=/data/nginx/sbin/nginx -s quit
PrivateTmp=true[Install]
WantedBy=multi-user.target
EOF
systemctl start nginx
systemctl status nginx
systemctl enable nginx
systemctl daemon-reload
echo  "Cluster_Nginx is Deployment complete!"

二、Keepalived部署Nginx高可用

1、安装keepalived和killall

yum install psmisc keepalived -y

2、将原来配置备份,参考下面进行配置

Nginx的master配置
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived::
vrrp_script chk_nginx  {
script "/usr/local/src/check_nginx_pid.sh"
interval 2 #脚本检测频率
weight -5 #脚本执行成功与否,权重怎么计算
fall 2 #如果连续两次检测失败,认为节点服务不可用
rise 1 #如果连续2次检查成功则认为节点正常
}vrrp_instance VI_1 {
state MASTER
interface ens160 #节点IP的网卡
virtual_router_id 200 #同一个instance相同
priority 212 # 优先级,数值越大,优先级越高
advert_int 1
authentication { #节点间的认证,所有的必须一致
auth_type PASS
auth_pass Hirain_ha_215
}
virtual_ipaddress { #VIP,自定的,和外网的IP要一个网段
192.168.102.99/24
}track_script { #指定前面脚本的名字
chk_nginx
} 
}
Nginx的backup配置
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived#指定proxysql服务检测脚本
vrrp_script chk_nginx  {
script "/usr/local/src/check_nginx_pid.sh"
interval 2 #脚本检测频率
weight -5 #脚本执行成功与否,权重怎么计算
fall 2 #如果连续两次检测失败,认为节点服务不可用
rise 1 #如果连续2次检查成功则认为节点正常
}vrrp_instance VI_1 {
state BACKUP
interface ens160 #节点IP的网卡
virtual_router_id 200 #同一个instance相同
priority 211 # 优先级,数值越大,优先级越高
advert_int 1
authentication { #节点间的认证,所有的必须一致
auth_type PASS
auth_pass Hirain_ha_215
}
virtual_ipaddress { #VIP,自定的,和外网的IP要一个网段
192.168.102.99/24
}track_script { #指定前面脚本的名字
chk_nginx
}
}

3、Nginx进程检测脚本

vim /usr/local/src/check_nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];thensystemctl start nginxsleep 5if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfi
fi

脚本授权

chmod 755 /usr/local/src/check_nginx_pid.sh

4、启动keepalived并设置开机自启动

systemctl start keepalived
systemctl enable keepalived

三、测试

测试场景一

Nginx服务宕掉,测试Nginx是否自动重启

[root@mgr01 vhost]# ps axu|grep nginx
root      3817  0.0  0.0  46104  1160 ?        Ss   10:10   0:00 nginx: master process /data/nginx/sbin/nginx -c /data/nginx/conf/nginx.conf
work      3818  0.0  0.1  50276  5612 ?        S    10:10   0:00 nginx: worker process
work      3819  0.0  0.1  50276  5612 ?        S    10:10   0:00 nginx: worker process
root      4143  0.0  0.0 112812   980 pts/0    S+   10:12   0:00 grep --color=auto nginx
systemctl stop nginx
[root@mgr01 vhost]# ps axu|grep nginx
root      4302  0.0  0.0 115408  1444 ?        S    10:13   0:00 /bin/bash /usr/local/src/check_nginx_pid.sh
root      4308  0.0  0.0  46104  1156 ?        Ss   10:13   0:00 nginx: master process /data/nginx/sbin/nginx -c /data/nginx/conf/nginx.conf
work      4309  0.0  0.1  50276  5612 ?        S    10:13   0:00 nginx: worker process
work      4310  0.0  0.1  50276  5612 ?        S    10:13   0:00 nginx: worker process
root      4313  0.0  0.0 112812   980 pts/0    S+   10:13   0:00 grep --color=auto nginx
[root@mgr01 vhost]# ps axu|grep nginx
root      4308  0.0  0.0  46104  1156 ?        Ss   10:13   0:00 nginx: master process /data/nginx/sbin/nginx -c /data/nginx/conf/nginx.conf
work      4309  0.0  0.1  50276  5612 ?        S    10:13   0:00 nginx: worker process
work      4310  0.0  0.1  50276  5612 ?        S    10:13   0:00 nginx: worker process
root      4340  0.0  0.0 112812   980 pts/0    S+   10:13   0:00 grep --color=auto nginx

测试结果:Nginx服务宕掉后,会自动重新启动

测试场景二

Nginx服务器宕掉后,或者是Nginx重启失败后,VIP是否会漂到另一台服务器

[root@mgr01 vhost]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 12:34:56:78:96:17 brd ff:ff:ff:ff:ff:ffinet 192.168.102.212/22 brd 192.168.103.255 scope global noprefixroute dynamic ens160valid_lft 123607sec preferred_lft 123607secinet 192.168.102.99/24 scope global ens160valid_lft forever preferred_lft foreverinet6 fe80::ef48:def0:4499:80ef/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::37bf:4ad7:b805:198a/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::30ad:fb50:af40:6b75/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever
[root@mgr01 vhost]# shutdown
[root@mgr02 src]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 12:34:56:78:96:18 brd ff:ff:ff:ff:ff:ffinet 192.168.102.213/22 brd 192.168.103.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.102.99/24 scope global ens160valid_lft forever preferred_lft foreverinet6 fe80::ef48:def0:4499:80ef/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::37bf:4ad7:b805:198a/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft foreverinet6 fe80::30ad:fb50:af40:6b75/64 scope link tentative noprefixroute dadfailed valid_lft forever preferred_lft forever

Nginx服务器宕掉后,或者是Nginx重启失败后,VIP会漂到另一台服务器

四、总结

Nginx+Keepalived,如果Nginx服务宕掉后,会先进行重启,重启失败后,会通过VIP的漂移到正常的Nginx服务器上,从而继续提供服务,恢复后,会漂到priority数值最大的Nginx服务上面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/457874.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web3对象如何连接以太网络节点

实例化web3对象 当我们实例化web3对象&#xff0c;我们一般开始用本地址&#xff0c;如下 import Web3 from web3 var web3 new Web3(Web3.givenProvider || ws://localhost:5173)我们要和以太网进行交互&#xff0c;所以我们要将’ws://localhost:5173’的本地地址换成以太…

循序渐进丨openGauss / MogDB 数据库内存占用相关SQL

一、内存总体分布 数据库总体内存使用分布 select * from gs_total_memory_detail; 当dynamic_used_memory大于max_dynamic_memory就会报内存不足&#xff1b;如果此时dynamic_used_memory小于max_dynamic_memory&#xff0c;而dynamic_peak_memory大于max_dynamic_memory表…

《皮革制作与环保科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《皮革制作与环保科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《皮革制作与环保科技》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国轻工业联合会 …

【书籍推荐】使用 MATLAB 算法进行合成孔径雷达信号处理【附MATLAB代码】

简介 介绍了合成孔径雷达 &#xff08;SAR&#xff09; 波前重建信号理论及其数字实现的最新分析。随着快速计算和数字信息处理技术的出现&#xff0c;SAR 技术变得更加强大和准确。使用 MATLAB 算法进行合成孔径雷达信号处理解决了这些最新发展问题&#xff0c;提供了对 SAR …

【随手笔记】远程升级之如何平衡下载包大小与速率?

1. 远程升级基本信息 使用NB_BC26模组&#xff0c;通过AT指令使用TCP的协议与公司后台交互升级的固件为BIN文件&#xff0c;使用原始固件包升级&#xff0c;未使用差分方式原始固件包有110K,大小左右&#xff0c;固件的存储为外置的FLASH W25Q16,w25q16最小存储单位为页&#…

git命令笔记(速查速查)

git命令功能总结 1.创建git的本地仓库2. 配置本地仓库(name和email地址)3. 工作区、版本库、暂存区、对象区3.1 add, commit3.2 打印提交日志3.2 修改文件 4.版本回退&#xff08;git reset&#xff09;5. 撤销修改&#xff08;在push之前撤销&#xff09;6.删除版本库中的文件…

C++——string的模拟实现(上)

目录 引言 成员变量 1.基本框架 成员函数 1.构造函数和析构函数 2.拷贝构造函数 3.容量操作函数 3.1 有效长度和容量大小 3.2 容量操作 3.3 访问操作 (1)operator[]函数 (2)iterator迭代器 3.4 修改操作 (1)push_back()和append() (2)operator函数 引言 在 C—…

微信小程序版本更新管理——实现自动更新

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

查找总价格为目标值的两个商品----双指针算法

一&#xff1a;题目描述 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理 三&#xff1a;代码编写 vector<int> twoSum(vector<int>& price, int target) {vector<int> ret;int left 0, right price.size()-…

银河麒麟相关

最近安装了银河麒麟server版本&#xff0c;整理下遇到的一些小问题 1、vmware安装Kylin-Server-V10-SP3-General-Release-2303-X86_64虚拟机完成后&#xff0c;桌面窗口很小&#xff0c;安装vmwaretools后解决&#xff0c;下载地址http://softwareupdate.vmware.com/cds/vmw-de…

centos安装指定版本的jenkins

打开jenkins镜像包官网&#xff0c;找到自己想要安装的版本&#xff0c;官网地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable 下载指定版本安装包&#xff1a; wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.452.…

Vue3学习:汇率计算器案例中event.target与event.currentTarget比较

今天从一本vue.js书中学习了《汇率计算器》的案例&#xff0c;这个案例的效果如下&#xff1a; 案例可以查询人民币、日元、港元、美元、欧元之间的汇率关系&#xff0c;代码中定义了一个汇率表rate&#xff0c;包含了每种货币对其他5种货币的汇率。其中还有一个功能是点击下方…

从零到一:如何使用直播美颜SDK开发视频美颜平台

今天&#xff0c;小编将为大家详细讲解如何从零开始&#xff0c;利用直播美颜SDK进行开发视频美颜平台。 一、了解直播美颜SDK 选择合适的SDK是开发视频美颜平台的第一步&#xff0c;市场上有多种SDK可供选择。选择时应考虑SDK的功能、性能、稳定性以及开发者社区的支持。 二…

STM32实现毫秒级时间同步

提起“时间同步”这个概念&#xff0c;大家可能很陌生。一时间搞不清楚是什么意思。 我理解“时间同步”可以解决多个传感器采集数据不同时的问题&#xff0c;让多个传感器同时采集数据。 打个比方。两个人走路&#xff0c;都是100毫秒走一步&#xff08;频率相同是前提&…

C++中红黑树的实现

目录 1.红黑树的概念 1.1红黑树的规则 ​1.2红黑树如何确保最长路径不超过最短路径的2倍 1.3红黑树的效率 2.红黑树的实现 2.1红黑树的结构 2.2红黑树的插入 2.2.1红黑树插入一个值的大概过程 2.2.2情况1&#xff1a;叔叔节点存在且为红 -- 变色 2.2.3情况2&#x…

若依部署上线遇到的问题

一、若依部署上线的用户头像模块不能回显&#xff1a; 首先是后端修改部署上线后若依存储图片的本地地址 其次将上线前端配置文件中的图片相关配置给删除 二、若依部署上线后验证码不显示问题 在确保前后端请求打通后还有这个问题就是磁盘缓存问题 三、若依部署上线遇到404页…

生成式 AI 与向量搜索如何扩大零售运营:巨大潜力尚待挖掘

在竞争日益激烈的零售领域&#xff0c;行业领导者始终在探索革新客户体验和优化运营的新途径&#xff0c;而生成式 AI 和向量搜索在这方面将大有可为。从个性化营销到高效库存管理&#xff0c;二者在零售领域的诸多应用场景中都展现出变革性潜力&#xff0c;已成为保持行业领先…

【前端】css样式

文章目录 1.常用样式记录 1.常用样式记录 支持文字换行 white-space:pre-wrap;

WPF+Mvvm案例实战(五)- 自定义雷达图实现

文章目录 1、项目准备1、创建文件2、用户控件库 2、功能实现1、用户控件库1、控件样式实现2、数据模型实现 2、应用程序代码实现1.UI层代码实现2、数据后台代码实现3、主界面菜单添加1、后台按钮方法改造&#xff1a;2、按钮添加&#xff1a;3、依赖注入 3、运行效果4、源代码获…

102. UE5 GAS RPG 实现范围技能奥术伤害

在上一篇文章里&#xff0c;我们在技能蓝图里实现了通过技能实现技能指示&#xff0c;再次触发按键后&#xff0c;将通过定时器触发技能效果表现&#xff0c;最多支持11个奥术个体效果的播放。 在这一篇里&#xff0c;我们将实现技能播放时&#xff0c;对目标敌人应用技能伤害。…