この記事では、主に nginx のアプリケーションを紹介します。負荷分散に nginx を使用すると、特定の参考値が得られます。必要な友人は参考にしてください。nginx は一般的に 7 層の負荷分散に使用できます。この記事では、負荷分散の基礎知識と、負荷分散に nginx を使用する簡単な例を紹介します。
負荷分散アルゴリズム | 負荷分散アルゴリズム (E) | nginx のサポート またはではありません | 説明 | 適用可能なシナリオ |
通常のポーリング | ラウンドロビン | は、同じ重みを持つ | ポーリングをサポートします | 外部サービスリクエストと内部サーバーの両方が比較的バランスが取れているシナリオに適用 |
事前準備
デモの便宜上、Tornadoを使用してミラーを作成し、表示用に2つのポート7001/7002で2つのサービスを起動しておきます。サービスが異なります。
[root@kong ~]# docker run -d -p 7001:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "User Service 1: 7001"ddba0abd24524d270a782c3fab907f6a35c0ce514eec3159357bded09022ee57
[root@kong ~]# docker run -d -p 7002:8080 liumiaocn/tornado:latest python /usr/local/bin/daemon.py "User Service 1: 7002"95deadd795e19f675891bfcd44e5ea622c95615a95655d1fd346351eca707951
[root@kong ~]# [root@kong ~]# curl http://192.168.163.117:7001Hello, Service :User Service 1: 7001[root@kong ~]# [root@kong ~]# curl http://192.168.163.117:7002Hello, Service :User Service 1: 7002[root@kong ~]#
nginxを起動
[root@kong ~]# docker run -p 9080:80 --name nginx-lb -d nginx 9d53c7e9a45ef93e7848eb3f4e51c2652a49681e83bda6337c89a3cf2f379c74
[root@kong ~]# docker ps |grep nginx-lb9d53c7e9a45e nginx "nginx -g 'daemon ..." 11 seconds ago Up 10 seconds 0.0.0.0:9080->80/tcp nginx-lb
[root@kong ~]#
nginxコードスニペット
以下のnginxコードスニペットを用意し、nginxの/etc/nginx/conf.d/default.confに追加します
http {
upstream nginx_lb { server 192.168.163.117:7001; server 192.168.163.117:7002;
}server {
listen 80;
server_name www.liumiao.cn 192.168.163.117;
location / {
proxy_pass http://nginx_lb;
}
}
default.confの変更方法
を渡すことができますコンテナに vim をインストールして効果を実現します。ローカルで変更して docker cp 経由で渡すことも、sed で直接変更することもできます。 vimをコンテナにインストールする場合は、次の方法を使用します
[root@kong ~]# docker exec -it nginx-lb sh# apt-get update...省略# apt-get install vim...省略
変更前
# cat default.confserver {
listen 80;
server_name localhost; #charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html; index index.html index.htm;
} #error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}}#
変更後
# cat default.confupstream nginx_lb { server 192.168.163.117:7001; server 192.168.163.117:7002;
}server {
listen 80;
server_name www.liumiao.cn 192.168.163.117; #charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / { #root /usr/share/nginx/html;
#index index.html index.htm;
proxy_pass http://nginx_lb;
} #error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}}#
nginxコンテナを再起動
[root@kong ~]# docker restart nginx-lbnginx-lb
[root@kong ~]#
結果を確認します
ポーリングが順番に実行されていることがはっきりとわかります:
[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7001[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7002[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7001[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7002[root@kong ~]#
負荷分散デモ例: ウェイトポーリング
これに基づいて、ウェイトポーリングを実行するには、ウェイトを追加するだけで済みます
負荷分散アルゴリズム |
負荷分散アルゴリズム(E) |
nginxサポートの有無 | 説明 |
適用可能なシナリオ |
加重ラウンドロビン |
加重ラウンドロビン |
サポート(重み) |
ポーリングに異なる重みを設定できます |
サーバーの処理能力が異なる場合、またはトラフィック制御を実行したい場合, Canary Release |
default.confを変更
default.confを次のように変更
# cp default.conf default.conf.org
# vi default.conf
# diff default.conf default.conf.org
2,3c2,3
< server 192.168.163.117:7001 weight=100;< server 192.168.163.117:7002 weight=200;
---> server 192.168.163.117:7001;
> server 192.168.163.117:7002;
#
nginxコンテナを再起動
[root@kong ~]# docker restart nginx-lbnginx-lb
[root@kong ~]#
結果を確認
1/3と2/に従ってポーリング結果が確認できます3 割合は進行中です:
[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7001[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7002[root@kong ~]# curl http://localhost:9080Hello, Service :User Service 1: 7002[root@kong ~]#
関連する推奨事項:
nginx 管理構成の最適化
Nginx リバース プロキシ WebSocket 構成例
以上がnginx アプリケーション: 負荷分散に nginx を使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。