解决nginx主备模式下,主服务器未完全启动时可能出现访问错误问题

使用nginx在主备模式下,当主挂掉时,nginx自动切到备机上。当主服务在启动过程中,nginx就自动切换到主服务,这种情况就会导致访问失败问题。解决办法如下:

1、配置超时、错误自动跳转:

 location / {
             proxy_next_upstream error timeout http_500 http_502 http_504;  
             proxy_pass xxxx;
             proxy_connect_timeout 11s;
             proxy_send_timeout 21s;
              proxy_read_timeout 15s; 
        }
2、以上配置基本可以解决大部分功能,但是部分功能还是会访问异常

这种情况,可以在nginx服务器上新增定时任务,定时访问主服务器,访问失败时,自动重新加载nginx配置。让nginx自动访问备服务器,等主服务器完全启动后再自动重新加载nginx配置,回复主备模式。

脚本如下:

#!/bin/sh


#nginx启动程序
Nginx=/usr/local/nginx/sbin/nginx

#定义主服务器页面地址
WebUrl=http://192.168.xxx

nginxStatus=$(cat /usr/local/nginx/tomcat.log)

echo $nginxStatus 
GetPageInfo=/tmp/TomcatMonitor.info

#监控函数
Monitor()
{
     #检测是否启动成功,成功的话页面返回状态(200)
     TomcatServiceCode=$(curl -s -o $GetPageInfo -m 10 --connect-timeout 10 $WebUrl -w %{http_code})
     if [ $TomcatServiceCode -eq 200 ]; then
        if [ $nginxStatus -eq 1 ]; then
        sed -ie 's/1/0/g' /usr/local/nginx/tomcat.log
        /bin/cp -rf  /usr/local/nginx/conf/master.conf /usr/local/nginx/conf/nginx.conf
        $Nginx -s reload
         echo "master normal"
    fi
     else
    if [ $nginxStatus -eq 0 ]; then
        sed -ie 's/0/1/g' /usr/local/nginx/tomcat.log
        /bin/cp -rf /usr/local/nginx/conf/slave.conf  /usr/local/nginx/conf/nginx.conf
        $Nginx -s reload
        echo "master err"
    fi

     fi
  
    echo "----------------------------"
}
Monitor
 

 

tomcat.log内容默认为0,设置定时任务执行该脚本。crontab -e 加入定时任务:

*/1 * * * *  /xx/xxx.sh
以上方案仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值