自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Nginx 部署負(fù)載均衡服務(wù)全解析

開(kāi)發(fā) 前端
輪詢(xún)是 Nginx 默認(rèn)的負(fù)載均衡策略,它將客戶(hù)端的請(qǐng)求按順序輪流分配到后端服務(wù)器上。如果后端服務(wù)器宕機(jī),Nginx 會(huì)自動(dòng)將其剔除出隊(duì)列,直到該服務(wù)器恢復(fù)正常。

關(guān)于 Nginx 的配置,松哥之前寫(xiě)過(guò)好幾篇文章和小伙伴們分享了,不過(guò)大部分都是基于全局視角去配置的,今天我們就單純來(lái)聊一聊用 Nginx 做負(fù)載均衡的配置。

一 什么是負(fù)載均衡

負(fù)載均衡(Load Balancing)是一種計(jì)算機(jī)網(wǎng)絡(luò)技術(shù),用于將網(wǎng)絡(luò)流量或請(qǐng)求分發(fā)到多個(gè)服務(wù)器上,以?xún)?yōu)化資源使用、最大化吞吐量、最小化響應(yīng)時(shí)間,并避免任何單一點(diǎn)過(guò)載。負(fù)載均衡的目的是確保我們的 Web 應(yīng)用的高可用性和可靠性,同時(shí)提高用戶(hù)體驗(yàn)。

圖片圖片

一般來(lái)說(shuō),我們可能會(huì)在如下場(chǎng)景中用到負(fù)載均衡:

  • 服務(wù)器負(fù)載均衡:在多個(gè)服務(wù)器之間分配網(wǎng)絡(luò)流量,以防止任何單個(gè)服務(wù)器因請(qǐng)求過(guò)多而性能下降。
  • 數(shù)據(jù)中心負(fù)載均衡:在數(shù)據(jù)中心的不同位置或不同數(shù)據(jù)中心之間分配流量,以?xún)?yōu)化資源利用和提高可靠性。
  • 云服務(wù)負(fù)載均衡:在云環(huán)境中,負(fù)載均衡可以跨多個(gè)虛擬機(jī)或容器服務(wù)分配流量。

雖然我們平時(shí)做負(fù)載均衡基本上都是 Nginx,但是考慮到文章內(nèi)容的完整性,松哥還是和大家說(shuō)一說(shuō)負(fù)載均衡這事可以在不同的網(wǎng)絡(luò)層面實(shí)行,比如:

  • DNS 負(fù)載均衡:通過(guò) DNS 服務(wù)將域名解析成不同的 IP 地址,將流量分散到不同的服務(wù)器上。
  • 硬件負(fù)載均衡:使用專(zhuān)門(mén)的硬件設(shè)備(如 F5 BIG-IP)來(lái)分配流量。
  • 軟件負(fù)載均衡:使用軟件解決方案(如 Nginx、HAProxy)來(lái)實(shí)現(xiàn)負(fù)載均衡。
  • 應(yīng)用層負(fù)載均衡:在應(yīng)用層(如 HTTP/HTTPS)分配請(qǐng)求到不同的服務(wù)器。
  • 傳輸層負(fù)載均衡:在傳輸層(如 TCP/UDP)分配連接到不同的服務(wù)器。

二 常見(jiàn)負(fù)載均衡算法

無(wú)論你使用哪種工具,在哪進(jìn)行負(fù)載均衡,常見(jiàn)的負(fù)載均衡算法主要是下面這幾種:

  • 輪詢(xún)(Round Robin):將請(qǐng)求輪流分配給每臺(tái)服務(wù)器。
  • 最少連接(Least Connections):將請(qǐng)求分配給當(dāng)前連接數(shù)最少的服務(wù)器。
  • 加權(quán)輪詢(xún)(Weighted Round Robin):根據(jù)服務(wù)器的性能權(quán)重來(lái)分配請(qǐng)求。
  • 加權(quán)最少連接(Weighted Least Connections):根據(jù)服務(wù)器的性能權(quán)重和當(dāng)前連接數(shù)來(lái)分配請(qǐng)求。
  • IP 哈希(IP Hash):根據(jù)客戶(hù)端 IP 地址的哈希值來(lái)分配請(qǐng)求,以保證來(lái)自同一 IP 的請(qǐng)求總是被分配到同一臺(tái)服務(wù)器上。

三 Nginx 配置

3.1 輪詢(xún)(Round Robin)

