首页 > 其他 > 详细

Keepalived+Nginx搭建主从高可用并带nginx检测

时间:2021-06-06 10:13:04      阅读:26      评论:0      收藏:0      [点我收藏+]
 

应用环境:部分时候,WEB访问量一般,或者测试使用,利用Keepalived给Nginx做高可用即可满足要求。

 

测试环境

         技术分享图片

 

 

 

    技术分享图片

 

搭建步骤

  1. 安装软件

    在Nginx-A和Nginx-B上:

    ~]# yum install keepalived nmap -y    //nmap提供nmap命令,后面的Nginx检测脚本里会用到

 

  2. 配置Nginx-A

    [root@nginx-a ~]# vim /etc/keepalived/keepalived.conf    //配置好的内容如下

技术分享图片
! Configuration File for keepalived

global_defs {
   router_id Nginx-A
}

vrrp_script chk_nginx {        ## chk_nginx名字可以自定义,与下面的track_script段中的名字要一致
    script "/opt/chk_nginx.sh"    ## chk_nginx.sh的内容下面给出
    interval 2
    weight 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        138.138.82.222
    }
    track_script {
        chk_nginx
    }
}
技术分享图片

    保存,退出;

    [root@nginx-a ~]# vim /opt/chk_nginx.sh      //新建Nginx检测脚本,内容如下

    [root@nginx-a ~]# chmod +x /opt/chk_nginx.sh    //给脚本添加执行权限

技术分享图片
#!/bin/sh
# check nginx server status
NGINX=/usr/sbin/nginx
PORT=80

nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
    $NGINX -s stop
    $NGINX
    sleep 3
    nmap localhost -p $PORT | grep "$PORT/tcp open"
    [ $? -ne 0 ] && /etc/init.d/keepalived stop
fi
技术分享图片

    说明:该脚本的意义就是先检测Nginx是否已经开启默认的80端口:

       如果存在80端口,一切正常;

       如果不存在80端口,就执行if段中的语句:先关一下Nginx,在启动Nginx,等待3秒,再次检测80端口,如果还不存在,则杀死keepalived,

       这样一来,访问就走另外一台安装keepalived的上WEB端。(如果两台都出问题,那只能呵呵了)

    [root@nginx-a ~]# service keepalived start  //启动keepalived

    [root@nginx-a ~]# chkconfig keepalived on  //加入开机启动

 

  3. 配置Nginx-B

    [root@nginx-b ~]# vim /etc/keepalived/keepalived.conf    //配置好的内容如下

技术分享图片
! Configuration File for keepalived

global_defs {
   router_id Nginx-B
}
vrrp_script chk_nginx {        ## 同Nginx-A
    script "/opt/chk_nginx.sh"
    interval 2
    weight 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        138.138.82.222
    }
    track_script {          
        chk_nginx
    }
}
技术分享图片

    保存,退出;

    [root@nginx-b ~]# vim /opt/chk_nginx.sh  // 脚本内容同Nginx-A ,见上面

    [root@nginx-b ~]# chmod +x /opt/chk_nginx.sh  //给脚本添加执行权限

    [root@nginx-b ~]# service keepalived start  //启动keepalived

    [root@nginx-b ~]# chkconfig keepalived on  //加入开机启动

 

  4. 测试

    找一台客户端执行命令:

    ~]# while true; do curl 138.138.82.222 ;sleep 1;done

     技术分享图片

     技术分享图片

     技术分享图片

     技术分享图片

 

    测试成功,达到了两台nginx高可用,并能够健康检测nginx(这里实际检测80端口,实际意义可作一样)。

 

  结束.

  

附上另一种检测脚本:

技术分享图片
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
 /usr/local/nginx/sbin/nginx
 sleep 5
 if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
 then
 killall keepalived
 fi
fi
技术分享图片

Keepalived+Nginx搭建主从高可用并带nginx检测

原文:https://www.cnblogs.com/yaoyangding/p/14854421.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!