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

推薦する

MySQL での Truncate の使用法の詳細な説明

序文:テーブルをクリアしたいときは、truncate ステートメントをよく使用します。ほとんどの場合...

Alibaba Cloud Server ドメイン名解決手順 (初心者向けチュートリアル)

ウェブサイトの構築を始めたばかりの初心者には、理解し、学ぶべきことがたくさんあります。ウェブサイトを...

MySQL のデフォルトのストレージ エンジンを変更する方法

mysql ストレージ エンジン: MySQL サーバーはモジュール スタイルを採用しており、特にス...

CSS3 天子グリッドリストのスタイルの書き方

多くのプロジェクトでは、中央に灰色の分割線があり、両側に分割線がないグリッド表示の機能を実装する必要...

Vue3 がコンポーネント通信に mitt を使用する手順

目次1. インストール2. プロジェクトにインポートしてマウントする3. 使用Vue2.x はコンポ...

jQuery ベースのカレンダー効果

この記事では、カレンダー効果を実現するためのjQueryの具体的なコードを例として紹介します。具体的...

HTML リンク アンカー タグと SEO におけるその役割の概要

<a> タグは主に、ハイパーリンクまたはアンカー リンクとも呼ばれるリンクとブックマーク...

Centos7のFirewalldファイアウォールの基本コマンドの詳細な説明

1. Linuxファイアウォールの基礎Linux ファイアウォール システムは主にネットワーク層で動...

MySQL ダーティ ページ フラッシュとテーブル スペースの縮小の原理の分析

mysql ダーティページWAL メカニズムにより、InnoDB はステートメントを更新するときに、...

Vue組み込みコンポーネントのキープアライブの使用例

目次1. キープアライブの使用使用例: 1. すべてのページをキャッシュする: 2. 条件に基づいて...

Linux サーバーに埋め込まれた ddgs および qW3xT.2 マイニング ウイルスの対処の実践記録

序文仮想通貨の狂気的な投機により、マイニングウイルスは犯罪者が最も頻繁に使用する攻撃方法の 1 つに...

Ubuntu 19.10 で ssh サービスを有効にする (詳細なプロセス)

Ubuntuでsshを開くのに1時間以上かかりました。主な原因は、最初に読んだチュートリアルの手順...

react-navigation6.xルーティングライブラリの基本的な使い方の詳しい説明

目次react-nativeプロジェクトの初期化react-nativeプロジェクトをインストールす...

CSS ブラウザ互換性の問題に対する 4 つの解決策

フロントエンドは、技術が急速に進化するだけでなく、知っておくべき事柄が多すぎるという理由で大変な仕事...

CSSはラジオをクリックして2つの画像スタイルを切り替えますが、複数のラジオのうち1つだけをチェックできます。

クリックされたボタンには赤い画像スタイルを実装し、選択されていない他のボタンには灰色の画像スタイルを...