輪詢(xún)是 Nginx 默認(rèn)的負(fù)載均衡策略,它將客戶(hù)端的請(qǐng)求按順序輪流分配到后端服務(wù)器上。如果后端服務(wù)器宕機(jī),Nginx 會(huì)自動(dòng)將其剔除出隊(duì)列,直到該服務(wù)器恢復(fù)正常。

舉個(gè)栗子:

upstream backend {  
    server backend1.example.com;  
    server backend2.example.com;  
    server backend3.example.com;  
}  
  
server {  
    ...  
    location / {  
        proxy_pass http://backend;  
    }  
    ...  
}

在上面的配置中,Nginx 會(huì)將請(qǐng)求依次分配給 backend1、backend2 和 backend3,循環(huán)往復(fù)。

3.2 加權(quán)輪詢(xún)

加權(quán)輪詢(xún)策略允許你為后端服務(wù)器分配不同的權(quán)重,權(quán)重越高的服務(wù)器將接收更多的請(qǐng)求。這可以根據(jù)服務(wù)器的硬件配置、處理能力等因素進(jìn)行靈活配置。

http {  
    upstream myapp1 {  # 定義一個(gè)名為myapp1的服務(wù)器組  
        server backend1.example.com weight=5;  # 添加一個(gè)服務(wù)器,并設(shè)置權(quán)重為5  
        server backend2.example.com;  # 添加另一個(gè)服務(wù)器,權(quán)重默認(rèn)為1  
        server backend3.example.com down;  # 將此服務(wù)器標(biāo)記為down,不參與負(fù)載均衡  
        server backup1.example.com backup;  # 將此服務(wù)器作為備份服務(wù)器  
    }  
  
    server {  
        listen 80;  # 監(jiān)聽(tīng)80端口  
  
        location / {  # 匹配所有請(qǐng)求  
            proxy_pass http://myapp1;  # 將請(qǐng)求轉(zhuǎn)發(fā)到myapp1服務(wù)器組  
            proxy_set_header Host $host;  # 設(shè)置請(qǐng)求頭中的Host字段為原始請(qǐng)求的Host  
            proxy_set_header X-Real-IP $remote_addr;  # 設(shè)置請(qǐng)求頭中的X-Real-IP字段為客戶(hù)端的真實(shí)IP地址  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 設(shè)置請(qǐng)求頭中的X-Forwarded-For字段,以記錄原始請(qǐng)求和代理鏈的IP地址  
            proxy_set_header X-Forwarded-Proto $scheme;  # 設(shè)置請(qǐng)求頭中的X-Forwarded-Proto字段為原始請(qǐng)求的協(xié)議(http或https)  
        }  
    }  
}

上面的負(fù)載均衡策略是權(quán)重,除了權(quán)重之外,還有輪詢(xún)以及 ip_hash 等。

3.3 IP 哈希(IP Hash)

IP 哈希策略根據(jù)客戶(hù)端的 IP 地址進(jìn)行哈希運(yùn)算,將相同的請(qǐng)求分配給同一個(gè)后端服務(wù)器。

這種策略適用于需要保持會(huì)話(huà)(Session)的場(chǎng)景,因?yàn)橥粋€(gè)客戶(hù)端的請(qǐng)求會(huì)被發(fā)送到同一個(gè)服務(wù)器,從而避免了會(huì)話(huà)信息的丟失。

upstream backend {  
    ip_hash;  
    server backend1.example.com;  
    server backend2.example.com;  
    server backend3.example.com;  
}  
  
server {  
    ...  
    location / {  
        proxy_pass http://backend;  
    }  
    ...  
}

在上面的配置中,Nginx 會(huì)根據(jù)客戶(hù)端的 IP 地址進(jìn)行哈希運(yùn)算,然后將請(qǐng)求分配到對(duì)應(yīng)的后端服務(wù)器。

3.4 最少連接(Least Connections)

最少連接策略將新的請(qǐng)求分配給當(dāng)前連接數(shù)最少的后端服務(wù)器。這種策略可以確保每個(gè)后端服務(wù)器的負(fù)載相對(duì)均衡,避免某個(gè)服務(wù)器過(guò)載而其他服務(wù)器空閑的情況。

注意:Nginx 原生的 Stream 模塊支持最少連接,但在 HTTP 模塊中通常需要借助第三方插件或腳本實(shí)現(xiàn)。

