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

Posted 耀阳居士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keepalived+Nginx搭建主从高可用并带nginx检测相关的知识,希望对你有一定的参考价值。

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

 

应用环境:部分时候,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检测的主要内容,如果未能解决你的问题,请参考以下文章

keepalived+Nginx高可用集群部署(主从热备模式)

Nginx 笔记nginx+keepalived高可用集群(主从+双主)

搭建keepalived+mysql主从复制高可用

基于DR模式的keepalived主从模式高可用架构搭建

配置nginx+keepalived高可用负载均衡的时候。主从服务器都出现了VIP 阿里云问题

Redis 之 主从复制 + Keepalived 实现高可用