成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Nginx 學習總結(jié)(6) —— 負載均衡

wwq0327 / 2572人閱讀

摘要:實現(xiàn)負載均衡負載均衡是反向代理技術(shù)的一種運用。而實現(xiàn)負載均衡的核心在于如何將請求合理地分配給不同的后端服務(wù)器。

這是 Nginx 學習總結(jié)的第六篇,上一篇介紹到了 Nginx 學習總結(jié)(5) —— 反向代理,本文主要演示結(jié)合 proxyupstream 模塊的使用來實現(xiàn) Nginx 的負載均衡。

Nginx 官網(wǎng)中對 upstream 模塊的介紹:ngx_http_upstream_module 模塊用于定義可由 proxy_pass,fastcgi_passuwsgi_pass,scgi_passmemcached_pass 指令引用的服務(wù)器組。

Context:http
準備工作

在 VMware 上準備 3 臺服務(wù)器(centos_7_x64),分別安裝了 Nginx(1.12.0),它們能夠互相 ping 通,3臺服務(wù)器 IP 分別為:

192.168.4.221(Web 服務(wù)器 A)

192.168.4.222(Web 服務(wù)器 B)

192.168.4.223(反向代理服務(wù)器 C)

在 Web 服務(wù)器的根目錄下的 index.html 文件內(nèi)容分別為:

Welcome to 192.168.4.221 !

Welcome to 192.168.4.222 !

反向代理配置

在 Nginx 下配置反向代理,主要是 proxyupstream 模塊的配置。我們將反向代理服務(wù)器 C 的配置修改成如下:

upstream jochen {
    server 192.168.4.221:80;
    server 192.168.4.222:80;
}