對(duì)于 HTTP 模塊,可以通過(guò)第三方插件如 ngx_http_upstream_fair_module 或編寫(xiě) Lua 腳本來(lái)實(shí)現(xiàn)類(lèi)似的功能。

但在 Stream 模塊中,可以直接配置,下面是一個(gè) Stream 中配置的例子:

upstream backend {  
    least_conn;  
    server backend1.example.com;  
    server backend2.example.com;  
    server backend3.example.com;  
}  
  
stream {  
    server {  
        listen 12345;  
        proxy_pass backend;  
    }  
}

3.5 健康檢查

在 Nginx 中配置負(fù)載均衡的健康檢查,可以通過(guò)主動(dòng)健康檢查(Active Health Checks)和被動(dòng)健康檢查(Passive Health Checks)兩種方式來(lái)實(shí)現(xiàn)。

主動(dòng)健康檢查

主動(dòng)健康檢查是定期向上游服務(wù)器發(fā)送請(qǐng)求以檢查其健康狀況,如果上游服務(wù)器未能正確響應(yīng),Nginx 將認(rèn)為該服務(wù)器不健康,并停止向其發(fā)送流量,直到服務(wù)器恢復(fù)健康。

配置方式如下:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD /health HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }
    server {
        location / {
            proxy_pass http://backend;
        }
    }
}

在這個(gè)配置中,Nginx 將每隔 3 秒(interval=3000)向 /health 端點(diǎn)發(fā)送一個(gè) HEAD 請(qǐng)求。如果服務(wù)器連續(xù)兩次返回 2xx 或 3xx 的 HTTP 狀態(tài)碼(rise=2),則認(rèn)為服務(wù)器是健康的。如果服務(wù)器連續(xù)五次未能正確響應(yīng)(fall=5),則認(rèn)為服務(wù)器不健康。

被動(dòng)健康檢查

被動(dòng)健康檢查基于實(shí)時(shí)流量分析,Nginx 根據(jù)后端服務(wù)器的響應(yīng)來(lái)判斷其健康狀況。如果服務(wù)器返回特定的錯(cuò)誤狀態(tài)碼,Nginx 將認(rèn)為該服務(wù)器不健康,并在一段時(shí)間內(nèi)不再將請(qǐng)求發(fā)送到該服務(wù)器。

配置方式如下:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com max_fails=2 fail_timeout=30s;
    }
    server {
        listen 80;
        location / {
            proxy_pass backend;
            proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
        }
    }
}

在這個(gè)配置中,如果后端服務(wù)器在 30 秒內(nèi)連續(xù)兩次(max_fails=2)未能正確響應(yīng),它將被臨時(shí)從服務(wù)器池中移除。proxy_next_upstream 指令指定了哪些錯(cuò)誤應(yīng)該觸發(fā)使用不同的服務(wù)器進(jìn)行重試。

責(zé)任編輯:武曉燕 來(lái)源: 江南一點(diǎn)雨
相關(guān)推薦

2012-07-31 09:25:42

nginx負(fù)載均衡反向代理

2017-11-09 10:42:11

Nginx負(fù)載均衡策略

2015-06-05 11:26:58

nginx運(yùn)維

2013-04-22 11:29:14

Nginx

2023-01-10 08:37:45

Docker開(kāi)發(fā)架構(gòu)

2019-07-09 15:10:02

Nginx反向代理負(fù)載均衡

2010-04-20 11:51:31

負(fù)載均衡

2019-12-24 14:28:00

KeepalivedNginxTomcat

2022-12-20 08:01:20

全棧云負(fù)載均衡傳統(tǒng)硬件

2019-03-27 08:43:17

Nginx負(fù)載均衡服務(wù)器

2018-10-26 09:52:25

Nginx服務(wù)器負(fù)載均衡

2010-04-22 18:27:37

Apache負(fù)載均衡

2019-03-18 10:44:41

負(fù)載均衡DNSUDP

2022-12-27 07:42:12

2010-11-19 12:53:53

梭子魚(yú)負(fù)載均衡

2011-12-02 22:51:46

Nginx負(fù)載均衡

2024-11-14 09:10:13

消費(fèi)者RocketMQ負(fù)載均衡

2023-10-08 07:15:54

NGINX網(wǎng)關(guān)參數(shù)

2012-04-02 15:43:45

nginxtomcat

2010-05-06 10:01:26

nginx負(fù)載均衡
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)