目录
一、master主机的配置,安装nginx服务,并设置四层反向代理(修改配置文件)
四、将nginx的配置和keepalived、脚本都复制到备份服务器上
1、验证可以通过VIP访问静态资源、以jsp和php结尾的动态资源
前言
架构图,最终的目的是通过keepalived实现两台四层代理服务器热备,然后通过nginx做四层代理,两个nginx做七层的反向代理,tomcat和php做中间件,最后实现通过访问VIP可以访问静态资源、以及以jsp和php结尾的动态资源请求。
keepalived内置监控脚本,检测NGINX的健康状态
实验是在上一篇的基础上进行修改,完成Nginx+keepalived的组合,实现高可用和负载均衡
一、master主机的配置,安装nginx服务,并设置四层反向代理(修改配置文件)
[root@localhost yum.repos.d]# yum install -y nginx
yum安装的nginx是自带stream模块的
stream{
upstream backends{
server 192.168.20.10:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.20.30:80 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 9527;
proxy_pass backends; ##四层代理直接加上节点服务器池的名称,不用加上协议
}
}
max_fails=2 ##允许请求失败的次数,默认为1
fail_timeout=30s ##如果达到了max_fails的失败次数,将暂停后端服务的时间,默认为10s,改为30s
[root@localhost yum.repos.d]# cp /etc/nginx/nginx.conf{,.bak}
[root@localhost yum.repos.d]# vim /etc/nginx/nginx.conf
[root@localhost yum.repos.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost yum.repos.d]# systemctl restart nginx
二、编写监控脚本
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]#
[root@localhost keepalived]# ls
check_nginx.sh keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# cat check_nginx.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l` ##探测是否有nginx服务
if [ $A -eq 0 ];then ##如果没有
systemctl stop keepalived ##那么关闭keepalived服务
fi
##生成建议判断可否将nginx重启,但是测试的时候,可以省略这一步
#!/bin/bash
A=`ps -C nginx --no-header |wc -l` ##探测是否有nginx服务
if [ $A -eq 0 ];then ##如果没有
systemctl restart nginx ##重启一下nginx服务
B=`ps -C nginx --no-header |wc -l` ##再次探测是否有nginx服务
if [ $B -eq 0 ];then ##如果还是没有
systemctl stop keepalived ##那么关闭keepalived服务
fi
fi
三、安装keepalived,修改配置文件
[root@localhost yum.repos.d]# yum install -y keepalived.x86_64
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id NGINX_01
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight 1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.20.166
}
track_script {
check_nginx
}
}
四、将nginx的配置和keepalived、脚本都复制到备份服务器上
[root@localhost yum.repos.d]# scp /etc/nginx/nginx.conf 192.168.20.16:`pwd`
nginx的配置文件可以完全不做任何修改 ,但是keepalived的配置文件需要修改一下
[root@localhost keepalived]# scp check_nginx.sh keepalived.conf 192.168.20.16:`pwd`
五、进行测试
1、验证可以通过VIP访问静态资源、以jsp和php结尾的动态资源
2、验证关闭nginx服务,是否会故障切换至备服务器
3、重启keepalived查看是否会抢占
4、关闭主的配置,查看备服务器的状态
总结:
LVS是基于内核的四层代理,只要系统没有宕机那么lvs就会存活,
但是nginx是属于应用程序的服务,那么就需要对nginx做健康检查,此健康检查通过脚本来实现,探测nginx是否存活的脚本有很多,最后结合if去判断
方案一:killall -0 ngin ##如果返回值是0,那么nginx存活,如果不为0,nginx断开了
方案二:ps -C nginx --no-header | wc -l ##如果这个值为0 那就是没有nginx服务
方案三:ss -natp|grep nginx ##$?为0,那就是存在nginx服务,如果不为0,那就是不存在nginx服务
方案四:netstat -natp|grep nginx 一样的
方案五:ps aux|egrep -v "grep|$$"|grep nginx|wc -l
方案六:pidof nginx ##$?为0,那就是存在nginx服务,如果不为0,那就是不存在nginx服务
方案七:lsof -i :80 ##$?为0,那就是存在nginx服务,如果不为0,那就是不存在nginx服务