ホームページ  >  記事  >  バックエンド開発  >  Nginx 負荷分散タスクのスケジューリングとヘルスチェック

Nginx 負荷分散タスクのスケジューリングとヘルスチェック

WBOY
WBOYオリジナル
2023-10-15 15:27:191167ブラウズ

Nginx 負荷分散タスクのスケジューリングとヘルスチェック

Nginx の負荷分散タスク スケジューリングとヘルス チェック

はじめに:
現代のインターネット アプリケーションでは、多くの場合、高い同時実行性とパフォーマンスの安定性が重要な考慮事項となります。高性能 HTTP サーバーおよびリバース プロキシ サーバーとして、Nginx は静的ファイル サービスを提供するだけでなく、負荷分散や複数のバックエンド サーバーへのリクエストの分散にも使用できます。この記事では、Nginx 負荷分散のタスク スケジューリングとヘルス チェックの実装方法について説明し、具体的なコード例を示します。

タスク スケジューリング:
Nginx 負荷分散タスク スケジューリングとは、さまざまなスケジューリング アルゴリズムに基づいて、さまざまなバックエンド サーバーにリクエストを分散することを指します。一般的に使用されるスケジューリング アルゴリズムには、ポーリング、加重ポーリング、IP ハッシュなどが含まれます。以下は、Nginx を使用した構成例です。

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

上記の構成では、backend という名前の負荷分散バックエンド グループが定義されており、これには 3 つのバックエンド サーバーが含まれています。 server ブロックで、proxy_passbackend にリクエストして、単純なポーリング スケジューリング アルゴリズムを実装します。

ヘルスチェック:
タスクのスケジューリングに加えて、ヘルスチェックも負荷分散における重要な機能です。バックエンドサーバーの健全性状態を定期的にチェックすることで、Nginx は障害のあるサーバーをタイムリーに排除し、システムの可用性を確保できます。以下は、Nginx を使用したヘルス チェック設定の例です。

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;

        check interval=3000 rise=2 fall=3 timeout=1000;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;
        }
    }
}

上記の設定では、upstream## に check パラメータを追加することでヘルス チェック機能を有効にできます。 # ブロック。このうち、interval はチェックの時間間隔を示し、rise はチェックが数回連続して成功した後にサーバーが正常であるとみなされることを示し、fall はサーバーが正常であることを示します。いくつかのチェックが連続して失敗すると、異常とみなされます。 timeout は、各チェックのタイムアウトを表します。

コード例:

Nginx 構成では、上記のタスク スケジューリングとヘルス チェックの構成に加えて、Lua スクリプトを使用して、より複雑なスケジューリング アルゴリズムとヘルス チェック ロジックをカスタマイズすることもできます。以下は、Lua スクリプトを使用して加重ポーリング スケジューリング アルゴリズムとカスタム ヘルス チェックを実装するコード例です。

http {
    upstream backend {
        server 10.0.0.1 weight=3;
        server 10.0.0.2 weight=2;
        server 10.0.0.3 weight=1;

        check interval=3000 rise=2 fall=3 timeout=1000 fail_timeout=10s;
        check_http_send "GET /health HTTP/1.0

";
        check_http_expect_alive http_2xx http_3xx;
    }

    server {
        listen 80;

        location / {
            access_by_lua_block {
                -- 加权轮询调度算法
                local peer = ngx.shared.backend:get("current_peer")
                if not peer then
                    peer = "1"
                    ngx.shared.backend:set("current_peer", peer)
                end
                ngx.var.proxy_pass = "http://backend" .. peer
                ngx.shared.backend:incr("current_peer", 1, 1)

                -- 自定义健康检查
                local status = ngx.ctx.balancer_address.status
                if status ~= ngx_balancer.BALANCER_STATUS_OK then
                    ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE)
                end
            }
            proxy_pass http://backend;
        }
    }
}

上記のコード例では、Lua スクリプトを使用して加重ポーリング スケジューリング アルゴリズムを実装しています。同時に、グローバル変数は、現在スケジュールされているバックエンド サーバーを記録するために使用される

ngx.shared を使用して維持されます。さらに、access_by_lua_block では、ngx.ctx.balancer_address.status の値を確認することでヘルス チェック ロジックがカスタマイズされます。

結論:

Nginx の負荷分散タスクのスケジューリングとヘルスチェックは、高い同時実行性とパフォーマンスの安定性を実現するための重要な要素の 1 つです。合理的なタスク スケジューリング アルゴリズムとヘルス チェック戦略を通じて、システムのパフォーマンスと信頼性を向上させることができます。この記事では、Nginx 負荷分散タスクのスケジューリングとヘルス チェックの基本概念を紹介し、Nginx 構成ファイルと Lua スクリプトを使用した具体的なコード例を示します。読者は、独自のニーズに応じて調整および拡張できます。読者にとって刺激的で役に立つものとなることを願っています。

以上がNginx 負荷分散タスクのスケジューリングとヘルスチェックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。