厳密に言えば、nginx には負荷分散バックエンド ノードのヘルス チェック機能はありませんが、デフォルトの ngx_http_proxy_module モジュールと ngx_http_upstream_module モジュールの関連命令を実行することで、バックエンド ノードに障害が発生したときに自動的に正常なノードに切り替えてアクセスを提供することができます。 以下に、これら 2 つのモジュールの関連する手順を示します。 構文: proxy_connect_timeout 時間; デフォルト値: proxy_connect_timeout 60 秒; バックエンド サーバーとの接続を確立するためのタイムアウトを設定します。このタイムアウトは通常 75 秒を超えることはないことに注意してください。 構文: proxy_read_timeout 時間; デフォルト値: proxy_read_timeout 60 秒; バックエンド サーバーからの応答を読み取るためのタイムアウトを定義します。このタイムアウトは、応答の送信全体が完了するまでの最大時間ではなく、隣接する 2 つの読み取り操作間の最大時間間隔を指します。バックエンド サーバーがタイムアウト期間内にデータを送信しない場合、接続は閉じられます。 nginx_upstream_check_module モジュールを使用してバックエンドノードのヘルスチェックを実行します。 これは、Taobao 技術チームによって開発された nginx モジュールです。このバージョンの nginx を入手するには、Taobao tengine の公式 Web サイト http://tengine.taobao.org にアクセスしてください。 次のように、nginx.conf 構成ファイルのアップストリームにヘルス チェックを追加します。 アップストリーム名{ サーバー 192.168.0.21:80; サーバー 192.168.0.22:80; チェック間隔=3000 上昇=2 下降=5 タイムアウト=1000 タイプ=http; } 上記の設定は、nameのロードバランシングエントリ内のすべてのノードが3秒ごとにチェックされ、リクエストが2回正常であればマークされることを意味します。 リアルサーバーのステータスはアップです。検出が 5 回失敗すると、リアルサーバーのステータスはダウンとマークされ、タイムアウト期間は 1 秒になります。 nginx_upstream_check_module モジュールでサポートされている命令の意味は次のとおりです。
デフォルト: パラメータが設定されていない場合、デフォルト値は次のようになります。
コンテキスト: 上流 このコマンドは、バックエンド サーバーのヘルス チェック機能を有効にすることができます。 コマンドに続くパラメータの意味は次のとおりです。 interval: バックエンドに送信されるヘルスチェック パケットの間隔。 fall(fall_count): 連続した失敗回数が fall_count に達すると、サーバーはダウンしていると見なされます。 rise(rise_count): 連続成功回数がrise_countに達すると、サーバーは起動していると見なされます。 タイムアウト: バックエンドのヘルス要求のタイムアウト期間。 default_down: サーバーの初期ステータスを設定します。true の場合は、デフォルトでダウンしていることを意味します。false の場合は、アップしていることを意味します。デフォルト値は true です。これは、サーバーが最初は使用不可であると見なされ、ヘルス チェック パッケージが一定数の成功に達するまで正常であるとは見なされないことを意味します。 type: ヘルスチェック パッケージのタイプ。現在、次のタイプがサポートされています。 tcp: 単純な tcp 接続。接続が成功した場合、バックエンドは正常であることを意味します。 ssl_hello: 最初の SSL hello パケットを送信し、サーバーから SSL hello パケットを受信します。 http: HTTP リクエストを送信し、バックエンド応答パケットのステータスに基づいてバックエンドが稼働しているかどうかを判断します。 mysql: MySQL サーバーに接続し、サーバーからのグリーティング パケットを受信して、バックエンドが稼働しているかどうかを判断します。 ajp: AJP プロトコルの Cping パケットをバックエンドに送信し、Cpong パケットを受信することでバックエンドが稼働しているかどうかを判断します。 port: バックエンド サーバーの検査ポートを指定します。 実際のサービスとは異なるバックエンド サーバー ポートを指定できます。たとえば、バックエンドがポート 443 でアプリケーションを提供する場合、ポート 80 のステータスをチェックしてバックエンドの正常性を判断できます。 デフォルト値は 0 です。これは、バックエンド サーバーが実際のサービスを提供するために使用するポートと同じであることを意味します。 このオプションは Tengine-1.4.0 で登場しました。 追加知識: nginx タイムアウト自動再送信 1. 現象: nginx をロードローダーとして使用する場合、URL 応答が一定時間 (通常は 10 分) を超えると、リクエストは自動的に別のマシンに再送信されます。 2. 理由: nignxi では、タイムアウト後の自動再送信はデフォルトで有効になっており、オフにする必要があります。 3. 解決策: nginx に設定を追加します:
nginx の負荷分散構成とダウンタイム時の自動切り替え方法については、上記の記事が皆さんに共有したい内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Vueでスワイパープラグインを使用する際の問題を解決する
>>: MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明
この記事では、電子商取引プラットフォームで商品の詳細を表示する一般的な例を紹介します。たとえば、ある...
この記事では、ログインジャンプを実装するためのVueの具体的なコードを例として紹介します。具体的な内...
素敵なフリップログインと登録インターフェースを作成する序文最近、ネットワーク ディスクを構築しようと...
wgetコマンドを使用して、親ディレクトリの下のサブディレクトリ全体をダウンロードします。親ディレク...
MySQLデータベースのインストールに関するメモ、みんなで共有a) MySQL ソースインストールパ...
目次1. ファイルとディレクトリの基本的な保存2. Inコマンドの紹介(1)lnコマンドの基本情報を...
Nextcloud は、オープンソースで無料のプライベート クラウド ストレージ ネットワーク ディ...
軽量のオープンソース データベースである MySQL は、エンタープライズ レベルのアプリケーション...
目次1. プロトタイプ2. プロトタイプチェーン2.1 コンストラクタ2.2 電話をかける/申し込む...
これら 6 つの記事を書いた後、私は少し混乱し始めました。次にどこに書けばいいのか分かりません。ドメ...
1.アルパインイメージをダウンロードする [root@docker43 ~]# docker pul...
導入: MySQL を使用してテーブルを作成する場合、通常は自動インクリメント フィールド (AUT...
この記事では、スローモーションアニメーション効果を実現するためのJavaScriptの具体的なコード...
序文最近、偶然 MySQL の coalesce を発見しました。ちょうど時間があったので、MySQ...
目次1. 必要な環境をインストールする //gccをインストールする yum で gcc-c++ を...