Maison  >  Article  >  développement back-end  >  Planification des tâches d'équilibrage de charge Nginx et vérification de l'état

Planification des tâches d'équilibrage de charge Nginx et vérification de l'état

WBOY
WBOYoriginal
2023-10-15 15:27:191120parcourir

Planification des tâches déquilibrage de charge Nginx et vérification de létat

Planification des tâches d'équilibrage de charge et bilan de santé Nginx

Introduction :
Dans les applications Internet modernes, une concurrence élevée et une stabilité des performances sont souvent des considérations importantes. En tant que serveur HTTP et serveur proxy inverse hautes performances, Nginx fournit non seulement des services de fichiers statiques, mais il peut également être utilisé pour équilibrer la charge et distribuer les requêtes à plusieurs serveurs principaux. Cet article discutera de la méthode de mise en œuvre de la planification des tâches et du contrôle de l'état de l'équilibrage de charge Nginx, et donnera des exemples de code spécifiques.

Planification des tâches : 
La planification des tâches d'équilibrage de charge Nginx fait référence à la distribution des requêtes à différents serveurs backend en fonction de différents algorithmes de planification. Les algorithmes de planification couramment utilisés incluent l'interrogation, l'interrogation pondérée, le hachage IP, etc. Voici un exemple de configuration utilisant Nginx :

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

    server {
        listen 80;

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

Dans la configuration ci-dessus, un groupe backend d'équilibrage de charge nommé backend est défini, qui comprend trois serveurs backend. Dans le bloc server, demandez proxy_pass au backend pour implémenter un algorithme de planification d'interrogation simple. backend的负载均衡后端组,包含了三个后端服务器。在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

Bilan de santé :

En plus de la planification des tâches, le bilan de santé est également une fonction importante dans l'équilibrage de charge. En vérifiant régulièrement l'état de santé du serveur back-end, Nginx peut éliminer les serveurs défectueux en temps opportun pour garantir la disponibilité du système. Voici un exemple de configuration de vérification de l'état à l'aide de Nginx :
rrreee

Dans la configuration ci-dessus, la fonction de vérification de l'état peut être activée en ajoutant le paramètre check dans le bloc upstream . Parmi eux, interval indique l'intervalle de temps de vérification, rise indique que le serveur est considéré comme sain après plusieurs vérifications réussies consécutives, et fall indique que après plusieurs vérifications échouées consécutives, le serveur est considéré comme défectueux. timeout indique le délai d'attente pour chaque vérification. 🎜🎜Exemple de code : 🎜Dans la configuration Nginx, en plus de la configuration de planification des tâches et de vérification de l'état ci-dessus, nous pouvons également personnaliser des algorithmes de planification plus complexes et une logique de vérification de l'état via des scripts Lua. Voici un exemple de code qui utilise le script Lua pour implémenter un algorithme de planification d'interrogation pondérée et un contrôle de santé personnalisé : 🎜rrreee🎜Dans l'exemple de code ci-dessus, le script Lua est utilisé pour implémenter un algorithme de planification d'interrogation pondérée. Dans le même temps, les variables globales sont conservées à l'aide de ngx.shared, qui est utilisé pour enregistrer le serveur back-end actuellement planifié. De plus, dans access_by_lua_block, la logique de vérification de l'état est personnalisée en vérifiant la valeur de ngx.ctx.balancer_address.status. 🎜🎜Conclusion : 🎜La planification des tâches d'équilibrage de charge et le contrôle de santé de Nginx sont l'un des facteurs clés pour obtenir une concurrence élevée et une stabilité des performances. Grâce à des algorithmes raisonnables de planification des tâches et à des stratégies de contrôle de l’état, nous pouvons améliorer les performances et la fiabilité du système. Cet article présente les concepts de base de la planification des tâches d'équilibrage de charge et de la vérification de l'état de Nginx, et donne des exemples de code spécifiques utilisant les fichiers de configuration Nginx et les scripts Lua. Les lecteurs peuvent s'ajuster et se développer en fonction de leurs propres besoins. J'espère que cela sera inspirant et utile aux lecteurs. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn