Keepalived を使用して Nginx の自動再起動とデュアルアクティブ ホットスタンバイの高可用性を実現する方法について

Keepalived を使用して Nginx の自動再起動とデュアルアクティブ ホットスタンバイの高可用性を実現する方法について

1. 概要

これまで、Keepalived を使用して Nginx サービスのデュアルマシン アクティブ スタンバイ高可用性を実現してきましたが、解決されていない問題がいくつかありました。今日はそれらについて一緒に議論しましょう。

1) デュアルマシン アクティブ スタンバイ メカニズムでは、Keepalived サービスがダウンすると、スタンバイ マシンが自動的に有効になり、サービスが提供されます。ただし、過度の負荷により Nginx サービスがダウンすると、仮想 IP はスタンバイ マシンを指しません。

2) デュアルマシン アクティブ スタンバイの特徴は、1 台のマシンのみがサービスを提供し、スタンバイ マシンはホスト マシンの Keepalived サービスがダウンした後にのみサービスを提供するため、リソースが大幅に浪費されることです。

3) 現在、自社製品を運用するためにクラウドサーバーをレンタルすることが一般的ですが、クラウドサーバーは仮想IPをサポートしていますか?

本日は上記3つの質問について解説させていただきます。

2. Keepalivedを使用してNginxを自動的に再起動する

2.1 シェルスクリプトでNginxを再起動する

Keepalived は Nginx を直接起動することはできませんが、シェル スクリプトを実行することはできます。そのため、ここではシェル スクリプトを使用して Nginx を起動する必要があります。

/etc/keepalived ディレクトリに、新しいスクリプト check_nginx.sh を作成します。スクリプトの具体的な内容は次のとおりです。

#!/bin/bash

# コマンドを実行して Nginx プロセスを表示し、変数 A に格納します。A=`ps -C nginx --no-header | wc -l`

# ダウンしているかどうかを確認します。ダウンしている場合は再起動を試みます。再起動に失敗した場合は、Keepalivedを停止します。
[ $A -eq 0 ]の場合
    ローカル
    睡眠3
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
        キルオールキープアライブ

    フィ
フィ

スクリプトはインターネットから来ています

2.2 スクリプトに実行権限を与える

# chmod +x /etc/keepalived/check_nginx.sh

2.3 Keepalived設定ファイルに設定を追加する

Keepalived 設定ファイルを開きます。# vi /etc/keepalived/keepalived.conf

設定ファイルを変更し、vrrp_script と track_script の設定を追加します。設定は次のとおりです。

グローバル定義 {
   
   # グローバルに一意なホスト識別子 router_id server_a
   
}

vrrp_script check_nginx {
    スクリプト "/etc/keepalived/check_nginx.sh"
    interval 3 # シェルスクリプトを3秒ごとに実行します weight 10 # スクリプトが正常に実行されると、重みが10ずつ増加します
}

vrrp_インスタンス VI_1 {

    # マスターノードかバックアップノードかを識別します。値はMASTERまたはBACKUPです。
    状態マスター
    #バインドされたネットワーク カード インターフェイス ens33
    # 仮想ルータ ID、プライマリノードとバックアップノードが一致していることを確認する virtual_router_id 51
    # 重み優先度 100
    # 同期チェック時間、デフォルトの間隔は1秒ですadvert_int 1
    # 認証と承認のためのパスワード。すべてのアクティブサーバーとスタンバイサーバーは同じ認証を持つ必要があります {
        認証タイプ PASS
        認証パスワード 1111
    }

    トラックスクリプト {
        チェック_nginx
    }

    # 仮想IP
    仮想IPアドレス{
        192.168.1.88
    }
}

2.4 Keepalived サービスを再起動する

再起動後、Nginx が停止した後すぐに自動的に起動することがわかりました。

3. デュアルアクティブホットスタンバイの構築

3.1 デュアルアクティブホットスタンバイの概要

デュアルマシン マスター/スレーブ メカニズムにより、一度に 1 つのサーバーのみが外部にサービスを提供し、マスター マシンとバックアップ マシンの構成は同じであるため、リソースが大幅に浪費されます。

