centos环境下nginx高可用集群的搭建指南


Posted in Servers onJuly 23, 2022

1.概述

nginx单机部署时,一旦宕机就会导致整个服务的不可用,导致雪崩式效应。集群式部署是解决单点式雪崩效应的有效方案,本文将在centos环境下,结合Keepalived搭建高可用的nginx集群。

2.CentOS中nginx集群搭建

2.1 集群架构图

centos环境下nginx高可用集群的搭建指南

当客户端请求服务器时,若利用nginx作为代理,则会首先访问nginx服务器,再通过nginx服务器转发到对应的服务器上。上述架构图的原理是:nginx-01和nginx-02是两台nginx服务器,其中nginx-01作为主服务器,通过keepalived与nginx-02形成一个小集群,同时还可以与nginx-03、nginx-04…nginx-n等多台服务器构成集群。当nginx-01因为某些原因宕机而停止服务时,其它nginx服务器会选举一个进行替代,使整个服务保持正常的运行。

2.2 Keepalived

Keepalived是一款基于vrrp协议的高可用集群软件,通过虚拟IP(VIP)对外提供服务,能够实时监控集群中服务器的运行状态并自动进行故障隔离,这些服务器都启动着相同的服务,当主服务器发生故障时,会自动将虚拟IP漂移到备份服务器,从而实现业务高可用。

2.3 集群搭建准备

1.需要两台nginx服务器

2.需要keepalived

3.需要虚拟ip

2.4 集群搭建

2.4.1 安装keepalived

分别在了两台虚拟机上,利用yum指令安装keepalived,指令如下:

yum install keepalived

可以利用下述指令确认是否安装成功,成功的话则会显示版本号,具体如下:

rpm -q -a keepalived

centos环境下nginx高可用集群的搭建指南

若非特别指定安装目录,则在centos的安装路径如下:

/etc/keepalived

2.4.2 配置keepalived.conf

由于是主从配置,在主服务器中,找到keepalived.conf的文件,进行替换,该文件存储于/etc/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.200.129
	smtp_connect_timeout 30
	router_id LVS_DEVEL	# LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}

vrrp_script chk_http_ port {
	script "/usr/local/src/nginx_check.sh"
	interval 2   # (检测脚本执行的间隔)2s
	weight 2  #权重,如果这个脚本检测为真,服务器权重+2
}

vrrp_instance VI_1 {
	state MASTER   # 备份服务器上将MASTER 改为BACKUP
	interface ens33 #网卡名称,可查看对应服务器的网卡
	virtual_router_id 51 # 主、备机的virtual_router_id必须相同
	priority 100   #主、备机取不同的优先级,主机值较大,备份机值较小
	advert_int 1	#每隔1s发送一次心跳
	authentication {	# 校验方式, 类型是密码,密码1111
        auth type PASS
        auth pass 1111
    }
	virtual_ipaddress { # 虛拟ip
		192.168.200.50 // VRRP H虛拟ip地址
	}
}

备份服务器的keepalived.conf替换为:

global_defs {
	notification_email {
	  acassen@firewall.loc
	  failover@firewall.loc
	  sysadmin@firewall.loc
	}
	notification_email_from Alexandre.Cassen@firewall.loc
	smtp_ server 192.168.200.129
	smtp_connect_timeout 30
	router_id LVS_DEVEL	# LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
}

vrrp_script chk_http_ port {
	script "/usr/local/src/nginx_check.sh"
	interval 2   # (检测脚本执行的间隔)2s
	weight 2  #权重,如果这个脚本检测为真,服务器权重+2
}

vrrp_instance VI_1 {
	state MASTER   # 备份服务器上将MASTER 改为BACKUP
	interface ens33 #网卡名称,可查看对应服务器的网卡
	virtual_router_id 51 # 主、备机的virtual_router_id必须相同
	priority 10   #主、备机取不同的优先级,主机值较大,备份机值较小
	advert_int 1	#每隔1s发送一次心跳
	authentication {	# 校验方式, 类型是密码,密码1111
        auth type PASS
        auth pass 1111
    }
	virtual_ipaddress { # 虛拟ip
		192.168.200.50 // VRRP H虛拟ip地址
	}
}

