keepalived+nginx配置文件及检查nginx服务的脚本

脚本一启动的速度要快一些哦,因为脚本二要判断两次以后才启动哎

这两个一般配合keepalived使用

脚本一:

#!/bin/bash
#author:fansik
#description:check nginx service

run=`ps -C nginx --no-header | wc -l`
if [ $run -eq 0 ]
then
        /etc/rc.d/init.d/nginx start
        sleep 3
fi

脚本二:

#!/bin/bash
#author:fansik
#description:check nginx service

count=0
for (( k=0; k<2; k++ ))
do
    check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\n" http://localhost/index.html -o /dev/null )
    if [ "$check_code" != "200" ]; then
        count=$(expr $count + 1)
        sleep 3
        continue
    else
        count=0
        break
    fi
done
if [ "$count" != "0" ]; then
   /etc/init.d/nginx start
    exit 1
else
    exit 0
fi

keepalived的配置文件/etc/init.d/keepalived.conf:主配置文件如下,从配置文件将MASTER改成BACKUP,双主模型的时候在添加一个vrrp_instance VI_1主里面变成BACKUP,从里面变成MASTER,virtual_router_id变一下

! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from fanjb@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx1.sh"
    interval 1
    weight -2
    fall 2
    rise 1
}

vrrp_script chk_notify {
    script "/etc/keepalived/chk_nginx.sh"
    interval 1
    weight -2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.10.10.250
    }
    track_script {
        chk_nginx
        chk_notify
    }   
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}

通知脚本:/etc/keepalived/nodify.sh

#!/bin/bash
#author:fansik
#description:check nging status

vip=10.10.10.250
contact='root@localhost'

notify() {
    mailsubject="`hostname` to be $1:$vip floating"
    mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` change to be $1"
    echo $mailbody | mail -s "$mailsubject" $contact
}

case "$1" in
    master)
        notify master
        exit 0  
        ;;      
    backup)
        notify backup
        exit 0  
        ;;      
    fault)
        notify fault
        exit 0  
        ;;      
    *)  
        echo "Usage:`basename $0` {master|backup|fault}"
        exit 1  
        ;;      
esac