デュアルアクティブ ホット スタンバイは、この問題を解決します。デュアルアクティブ ホット スタンバイの原理は、2 つのサーバーが Keepalived を使用して互いのアクティブ バックアップとして機能するため、2 つの仮想 IP が必要になることです。次に、DNS ポーリング構成を使用して、ドメイン名がラウンドロビン方式で 2 つの仮想 IP にルーティングされ、最終的に高可用性が実現されます。

3.2 シナリオの説明

仮想IP1: 192.168.1.88

仮想IP2: 192.168.1.66

サーバー IP (プライマリ): 192.168.1.144

BサーバIP(バックアップ): 192.168.1.22

3.3 Aサーバーの構成を変更する

構成は次のとおりです。

! keepalived の設定ファイル

グローバル定義 {
   
   # グローバルに一意なホスト識別子 router_id server_a
   
}

vrrp_インスタンス VI_1 {

    # マスターノードかバックアップノードかを識別します。値はMASTERまたはBACKUPです
    状態マスター
    #バインドされたネットワーク カード インターフェイス ens33
    # 仮想ルータ ID、プライマリノードとバックアップノードが一致していることを確認する virtual_router_id 51
    # 重み優先度 100
    # 同期チェック時間、デフォルトの間隔は1秒ですadvert_int 1
    # 認証と承認のためのパスワード。すべてのアクティブサーバーとスタンバイサーバーは同じ認証を持つ必要があります {
        認証タイプ PASS
        認証パスワード 1111
    }
    # 仮想IP
    仮想IPアドレス{
        192.168.1.88
    }
}

vrrp_インスタンス VI_2 {

    # マスターノードかバックアップノードかを識別します。値はMASTERまたはBACKUPです
    状態 バックアップ
    #バインドされたネットワーク カード インターフェイス ens33
    # 仮想ルータ ID、プライマリノードとバックアップノードが一致していることを確認する virtual_router_id 52
    # 重み優先度 80
    # 同期チェック時間、デフォルトの間隔は1秒ですadvert_int 1
    # 認証と承認のためのパスワード。すべてのアクティブサーバーとスタンバイサーバーは同じ認証を持つ必要があります {
        認証タイプ PASS
        認証パス 1111
    }
    # 仮想IP
    仮想IPアドレス{
        192.168.1.66
    }
}

3.4 Bサーバ構成の変更

構成は次のとおりです。

! keepalived の設定ファイル

グローバル定義 {
   
   ルータID サーバB
   
}

vrrp_インスタンス VI_1 {
    
    # バックアップ状態 BACKUP に設定
    インターフェースens33
    仮想ルータID 51
    # 重みはホスト優先度90より低く設定されています
    広告_int 1
    認証
        認証タイプ PASS
        認証パスワード 1111
    }
    # 仮想IPはプライマリとバックアップの両方で同じvirtual_ipaddressに設定する必要があります
        192.168.1.88
    }
}

vrrp_インスタンス VI_2 {
    
    # マスター状態MASTERに設定
    インターフェースens33
    仮想ルータID 52
    # 重みはホスト優先度100より低く設定されています
    広告_int 1
    認証
        認証タイプ PASS
        認証パスワード 1111
    }
    # 仮想IPはプライマリとバックアップの両方で同じvirtual_ipaddressに設定する必要があります
        192.168.1.66
    }
}

3.5 両方のサーバーでKeepalivedを再起動する

Keepalived を再起動するだけです。

3.6 DNSラウンドロビンの設定

問題を解決するには、ネットワーク オペレータにお問い合わせください。

4. クラウドサーバーの負荷分散

現在、多くの企業は、コスト効率が高く、より安定しており、運用と保守を担当する専門家がいるため、自社製品を稼働させるためにクラウド サーバーをレンタルすることを選択しています。

ただし、クラウドサーバーを利用する場合は、クラウドサービス運営者の制約を受けることになります。

仮想 IP を例に挙げると、一部のクラウド サービス オペレーターはこれをサポートしていません。

仮想 IP がサポートされていない場合は、Keepalived ソリューションを放棄するしかありません。

