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 の暗黙的な型変換によって発生するインデックス障害の解決策

推薦する

複数の X 軸を使用して 7 日間の天気予報を実現するための Echarts サンプル コード

目次UIデザインEcharts の例の効果序文サンプルコード最終結果UIデザイン Echarts の...

練習と面接のための Linux シェル スクリプトのヒント 9 つを共有する

予防1) 先頭にインタープリターを追加します: #!/bin/bash 2) 構文のインデントに 4...

MySQL に配列を保存するサンプルコードと方法

多くの場合、ストアド プロシージャを作成するときに配列がよく使用されますが、MySQL ではストアド...

Linux で txt を mysql にインポートする方法

序文昨日、小さなプロジェクトを書いていたときに、txt ドキュメントのデータを mysql データベ...

JavaScript でのカスタム スワイパー コンポーネントの詳細な説明

目次エフェクト表示コンポーネント設定ステップ1ステップ2ステップ3コンポーネントの使用ステップ1ステ...

React Nativeでaxiosを使用してネットワークリクエストを行う方法

フロントエンド開発では、Ajax、jQuery ajax、axios、fetch など、データ要求を...

CentOS 6.x のインストール時に発生するエラー「ディスク sda に BIOS RAID メタデータが含まれています」の解決方法

今日、CentOS6.2 をインストールしていたところ、ハード ドライブの検出段階を通過できませんで...

Vue3 非同期データ読み込みコンポーネントサスペンスの使い方

目次序文コンポーネントの作成要約する序文Vue3 には多くの注目すべき機能が追加されましたが、サスペ...

MySQLチュートリアルではストアドプロシージャを徹底的に理解します

目次1. ストアドプロシージャに関連する概念2. ストアドプロシージャの使用1) ストアドプロシージ...

Nacos で MySQL8 を設定する方法

1. MySQLデータベースnacos_configを作成する2. データベース nacos_con...

あなたをエキスパートに見せるための 13 個の JavaScript ワンライナー

目次1. ランダムなブール値( true / false )を取得する2. 指定された日付が営業日で...

CentOS8 - bash: 文字化けとその解決方法

この状況は通常、中国語言語パックがインストールされていないか、デフォルトの言語設定に問題があるために...

Jenkins統合Dockerプラグインの問題を解決するいくつかの方法

目次背景質問1エラー 2エラー 3エラー4要約する背景テスト環境では、docker プラグインを統合...

MySQL テーブルを返すとインデックスが無効になるケースの説明

導入MySQL InnoDB エンジンがレコードをクエリし、インデックス カバレッジを使用できない場...

Dockerを使用してRedisクラスターを構築する方法

目次1. Redis Dockerベースイメージを作成する2. Redisノードイメージを作成する3...