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

推薦する

Linux で MySQL をインストールして設定する

システム: Ubuntu 16.04LTS 1\公式サイトからmysql-5.7.18-linux-...

Ubuntu で時刻同期に NTP を使用する

NTP は、ネットワーク上で時間を同期するための TCP/IP プロトコルです。通常、クライアントは...

vue3 テレポートの詳細な使用例

公式ウェブサイトhttps://cli.vuejs.org/ja/ガイド/場合によっては、コンポーネ...

HTML のボタン タグをクリックしてページにジャンプする 3 つの方法

方法1: onclickイベントを使用する <input type="button&...

MySQL 5.7.17 zip インストールおよび設定チュートリアル MySQL 起動失敗の解決策

MySQL 5.7.17、現在最新バージョンのようです、ダウンロードアドレスここで、プラットフォーム...

Docker を使用してイメージをローカルにパッケージ化してデプロイする方法

初めてDockerを使用してイメージをローカルにパッケージ化してデプロイするまず、私のラップトップシ...

Nginx でバージョン番号と Web ページのキャッシュ時間を非表示にする方法

Nginx の最適化 - バージョン番号と Web ページのキャッシュ時間を非表示にするバージョン番...

Linux 上でプライベート Git サーバーを構築するための詳細なチュートリアル

1. サーバーのセットアップリモート リポジトリは実際にはローカル リポジトリと何ら変わりなく、純粋...

Docker で ElasticSearch をデプロイする方法

1. ElasticSearch とは何ですか? Elasticsearch も Java で開発さ...

nginxを使用してドメイン名ベースの仮想ホストを構成する

1. 仮想ホストとは何ですか?仮想ホストは、特殊なテクノロジーを使用して、実行中のサーバーを論理的に...

Linux 環境に mysql5.7.36 データベースをインストールするチュートリアル

ダウンロードアドレス: https://dev.mysql.com/downloads/mysql/...

mysql order by in の文字順序の詳細な説明 (推奨)

//MySQL ステートメント SELECT * FROM `MyTable` WHERE `id...

CSS 3.0 テキストホバージャンプ特殊効果コード

これは、CSS 3.0 で実装されたテキストのホバーとジャンプ効果です。効果は次のとおりです。 以下...

パフォーマンス負荷診断にMySQLシステムデータベースを使用する方法

ある達人がかつて、自分の妻のことを知るのと同じくらい、自分が管理するデータベースのことを知るべきだと...

マークアップ言語 - Web アプリケーション CSS スタイル

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...