しかし、Keepalived が使用できない場合でも、Nginx の高可用性を実現するソリューションはまだあります。多くのクラウド サービス プロバイダーが独自の負荷分散サービスを開始しています (例: Alibaba Cloud の負荷分散 SLB、Tencent Cloud の負荷分散 CLB)。直接レンタルできるので、自分で設定する必要はありません。

5. 概要

今日はKeepalivedによるNginxの自動再起動、Keepalivedのデュアルアクティブホットスタンバイ高可用性の構築、クラウドサーバ負荷分散ソリューションについてお話しました。皆様のお役に立てれば幸いです。

これで、Keepalived を使用して Nginx の自動再起動とデュアルアクティブ ホット スタンバイの高可用性を実現する方法についての説明は終了です。Keepalived を使用して Nginx の自動再起動を実現する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker+keepalived+nginx を使用してマスタースレーブホットスタンバイを実装する方法の例
  • Nginx+Keepalived でデュアルマシンのホットスタンバイを実現
  • keepalived デュアルマシンホットスタンバイ nginx の設定方法
  • Nginx は高可用性クラスタ構築を実装します (Keepalived+Haproxy+Nginx)
  • Keepalived は Nginx の負荷分散と高可用性のサンプル コードを実装します
  • Nginx+Keepalived でデュアルマシン マスターとバックアップを実装する方法
  • nginx+keepalived 高可用性マスタースレーブ構成の詳細な説明

<<:  Google ブラウザのラベルと入力間のスペースに関する小さな問題

>>:  MySQL の暗黙的な型変換によって発生するインデックス障害の解決策

推薦する

W3C チュートリアル (13): W3C WSDL アクティビティ

Web サービスは、アプリケーション間の通信に関係します。 WSDL は、XML ベースの Web ...

Linux でバックグラウンドで実行中のプログラムを表示して終了する方法

1. .shファイルを実行する./sh ファイルを使用して直接実行することもできますが、現在のターミ...

HTML インライン要素と HTML ブロックレベル要素の概要と違い

ブロックレベル要素の機能: • 常に新しい行から始まり、それ自体で 1 行を占め、後続の要素も新しい...

MySQLデータベースインデックスの左端一致原則

目次1. 共同インデックスの説明2. ac はインデックスを使用できますか? 3. 考える4. 最左...

HTML 選択タグにおける単一選択と複数選択の詳細な説明

select 要素は、単一選択または複数選択のメニューを作成します。フォームが送信されると、ブラウザ...

CSS3 すりガラス効果

すりガラス効果がうまく表現されていれば、ページが非常に鮮やかで立体的に見えるようになります。写真に直...

WeChatアプレットタブの左右スライドスイッチ機能実装コード

効果画像: 1. はじめに独自のアプレットでこのような機能を実装する必要がある1. 核となる考え方ス...

Vue3 のリアクティブ関数 toRef 関数 ref 関数の紹介

目次リアクティブ機能使用法: toRef 関数 (理解するだけ)使用法: ref関数レスポンシブデー...

HTML での一般的なリダイレクト接続の例コード

コードをコピーコードは次のとおりです。 window.location.href="zcb...

Apple M1チップにnginxをインストールし、vueプロジェクトをデプロイする詳細な手順

nginx をインストールApple Mac ではインストールに brew を使用します。brew ...

CSS を使用してデータ ホットスポット効果を実現する方法

効果は以下のとおりです。 分析する1. ここでは、点を囲む 3 つの円がズームアニメーションを実行し...

Vue が配列の変更を監視できない問題の解決方法

目次1. Vueリスナー配列2. vueが配列の変更を監視できない状況1. Vueリスナー配列Vue...

http:// の代わりに // を使用する利点は何ですか (アダプティブ https)

//デフォルトプロトコル/ デフォルト プロトコルの使用は、リソース アクセス プロトコルが現在の...

JavaScript の querySelector メソッドと getElementById メソッドの違いを分析する

目次1. 概要1.1 querySelector() と querySelectorAll() の使...

React dva実装コード

目次ドヴァdvaの使用DVAの実装非同期をサポートルーターの実装成し遂げる:ドヴァdva は、red...