ソフトウェアアプリケーションのダウンタイムソリューション

複数のnginxマスターとスレーブがあり、そのうちの1つがダウンしていますが、どのように対処しますか?

nginx + keepalivedを実装する

キープアライブの一般的なコマンド

service keepalived start
service keepalived stop

アクティブおよびスタンバイのnginxとkeepalivedを起動します。
メインのnginxがダウンしている場合は、keepalivedのkeepalived.confを使用してnginxを監視し
ます。サーバーノードを自動的に切り替えます
。2つのkeeplivedの仮想IPは同じです。メインのkeeplivedがダウンしている場合、仮想IPが割り当てられますスレーブサーバー
のnginxアクティブおよびスタンバイ自動再起動
構成しますステップ3:構成ファイルを変更します:vim /etc/keepalived/keepalived.conf

Keepalived.conf構成ファイルの説明:
(1)マスター

! Configuration File for keepalived

global_defs {
   router_id bhz005 ##标识节点的字符串,通常为hostname
}

keepalivedは、スクリプトを定期的に実行し、スクリプトの実行結果を分析して、vrrp_instanceの優先度を動的に調整します。ここでの重みは、以下の優先度に関連しています。チェックスクリプトを1回実行すると、重みは-20になり、100-20から80に変更されます。マスターの優先度は80で、バックアップの優先度よりも低くなります。優先度90の場合、アクティブ/スタンバイの自動切り替えが実行されます。
スクリプトの実行結果が0で、重み構成の値が0より大きい場合、それに応じて優先度が高くなります。
スクリプトの実行結果が0でなく、重み構成の値が0未満の場合、それに応じて優先度が低くなります。

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
    interval 2 ##检测时间间隔
    weight -20 ## 如果条件成立则权重减20(-20)
}

仮想ルートVI_1をカスタム識別子として定義します。

vrrp_instance VI_1 {
state MASTER   ## 主节点为MASTER,备份节点为BACKUP
    ## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eth6)
interface eth6  
virtual_router_id 172  ## 虚拟路由ID号
    mcast_src_ip 192.168.1.172  ## 本机ip地址
    priority 100  ##优先级配置(0-254的值)
    Nopreempt  ## 
    advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
    authentication {  
        auth_type PASS
        auth_pass bhz ## 真实生产环境下对密码进行匹配
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        192.168.1.170 ## 虚拟ip(vip),可以指定多个
    }
}

(2)からのバックアップ

! Configuration File for keepalived

global_defs {
   router_id bhz006
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth7
    virtual_router_id 173
    mcast_src_ip 192.168.1.173
    priority 90 ##优先级配置
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass bhz
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        192.168.1.170
    }
}

(3)nginx_check.shスクリプト:

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

(4)マスターのkeepalived構成ファイルをマスターマシンの/ etc / keepalived /フォルダーにコピーし(172)、バックアップのkeepalived構成ファイルをバックアップの/ etc / keepalived /フォルダーにコピーする必要があります。 machine(173)最後に、nginx_check.shスクリプトを2台のマシンの/ etc / keepalived /フォルダーにコピーします。
(5)nginx_check.shスクリプトの承認。実行可能権限を付与します。chmod+ x /etc/keepalived/nginx_check.sh(6)2
台のマシンでnginxを起動した後。両方のマシンでキープアライブを開始します

  /usr/local/nginx/sbin/nginx
  service keepalived start
  ps -ef | grep nginx 
  ps -ef | grep keepalived

テストできます。最初に2台のマシンのipaコマンドを確認すると、仮想IPがあり、1台のマシンのkeepalivedを停止してから、次のコマンドをテストできます:service keepalivedstop。現在停止しているマシンは使用できなくなり、keepalivedは自動的に別のマシンに切り替わります。

Nginxはddosトラフィック攻撃を解決しますか?


1秒あたりのIPリクエスト数を制限するlimit_req_zone $ binary_remote_addr zone = one:10m rate = 1r / s;
同じIPによって同時に作成される接続
数を制限するlimit_conn_zone $ binary_remote_addr zone = addr:10m;

nginxを採用-keeplived(複数ユニット)

Tomcatがダウンしていますか?(複数ユニット)

proxy_connect_timeout 1;接続時間
proxy_read_timeout1;このコマンドは、プロキシサーバーとの読み取りタイムアウト時間を設定します。これは、nginxがリクエストへの応答を取得するまで待機する時間を決定します。
proxy_send_timeout 1;この指定は、アップストリームサーバーにリクエストを送信するためのタイムアウト期間を設定します。

Tomcatがダウンしていますか?(単一ユニットの場合)

監視用のshell.shスクリプトを作成する必要があります
#!/ bin / shtomcat
プロセスIDを取得します/ usr / local /
tomcatTomcatID = $(ps -ef | grep tomcat | grep -w'tomcat '| grep -v'grep' | awk '{print KaTeX parse error:Expected' EOF '、got'} 'at position 2:2} ̲')tomcat startup program(this ...(date + '%F%H:%M:%S' )] "
if [[ KaTeX parse error:Expected'EOF '、got'# 'at position 18:…mcatID]]; then#̲ここでTOMCATプロセス... TomcatIDかどうかを判断するには、ページのチェックを続けます。 。」

起動が成功したかどうかを確認します(成功した場合、ページはステータス「200」を返します)??

TomcatServiceCode = $(curl -I -m 10 -o / dev / null -s -w%{http_code} $ WebUrl)
if [ T omcat Service C ode − eq 200]; thenecho "[info]ページのリターンコードはTomcatServiceCode-eq 200];その後、echo "[info]ページのリターンコードはT o m c a t S e r v i c e C o d ee q 2 0 0 ] ;T H E N - E C H O " [ I N- F O ] pが直面しているリターン・バックのコードをあるTomcatServiceCode、Tomcatは...通常、成功したテストページを起動し、"

エコー「[エラー] Tomcatのページフォルト、ノート... 。ステータスコードTomcatサービスコード、エラーログはTomcatServiceCodeに出力され、エラーログはT o m c a t S e r v i c e C o d e 間違った間違った志がいる失われたうちGetPageInfo「
エコー」[エラー]エラーページビュー、「Tomcatの再起動を開始した
キル-9 $ TomcatID#は、元のTomcatプロセスを殺す
SLEEPを3
RM -rf $ TomcatCache#クリーンアップTomcatのキャッシュ
SタルトT omcatfielseecho "[エラー] Tomcatプロセスが存在しません!Tomcatが自動的に再起動を開始します..." echo "[情報] StartTomcat fi else echo" [エラー] Tomcatプロセスが存在しません!Tomcatが自動的に再起動を開始します... "echo 「[情報]S T A R&LT T T O M C A T F I E L S E E C H O [ E R&LT R&LT O R&LT ] T O M C A T処理しない存在T O M C A Tが離間開始から移動重い開始E C H O" [ i n f o ] StartTomcat、お待ちください..."
#rm -rf $ TomcatCache
$ StartTomcat
fi
echo "------------------------ -------” ??
}

おすすめ

転載: blog.csdn.net/YHM_MM/article/details/105018693
おすすめ