过人科技网

查看网卡生成的虚拟ip地址:192.168.116.15:图204

简介: 查看网卡生成的虚拟ip地址:192.168.116.15:图204.验证服务通过浏览器访问虚拟地址,http://192.168.116.15,可以看到能够正常打开nginx网页:图21查看两台服务器的tcp连接情况,

通过前几节课程,我们已经对nginx的基本配置,使用nginx能够实现的功能,包括反向代理、负载均衡、动静分离等进行了讲解。

本次课程继续nginx入门的重要知识点,即nginx的高可用性配置。

图1 图中我们可以看到,网络设备都是采用双机部署的形式,那么即使通过双机部署,也仅仅是完成了物理意义上的冗余,如何做到双机主-备、主-主等形式对外服务,并且双机能够实时感知到对端的状态,从而在主机(本文均已主-备形式讨论)发生故障时,备机能够快速感知,并自动切换。

这就需要不同的协议和配置来实现,针对不同设备、不同服务,所采用的主备高可用性技术也完全不同,以下列举常用的主备技术:1.交换机:堆叠、M-LAG、VSS等;2.路由器(网关):VRRP、HSRP等;3.防火墙、负载均衡等:通过设备厂商自身的HA心跳线感知状态,通过设定好的协议或算法执行主备切换;4.服务器:一般采用双机做网卡绑定bond的方式;5.数据库:例如oracle数据库使用RAC做集群,mysql使用像keepalived、MHA等工具实现集群。

一、Nginx主备高可用性通过nginx代理服务器,可以对后端的具体应用实现反向代理或负载均衡等功能,并且nginx可以对应用进行健康检查,将故障节点从负载均衡池中排出,从而实现对后端应用的高可用性保障。

但是,如果nginx服务器出现问题,则无法对外服务:图2因此,我们要考虑到nginx服务的高可用性,采用主-备,或主-主的形式安装部署nginx服务,nginx的主备高可用性,依靠keepalived组件实现:图3主机不仅负责对后端两台服务进行健康检查,并且对外服务,接受客户端的请求,如图中红线所示;备机尽对后端服务进行健康检查,不对外服务,当主机故障发生切换时,才接管工作,如图中紫线所示:图4客户端访问nginx服务器集群的虚拟IP。

综上所述,nginx的主备高可用性需要:(1)两台nginx服务器;(2)keepalived组件;(3)对外服务的虚拟IP地址。

图52.安装所需资源(1)Nginx具体安装过程,请查阅之前课程,结果如下:图6(2)通过yum方式安装keepalived组件:命令:yum install keepalived,如图所示:图7安装完成后,路径为/etc/keepalived,并且生成配置文件,查看安装结果以及安装位置:图8三、高可用性配置1.修改高可用keepalived组件的配置文件:编辑keepalived.conf文件,修改相关参数如下,按照如下配置,只保留以下内容就可以:! Configuration File for keepalived#全局定义global_defs { router_id NodeA #设备标识 script_user root #赋予检测脚本的权限 enable_script_security }vrrp_script chk_nginx{script "/etc/keepalived/nginx_check.sh" #健康检查nginx状态的脚本文件interval 2 #检测脚本执行的间隔时间weight 2}#虚拟IP的配置vrrp_instance VI_1 { state MASTER #服务器属性(主/备) interface ens33 #网卡名称 virtual_router_id 50 #主备机的虚拟路由器ID即VRRP-ID必须相同 priority 250 #主备机配置不同优先级,主机优先级>备机优先级advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.116.15/24 #对外服务的VRRP虚拟IP地址}track_script { #调用健康监测模板,一定要放在vip的配置下面chk_nginx}}查看网卡信息:ifconfig,以及稍后查看连接情况:netstat如果发现你的linux服务器没有ifconfig命令,则需要通过yum安装net-tools服务,以下是安装方法:图9图102.新建对nginx的健康检查脚本文件该脚本文件的作用是,探测nginx进程是否存在,如果不存在,则尝试启动nginx,启动不成功后,则停止keepalived服务,让服务切换到备份服务器。

在/etc/keepalived路径新建nginx_check.sh脚本文件如下:#!/bin/bashif [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]then/usr/local/nginx/sbin/nginx #以上作用:如果进程没有nginx,则启动sleep 5 #间隔时间if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]thenkillall keepalived #以上作用:如果进程没有nginx,则停止keepalivedfifi第一个大坑预警!

做这个实验,一共卡了我半天的时间,这里是一个大坑,编辑完此脚本文件,尝试执行,发现有报错:图11因为在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的s件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令。

编辑文件,查看编码类型:图12发现编码为dos:图13将编码修改为unix即可解决问题:图14如果使用的linux系统没有查看进程的命令,则通过yum安装的方式,安装psmisc服务:图153.启动服务启动nginx以及keepalived:systemctl start keepalived.service注意两台都需要启动。

图16通过log查看启动过程,以及vrrp选取主备的结果等:图17通过log我们可以看到keepalived的启动过程,其实本质就是用的vrrp,至于vrrp什么原理,他其实是网络工程上,路由器或者交换机配置网关虚拟化的常用协议:两台设备,通过比较优先级,选取主设备,并且将虚拟出来的地址应用在这台主设备上,通过双方HA的探测,感知对方状态。

上述log第二个红圈部分,可以看到,keepalived配置文件中,所配置的nginx进程检测脚本没有执行成功。

都是一些扯淡的,最后发现,还是我技艺不精,linux好久不用都生疏了。

查看检测脚本nginx_check.sh的属性,发现,他没有执行的权限,他竟然没有执行的权限!

图19可以看到,脚本已经帮我把nginx启动了。

查看网卡生成的虚拟ip地址:192.168.116.15:图204.验证服务通过浏览器访问虚拟地址,http://192.168.116.15,可以看到能够正常打开nginx网页:图21查看两台服务器的tcp连接情况,发现始终只有主节点192.168.116.11存在80端口的http连接,备份服务器则没有,使用命令:netstat -an | grep 192.168.116.15:80图225.双机切换验证停止主服务器nginx服务:图23可以看到nginx服务还是启动状态,查看log,我们发现,是keepalived的探测脚本,在检测到nginx进程停止后,重新启动了nginx进程:图24这次直接把nginx铲了!

图26然后将nginx进程kill掉:图27 查看log,发现keepalived探测失效后,进程已经关闭:图28再次打开网页http://192.168.116.15,发现正常访问,查看备份服务器192.168.116.16,看到vrrp虚地址,以及http连接均切换到了该服务器:图29经过不懈努力,终于大功告成,建议各位小伙伴,研究nginx之前,一定要打好linux的基础,要不然,学起来会很痛苦!

本系列nginx入门课程已经全部结束了,接下来会以一个网络工程师的角度,陪同大家学习python,希望继续关注和支持我,谢谢!


以上是文章"

查看网卡生成的虚拟ip地址:192.168.116.15:图204

"的内容,欢迎阅读过人科技网的其它文章