server {
    listen       80;
    server_name  localhost;

    charset      utf-8;

    location / {
        proxy_pass http://jochen;

        proxy_set_header HOST            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

配置好之后,重啟反向代理服務(wù)器 C ,瀏覽器訪問 http://192.168.4.223

瀏覽器刷新頁面:

我們可以發(fā)現(xiàn),訪問的內(nèi)容的確是 Web 服務(wù)器 A 或 B 提供的內(nèi)容,表明我們的反向代理是配置成功了。而且,響應內(nèi)容是由 Web 服務(wù)器 A、B 依次輪流提供的。

實現(xiàn)負載均衡

負載均衡是反向代理技術(shù)的一種運用??蛻舳嗽L問服務(wù)器,服務(wù)器會把請求分發(fā)給其它多個不同的服務(wù)器(即反向代理),從而減輕了單個服務(wù)器處理海量請求的壓力,不會出現(xiàn)崩潰,即如圖:

在上面的配置中,我們沒有設(shè)置 upstream 的分配方式,默認情況下,這將采用輪詢的方式,即每個請求按時間逐一分配到不同的后端服務(wù)器。如果后端服務(wù)器 down 掉,能自動剔除。而實現(xiàn)負載均衡的核心在于如何將請求合理地分配給不同的后端服務(wù)器。

在現(xiàn)實生活中,不同服務(wù)器的 CPU 、內(nèi)存、硬盤、網(wǎng)絡(luò)帶寬的性能都是不同的,因而它們各自的處理能力各不一樣。需要采用某種負載均衡調(diào)度算法,來將請求合理地分配給不同的后端服務(wù)器,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。

在 Nginx 中,upstream 的分配方式有 5 種,分別是:

1. 輪詢(默認)

每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器 down 掉,能自動剔除。如:

upstream jochen {
    server 192.168.4.221:80;
    server 192.168.4.222:80;
}
2. weight

指定輪詢幾率,weight 和訪問比率成正比,用于后端服務(wù)器性能不均的情況。如:

upstream jochen {
    server 192.168.4.221:80 weight=10;
    server 192.168.4.222:80 weight=20;
}
3. ip_hash

每個請求按訪問 ip 的 hash 結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決 session 的問題。如:

upstream jochen {
    server 192.168.4.221:80;
    server 192.168.4.222:80;
    ip_hash;
}
4. fair(第三方)

按后端服務(wù)器的響應時間來分配請求,響應時間短的優(yōu)先分配。這個是第三方模塊,需要額外安裝。如:

upstream jochen {
    server 192.168.4.221:80;
    server 192.168.4.222:80;
    fair;
}
5. url_hash(第三方)

按訪問 url 的 hash 結(jié)果來分配請求,使每個 url 定向到同一個后端服務(wù)器,后端服務(wù)器為緩存時比較有效。這個是第三方模塊,需要額外安裝。如:

upstream jochen {
    server 192.168.4.221:80;
    server 192.168.4.222:80;
    hash $request_uri;
    hash_method crc32;
}

upstream 模塊中,可以通過 server 指令定義服務(wù)器的地址和其他參數(shù)。地址可以指定為域名,或 IP 地址(端口可選,默認為80),或 "unix" 為前綴的套接字路徑。

Context:  upstream

常用的參數(shù)有:

down 將服務(wù)器標記為永久不可用

weight 設(shè)置服務(wù)器的權(quán)重,默認情況下為 1

backup 將服務(wù)器標記為備份服務(wù)器。當主服務(wù)器不可用時,它將被傳遞請求

max_fails 允許請求失敗的次數(shù),默認為 1

fail_timeout 在經(jīng)歷了 max_fails 次失敗后,暫停服務(wù)的時間。max_fails 可以和 fail_timeout 一起使用

upstream jochen {
    server backend1.example.com  weight=5;
    server 192.168.4.222:80      max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;
    server backup1.example.com   backup;
}
健康檢查

Nginx 自身是沒有針對負載均衡后端節(jié)點健康檢查的模塊,nginx_upstream_check_module 是專門用于負載均衡健康檢查的第三方模塊,由淘寶的姚偉斌大神開發(fā),通過它可以用來檢測后端 server 的健康狀態(tài)。nginx_upstream_check_module 模塊會持續(xù)檢查 server 的狀態(tài),如果某個 server 不可用,則請求就不會被轉(zhuǎn)發(fā)到該 server 上。項目地址:https://github.com/yaoweibin/... 。

下面的是一個帶負載均衡健康檢查的 nginx.conf 配置:

upstream jochen {
    server 192.168.4.221:80 weight=5 max_fails=2 fail_timeout=30s;
    server 192.168.4.222:80 weight=1 max_fails=2 fail_timeout=30s;

    check interval=5000 rise=2 fall=3 timeout=1000 type=http;
    check_http_send "HEAD / HTTP/1.0

";
    check_http_expect_alive http_2xx http_3xx;
}

server {
    listen       80;
    server_name  localhost;

    charset      utf-8;

    location / {
        proxy_pass http://jochen;

        proxy_set_header HOST            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /nginx-status {
        stub_status; 
        access_log off;
        allow 192.168.4.220;
        deny all;
    }

    location /check-status {
        check_status;
        access_log off;
        allow 192.168.4.220;
        deny all;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

重啟 Nginx 配置生效之后,可以看到 error.log 日志如下信息,說明 nginx_upstream_check_module 模塊已正常運行:

2018/03/29 15:12:48 [error] 46931#46931: enable check peer: 192.168.4.221:80 
2018/03/29 15:12:50 [error] 46931#46931: enable check peer: 192.168.4.222:80

同時,訪問 http://192.168.4.223/check-status ,可以看到如下頁面:

上面配置的意思是,對 jochen 這個服務(wù)器組中的所有 server,每5秒檢測一次,請求 2 次正常則標記 server 狀態(tài)為up,如果檢測 3 次都失敗,則標記 server 的狀態(tài)為 down,超時時間為1秒。

nginx_upstream_check_module 模塊的指令詳情見 https://github.com/yaoweibin/...,常用指令說明如下:

check 為上游服務(wù)器添加運行狀況檢查,常用參數(shù)如下:

interval 向后端發(fā)送的健康檢查包的間隔

fall 如果連續(xù)失敗次數(shù)達到 fall_count,服務(wù)器就被認為是 down

rise 如果連續(xù)成功次數(shù)達到 rise_count,服務(wù)器就被認為是 up

timeout 后端健康請求的超時時間

type 健康檢查包的類型,包括 tcp、http、ajp、ssl_hello、mysql、fastcgi

check_http_send 配置 HTTP 監(jiān)控檢查包發(fā)送的請求內(nèi)容,為了減少傳輸數(shù)據(jù)量,推薦采用 HEAD 方法。

check_http_expect_alive 指定 HTTP 回復的成功狀態(tài),默認認為 2XX 和 3XX 的狀態(tài)是健康的。

參考文章:

Nginx 反向代理和負載均衡配置

Module ngx_http_upstream_module

nginx 做負載均衡器以及 proxy 緩存配置

nginx_upstream_check_module

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39872.html

相關(guān)文章

  • Nginx 學習總結(jié)(2) —— 基本配置

    摘要:配置信息主要分為六大部分全局設(shè)置事件設(shè)置服務(wù)器設(shè)置虛擬主機設(shè)置匹配設(shè)置反向代理設(shè)置。最大客戶端連接數(shù)由和決定作為服務(wù)器時,作為反向代理時,。參考文章服務(wù)器安裝及配置文件詳解的配置虛擬主機負載均衡和反向代理 這是 Nginx 學習總結(jié)的第二篇,上一篇介紹到了 Nginx 學習總結(jié)(1) —— 概述,這一篇會對 Nginx 的基本配置做一些總結(jié)。 Nginx 配置信息主要分為六大部分: m...

    leoperfect 評論0 收藏0
  • Nginx 學習總結(jié)(1) —— 概述

    摘要:模塊化體系的內(nèi)部結(jié)構(gòu)是由核心部分和一系列的功能模塊所組成。除此之外,應用相關(guān)的功能都是在一系列的功能模塊中完成。將各功能模塊組織成一條鏈,當有請求到達的時候,請求依次經(jīng)過這條鏈上的部分或者全部模塊進行處理。 Nginx 是什么 Nginx 是一款輕量的(相比 Apache、Lighttpd 而言)、高性能的 HTTP 服務(wù)器,同時也可以用作反向代理、負載平衡器和 HTTP 緩存。Ngi...

    james 評論0 收藏0
  • Nginx

    摘要:此外,其也能夠提供強大的反向代理功能。是由為俄羅斯訪問量第二的站點開發(fā)的,第一個公開版本發(fā)布于年月日。 keepalived+nginx 實現(xiàn)高可用雙機熱備 + 負載均衡架構(gòu) 1 準備4個ubuntu16.04虛擬機(啟用網(wǎng)卡二并使用橋接模式):A服務(wù)器:192.168.0.103 主B服務(wù)器:192.168.0.104 主(備) 前端工程師學習 Nginx ...

    syoya 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<