目次
Nginxの負荷分散
Webサーバーは直接ユーザーに面しており、多くの場合、多数の同時リクエストを実行する必要があります。単一のサーバーをロードするのは困難です。フロントエンドでWEBサーバークラスターとNginxロードバランシングを使用しています。リクエストはバックに分散されます。負荷分散分散を実現するためのエンドサーバークラスター。次に、システムのスループット、要求のパフォーマンス、および高い災害耐性が大幅に向上します。
LBロードバランス
SLBサーバーlb
1.Nginxの負荷分散はレイヤーで分割されます
1.2負荷分散のアプリケーションシナリオは、レイヤーごとに分けられます。
1.2.1.4層の負荷分散
IPアドレス
TCP / UDP
ポート番号
1.2.2.7層の負荷分散
HTTP
HTTPS
FTP
SMTP
2.Nginx負荷分散構成シナリオ
Nginxは、負荷分散を実現するためにproxy_passプロキシモジュール構成を使用する必要があります。
Nginxの負荷分散は、クライアント要求を一連のアップストリーム仮想サービスプールにプロキシすることです
3.Nginxアップストリーム構成構文
構文:上流名{…}
デフォルト:-
コンテキスト:http
//上流の例
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backend1.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
4.環境計画実験7階
役割 | エクストラネット | イントラネット | CPU名 |
---|---|---|---|
LB1 | ens33:192.168.154.41 | ens32:172.168.20.12 | bl01 |
web1 | 192.168.154.132 | 172.168.20.6 | web01 |
web2 | 192.168.154.133 | 172.168.20.7 | web02 |
4.1.web1構成
[root@web01 www1]# echo "hellow 172.168.20.6" > index.html
[root@web01 www1]# cat /etc/nginx/conf.d/www1.conf
server {
listen 80;
server_name yan.www.com;
access_log /html/www1/log/access.log;
error_log /html/www1/log/error.log;
location / {
root /html/www1/;
index index.html;
}
}
[root@web01 www1]# systemctl reload nginx
4.2.web02構成
[root@web02 www1]# echo "hellow 172.168.20.7" > index.html
[root@web01 www1]# cat /etc/nginx/conf.d/www1.conf
server {
listen 80;
server_name yan.www.com;
access_log /html/www1/log/access.log;
error_log /html/www1/log/error.log;
location / {
root /html/www1/;
index index.html;
}
}
[root@web02 www1]# systemctl reload nginx
4.3.LB01構成
[root@bl01 nginx]# cat proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
[root@bl01 conf.d]# cat upstream.conf
upstream web {
#创建及群组
server 172.168.20.6;
server 172.168.20.7;
}
server {
listen 80;
server_name yan.www.com;
location / {
proxy_pass http://web;
include proxy_params; #调用及群组
}
}
[root@bl01 conf.d]# systemctl restart nginx
4.4。検証
ブラウザを使用してyan.www.comにアクセスし、テストを常に更新します
5.Nginx負荷分散バックエンドサーバーのステータス
フロントエンドNginxロードスケジューラのバックエンドWebサーバーのステータス
状態 | 概要概要 |
---|---|
ダウン | 現在のサーバー表示は負荷分散に参加していません |
バックアップ | 予約済みバックアップサーバー |
max_fails | 失敗したリクエストの数を許可する |
fail_timeout | max_failsが失敗した後、サービスの一時停止時間 |
max_conns | 受け入れられる接続の最大数を制限する |
テストケース:
1.ダウン状態をテストし、サーバーが負荷分散スケジューリングに参加していないことをテストします
upstream load_pass {
server 172.168.20.6 down;
}
2.测试backup及down状态
upstream load_pass {
server 172.168.20.6 down;
server 172.168.20.7 backup;
server 172.168.20.6 max_fails=1 fail_timeout=2s;
}
location / {
proxy_pass http://load_pass;
include proxy_params;
}
3.失敗したmax_failとfail_timeoutの数をテストしてから、マークダウンします
upstream load_pass {
server 172.168.20.6;
server 172.168.20.7 max_fail=2 fail_timeout=10s;
}
4.max_connsのTCP接続の最大数をテストします
upstream load_pass {
server 172.168.20.6;
server 172.168.20.7 max_conns=1;
}
6.Nginx負荷分散スケジューリングアルゴリズム
スケジューリングアルゴリズム | 概要概要 |
---|---|
ポーリング | バックエンドサーバーを1つずつ割り当てて、内部のニーズを見つけます。デフォルト(rr) |
重量 | 加重ポーリング、加重値が大きいほど、道徳的訪問を割り当てる可能性が高くなります(wrr) |
ip_hash | 各リクエストは、アクセスIPのハッシュ結果に従って割り当てられるため、バックエンドサーバーは同じIPアドレスから固定的にアクセスされます。 |
url_hash | 訪問したURLのハッシュ結果に従ってリクエストを配信し、各URLは同じバックエンドサーバーに送信されます |
less_conn | 最小の接続数、最小の接続数のマシンが分散されます(lc) |
wlc | 加重最小接続 |
1.Nginxロードバランシング[rr]ポーリング固有の構成
upstream load_pass {
server 172.168.20.6;
server 172.168.20.7;
}
2. [重量]重量ポーリング固有の構成のバランスをとる
upstream load_pass {
server 172.168.20.6 weight=5;
server 172.168.20.7;
}
3.Nginxストック災害バランスip_hashの特定の構成を重み付きで使用することはできません。
//クライアントが同じプロキシを使用している場合、特定のサーバーへの接続が多すぎます
upstream load_pass {
ip_hash;
server 172.168.20.6;
server 172.168.20.7;
}
7.4層の負荷分散を構成します
7.1メイン構成ファイル/etc/nginx/nginx.confを変更します
[root@bl01 ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
#四层代理
include /etc/nginx/conf.c/*.conf; //添加代理目录
[root@bl01 ~]# mkdir /etc/nginx/conf.c //创建负载配置文件目录
[root@bl01 ~]# vim /etc/nginx/conf.c/lb.conf //配置四层负载文件
stream {
upstream ssh_web01 {
server 192.168.154.132:22;
}
upstream ssh_web02 {
server 192.168.154.133:22;
}
upstream mysql_01 {
server 192.168.154.135:3306;
}
server {
listen 5555;
proxy_pass ssh_web01;
proxy_connect_timeout 1s;
proxy_timeout 300s;
}
server {
listen 6666;
proxy_pass ssh_web01;
}
server {
listen 33061;
proxy_pass mysql_01;
}
}