编码机

Nginx第五讲高可用keepal

发布时间:2023/4/11 15:08:32   
有白癜风怎么办 http://m.39.net/pf/a_5214847.html

通过前几节课程,我们已经对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地址。

二、配置高可用的准备工作

1.所需资源:

(1)需要两台nginx服务器:...11和...14;

(2)在两台服务器上安装nginx服务;

(3)在两台服务器上安装keepalived组件。

图5

2.安装所需资源

(1)Nginx具体安装过程,请查阅之前课程,结果如下:

图6

(2)通过yum方式安装keepalived组件:

命令:yuminstallkeepalived,如图所示:

图7

安装完成后,路径为/etc/keepalived,并且生成配置文件,查看安装结果以及安装位置:

图8

三、高可用性配置

1.修改高可用keepalived组件的配置文件:

编辑keepalived.conf文件,修改相关参数如下,按照如下配置,只保留以下内容就可以:

!ConfigurationFileforkeepalived

#全局定义

global_defs{

router_idNodeA#设备标识

script_userroot#赋予检测脚本的权限

enable_script_security

}

vrrp_scriptchk_nginx

{

script"/etc/keepalived/nginx_check.sh"#健康检查nginx状态的脚本文件

interval2#检测脚本执行的间隔时间

weight2

}

#虚拟IP的配置

vrrp_instanceVI_1{

stateMASTER#服务器属性(主/备)

interfaceens33#网卡名称

virtual_router_id50#主备机的虚拟路由器ID即VRRP-ID必须相同

priority#主备机配置不同优先级,主机优先级备机优先级

advert_int1

authentication{

auth_typePASS

auth_pass

}

virtual_ipaddress{

...15/24#对外服务的VRRP虚拟IP地址

}

track_script{#调用健康监测模板,一定要放在vip的配置下面

chk_nginx

}

}

查看网卡信息:ifconfig,以及稍后查看连接情况:netstat

如果发现你的linux服务器没有ifconfig命令,则需要通过yum安装net-tools服务,以下是安装方法:

图9

图10

2.新建对nginx的健康检查脚本文件

该脚本文件的作用是,探测nginx进程是否存在,如果不存在,则尝试启动nginx,启动不成功后,则停止keepalived服务,让服务切换到备份服务器。

在/etc/keepalived路径新建nginx_check.sh脚本文件如下:

#!/bin/bash

if["$(ps-ef

grep"nginx:masterprocess"

grep-vgrep)"==""]

then

/usr/local/nginx/sbin/nginx#以上作用:如果进程没有nginx,则启动

sleep5#间隔时间

if["$(ps-ef

grep"nginx:masterprocess"

grep-vgrep)"==""]

then

killallkeepalived#以上作用:如果进程没有nginx,则停止keepalived

fi

fi

第一个大坑预警!!

做这个实验,一共卡了我半天的时间,这里是一个大坑,编辑完此脚本文件,尝试执行,发现有报错:

图11

因为在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令。

编辑文件,查看编码类型:

图12

发现编码为dos:

图13

将编码修改为unix即可解决问题:

图14

如果使用的linux系统没有查看进程的命令,则通过yum安装的方式,安装psmisc服务:

图15

3.启动服务

启动nginx以及keepalived:systemctlstartkeepalived.service

注意两台都需要启动。

图16

通过log查看启动过程,以及vrrp选取主备的结果等:

图17

通过log我们可以看到keepalived的启动过程,其实本质就是用的vrrp,至于vrrp什么原理,他其实是网络工程上,路由器或者交换机配置网关虚拟化的常用协议:

两台设备,通过比较优先级,选取主设备,并且将虚拟出来的地址应用在这台主设备上,通过双方HA的探测,感知对方状态。

具体想了解的,可以私信我,我讲一下VRRP的原理。

第二个大坑预警!!

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

研究了半天,真的是半天!!

反复对比过脚本是不是配错了,多个空格,少个括号什么的,然后上网搜。。。都是一些扯淡的答案,最后发现,还是我技艺不精,linux好久不用都生疏了。

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

图18

心态直接爆炸!!把权限修改后,再次重新启动,所有问题顺利解决,心情大好!

图19

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

查看网卡生成的虚拟ip

转载请注明:http://www.aideyishus.com/lkgx/4045.html

------分隔线----------------------------