2.4.3 编写nginx监测脚本

文件保存为bash类型,命名为:nginx_check.sh,也可以自定义文件名称,脚本内容如下:

#! /bin/bash
A=`ps -C nginx -no-header | wc - 1`
if [ $A -eq 0];then
	/usr/local/nginx/sbin/nginx
	sleep 2
	if [`ps -C nginx --no-header| wc -1` -eq 0 ];then
		killall keepalived
	fi
fi

脚本可根据喜好来自定义文件夹存放,我这里存放于/usr/local/src/nginx_check.sh,注意一点的是,脚本存放的路径必须与keepalived.conf中配置的脚本文件路径一致。脚本路径更改,则keepalived.conf中的路径也要修改。

2.4.4 启动keepalived

分别在两台服务器上执行如下指令:

systemctl start keepalived.service

查看keepalived进程是否运行,

ps -ef|grep keepalived

若运行成功,则会出现以下界面:

centos环境下nginx高可用集群的搭建指南

2.4.5 启动nginx

在主服务器和从服务器上,分别利用nginx启动命令启动nginx服务,在nginx安装目录下执行如下指令:

./nginx

2.4.6 测试

1测试方案如下

(1)关闭主服务器上的nginx

在nginx安装目录下执行如下指令:

./nginx -s stop

(2)访问虚拟ip

在外部浏览器输入:

192.168.200.50:80

若能正常弹出nginx欢迎页面,则表明集群搭建成功,主服务器nginx宕机后,从服务器会代替服务。

3.小结

1.本文利用两台服务器模拟nginx集群状态,当nginx master宕机后,从服务器会代替服务;

2.模拟集群关键三要素:keepalived、监测脚本、虚拟ip;

3.在某些情况下,需要为脚本添加可执行权限,指令如下:

chmod +x /usr/local/src/nginx_check.sh #脚本地址根据实际情况而定

4.参考文献

1.https://www.bilibili.com/video/BV1zJ411w7SV?t=85&p=1

2.https://juejin.cn/post/6844903956192182285

3.https://juejin.cn/post/6844903929738854413

4.https://juejin.cn/post/6844903585449246733

总结

到此这篇关于centos环境下nginx高可用集群搭建的文章就介绍到这了,更多相关nginx高可用集群搭建内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Servers 相关文章推荐
nginx配置proxy_pass中url末尾带/与不带/的区别详解
Mar 31 Servers
Nginx配置Https安全认证的实现
May 26 Servers
Rhit高效可视化Nginx日志查看工具
Nov 01 Servers
配置Kubernetes外网访问集群
Mar 31 Servers
详解使用内网穿透工具Ngrok代理本地服务
Mar 31 Servers
教你使用Jenkins集成Harbor自动发布镜像
Apr 03 Servers
Apache Hudi 加速传统的批处理模式
Apr 24 Servers
详解如何使用Nginx解决跨域问题
May 06 Servers
git中cherry-pick命令的使用教程
Jun 25 Servers
git stash(储藏)的用法总结
Jun 25 Servers
本地搭建minio文件服务器(使用bat脚本启动)的方法
Jul 15 Servers
win10搭建配置ftp服务器的方法
Aug 05 Servers
Nginx如何配置根据路径转发详解
Jul 23 #Servers
Linux中一对多配置日志服务器的详细步骤
Jul 23 #Servers
Nginx如何限制IP访问只允许特定域名访问
Jul 23 #Servers
nginx访问报403错误的几种情况详解
Jul 23 #Servers
在windows server 2012 r2中安装mysql的详细步骤
Nginx报404错误的详细解决方法
Jul 23 #Servers
彻底卸载VMware虚拟机的超详细步骤记录
Jul 15 #Servers
You might like
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
基于JQuery的多标签实现代码
2012/09/19 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
python实现同时给多个变量赋值的方法
2015/04/30 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
在keras里实现自定义上采样层
2020/06/28 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
教学个人的自我评价分享
2014/02/16 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
python实现高效的遗传算法
2021/04/07 Python
PyQt5实现多张图片显示并滚动
2021/06/11 Python