2024-09-15 03:22:15
为提供系统的高可用,满足网络安全等级保护的热冗余的要求,平台需要对应用程序做高可用,本文主要针对Nginx进行集群配置。
一、NginxHA概述nginx在系统中的作用是给系统提供一些负载均衡和动态代理的作用。通过不同轮询到不同服务,即使一台服务器挂掉,也能将请求转发到其他服务器上。
但如果nginx挂掉,那此时整个系统就没有入口了,所以,我们需要对Nginx做高可用配置。
这里准备两台Nginx服务器。
具体的思路是,将两台Nginx服务器都设置成一个虚拟IP,当主Nginx服务器挂掉之后,当我们再次访问的时候,实际上就是访问我们的从Nginx服务器来做负载均衡了,整个IP切换过程对于用户来说是没有感觉的,这种工作IP地址变化的过程,被称为IP漂移。
这个虚拟IP是由第三方软件提供的,它就是keepalived。
二、keepalivedKeepalived提供了两种模式:
master->backup模式:一旦主库宕机,虚拟ip会自动漂移到从库,当主库修复后,keepalived启动后,还会把虚拟ip抢占过来,即使设置了非抢占模式(nopreempt)抢占ip的动作也会发生。
backup->backup模式p会自动漂移到从库上,当原主库恢复和keepalived服务启动后,并不会抢占新主的虚拟ip,即使是优先级高于从库的优先级别,也不会发生抢占。为了减少ip漂移次数,通常是把修复好的主库当做新的备库。
1、首先,我们先确认下网卡及IP
ipaddrshow|grepinet2、接着进行安装:
yuminstallkeepalived–y3、接着配置/etc/keepalived/keepalived.conf这个文件
主服务器配置:
!ConfigurationFileforkeepalivedglobal_defs{#标识主机idrouter_idNGINX_102}##检测脚本和权重参数vrrp_scriptchk_http_port{script"/opt/software/nginx/sh/nginx_check.sh"##配置脚本的路径interval2#(检测脚本执行的间隔)weight2##权重}vrrp_instanceVI_1{#标记为主服务器stateMASTERinterfaceens33virtual_router_id51priority100advert_int1authentication{auth_typePASSauth_pass1111}virtual_ipaddress{192.168.81.104}track_script{chk_http_port}}从服务配置,只需把state改为backup,和优先级降低即可。
vrrp_instanceVI_1{stateBACKUP#备份服务器上将MASTER改为BACKUPinterfaceeth0##网卡,可以从ipconfig这个命令查到virtual_router_id51#主、备机的virtual_router_id必须相同priority90#主、备机取不同的优先级,主机值较大,备份机值较小,一般来说,主100备80advert_int1##心跳,秒,每隔一秒发送一个心态确认我们的Nginx服务器的存活情况authentication{##密码验证auth_typePASSauth_pass123456}virtual_ipaddress{192.168.81.104##VRRPH虚拟地址}}脚本内容如下:
nginx_check.sh:脚本的路径与nginx的启动路径一致
#!/bin/bashA=`ps-Cnginx–no-header|wc-l`if[$A-eq0];then/usr/local/nginx/sbin/nginxsleep2if[`ps-Cnginx--no-header|wc-l`-eq0];thenkillallkeepalivedfifi脚本的目的是为了检测nginx服务是否挂掉,如果挂掉就尝试去启动它,如果启动失败,就把keepalived服务关闭。经过测试单独关闭nginx,不关闭keepalived的话是不会转发到nginx从服务器的。因此,脚本的目的是为了保证这两个要么全部存在,要么全部失败。
注意:有个坑,如果发现你的nginx关闭之后脚本不执行的原因。
可用先看下路径
可用看下脚本的准备性,当然我这个是可用执行的
最后重要的一点是需要关闭selinux,然后重新启动
setenforce0永久关闭:
sed-i"s/^SELINUX=.*/SELINUX=disabled/g"/etc/selinux/config默认是抢占式执行的。
启动方式:
1、先启动nginx
2、再启动keepalived
systemctlrestartkeepalived如果出错,记得查看日志:
tail-f/var/log/messages另外,如果依旧切换不过来,可以查看防火墙或ipotables有无限制。