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

推薦する

iOS、Android、ミニプログラムアプリの敷居の低い開発のためのフロントエンドフレームワークを詳しく解説

現在、クロスプラットフォーム開発技術はもはや新しい話題ではありません。市場にはいくつかのオープンソー...

MySQL の自動増分主キーが使い果たされた場合の対処方法

面接では、次のようなシナリオを経験する必要があります。インタビュアー: 「MySQL を使用したこと...

Dockerでコンテナを作成するときにコンテナIPを指定する実装例

Docker はコンテナを作成するときに、デフォルトでブリッジ ネットワークを使用し、IP アドレス...

ユーザー中心設計

最近、デジタル デザイン コミュニティで「誰が何を担当するのか」という明らかな混乱についてよく質問さ...

SQL文でのgroup byの使用について簡単に説明します

1. 概要Group by は、by の後の規則に従ってデータをグループ化することを意味します。いわ...

MySQL マスタースレーブレプリケーションプロセスの詳細な説明

1. マスタースレーブレプリケーションとは何ですか?マスター データベースの DDL および DML...

MySQLサーバーは--read-onlyオプションで実行されているため、このステートメントを実行できません

会議中に同僚から開発ライブラリを書き込めないとの報告を受けました。エラー メッセージは次のとおりでし...

Windows での MySQL コミュニティ サーバー 8.0.16 のインストールと構成方法のグラフィック チュートリアル

最近、MySQL関連の構文をよく見かけます。また、MySQLストアドプロシージャの書き方も学びたいの...

JavaScript における call、apply、bind の実装原則の詳細な説明

目次序文電話使用法成し遂げるシンプルな実装バージョン:アップグレード版:適用する使用法成し遂げるバイ...

仕事でよく使うLinuxコマンドまとめ

仕事では、docker や kubernetes などのオープンソース ツールをさらに活用しましょう...

HTML 名、ID、クラス (フォーマット/アプリケーション シナリオ/機能) などの違いの紹介。

ページには多くのコントロール (要素またはタグ) があります。これらのタグをより便利に操作するには、...

Linux でのマルチスレッドにおけるフォークの紹介

目次質問:ケース(1)子スレッドを作成する前にフォークするケース(2)子スレッドを作成した後にフォー...

MySQLの主キーと外部キーの使用と説明を簡単に説明します

目次1. 外部キー制約外部キーとは何ですか?外部キーを使用する条件:外部キーの定義構文は次のとおりで...

MySQL のレイテンシ問題とデータフラッシュ戦略プロセスの分析

目次1. MySQLレプリケーションプロセス2. MySQLの遅延問題の分析3. プロモーション期間...

Vueは大画面ページのスクリーン適応を実現します

この記事では、大画面ページのスクリーンアダプテーションを実現するためのVueの具体的なコードを参考ま...