編程學(xué)習(xí)網(wǎng) > 數(shù)據(jù)庫 > SQL Server > 負(fù)載均衡,你該如何配置?
2020
04-02

負(fù)載均衡,你該如何配置?



什么是負(fù)載均衡


在計(jì)算機(jī)的世界,這就是大家耳熟能詳?shù)呢?fù)載均衡(load balancing),所謂負(fù)載均衡,就是說如果一組計(jì)算機(jī)節(jié)點(diǎn)(或者一組進(jìn)程)提供相同的(同質(zhì)的)服務(wù),那么對(duì)服務(wù)的請(qǐng)求就應(yīng)該均勻的分?jǐn)偟竭@些節(jié)點(diǎn)上。

 

這里的服務(wù)是廣義的,可以是簡單的計(jì)算,也可能是數(shù)據(jù)的讀取或者存儲(chǔ)。負(fù)載均衡也不是新事物,這種思想在多核CPU時(shí)代就有了,只不過在分布式系統(tǒng)中,負(fù)載均衡更是無處不在,這是分布式系統(tǒng)的天然特性決定的,分布式就是利用大量計(jì)算機(jī)節(jié)點(diǎn)完成單個(gè)計(jì)算機(jī)無法完成的計(jì)算、存儲(chǔ)服務(wù),既然有大量計(jì)算機(jī)節(jié)點(diǎn),那么均衡的調(diào)度就非常重要。

 

負(fù)載均衡的意義在于,讓所有節(jié)點(diǎn)以最小的代價(jià)、最好的狀態(tài)對(duì)外提供服務(wù),這樣系統(tǒng)吞吐量最大,性能更高,對(duì)于用戶而言請(qǐng)求的時(shí)間也更小。而且,負(fù)載均衡增強(qiáng)了系統(tǒng)的可靠性,最大化降低了單個(gè)節(jié)點(diǎn)過載、甚至crash的概率。


不難想象,如果一個(gè)系統(tǒng)絕大部分請(qǐng)求都落在同一個(gè)節(jié)點(diǎn)上,那么這些請(qǐng)求響應(yīng)時(shí)間都很慢,而且萬一節(jié)點(diǎn)降級(jí)或者崩潰,那么所有請(qǐng)求又會(huì)轉(zhuǎn)移到下一個(gè)節(jié)點(diǎn),造成雪崩。


attachments-2020-04-3Shdx4mc5e85409261435.jpg


 

如何實(shí)現(xiàn)負(fù)載均衡


回答可以如下:

在nginx里面配置一個(gè)upstream,然后把相關(guān)的服務(wù)器ip都配置進(jìn)去。然后采用輪詢的方案,然后在nginx里面的配置項(xiàng)里,proxy-pass指向這個(gè)upstream,這樣就能實(shí)現(xiàn)負(fù)載均衡。

 

nginx的負(fù)載均衡有4種模式:


1)、輪詢(默認(rèn))

每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。

 

2)、weight

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

 

3)、ip_hash

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

 

4)、fair , url_hash(第三方)

按后端服務(wù)器的響應(yīng)時(shí)間來分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。

 

負(fù)載均衡配置方法


打開nginx.conf文件,在http節(jié)點(diǎn)下添加upstream節(jié)點(diǎn):

upstream webname {  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080;  
}  

其中webname是自己取的名字,最后會(huì)通過這個(gè)名字在url里訪問的,像上面這個(gè)例子一樣什么都不加就是默認(rèn)的輪詢,第一個(gè)請(qǐng)求過來訪問第一個(gè)server,第二個(gè)請(qǐng)求來訪問第二個(gè)server。依次輪著來。

upstream webname {  
  server 192.168.0.1:8080 weight 2;  
  server 192.168.0.2:8080 weight 1;  
}  

這個(gè)weight也很好理解,權(quán)重大的被訪問的概率就大,上面這個(gè)例子的話,訪問2次server1,訪問一次server2

upstream webname {  
  ip_hash;  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080;  
}   

ip_hash的配置也很簡單,直接加一行就可以了,這樣只要是同一個(gè)ip過來的都會(huì)到同一臺(tái)server上。然后在server節(jié)點(diǎn)下進(jìn)行配置:

location /name {  
    proxy_pass http://webname/name/;  
    proxy_http_version 1.1;  
    proxy_set_header Upgrade $http_upgrade;  
    proxy_set_header Connection "upgrade";  
}  

proxy_pass里面用上面配的webname代替了原來的ip地址。

這樣就基本完成了負(fù)載均衡的配置。

 

下面是主備的配置:

還是在upstream里面

upstream webname {  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080 backup;  
} 

設(shè)置某一個(gè)節(jié)點(diǎn)為backup,那么一般情況下所有請(qǐng)求都訪問server1,當(dāng)server1掛掉或者忙的的時(shí)候才會(huì)訪問server2

upstream webname {  
  server 192.168.0.1:8080;  
  server 192.168.0.2:8080 down;  
}  

設(shè)置某個(gè)節(jié)點(diǎn)為down,那么這個(gè)server不參與負(fù)載。

 

實(shí)現(xiàn)實(shí)例


1 測(cè)試環(huán)境

由于沒有服務(wù)器,所以本次測(cè)試直接host指定域名,然后在VMware里安裝了三臺(tái)CentOS。

 

  • 測(cè)試域名 :http://a.com

  • A服務(wù)器IP :192.168.5.149 (主)

  • B服務(wù)器IP :192.168.5.27

  • C服務(wù)器IP :192.168.5.126

 

2 部署思路

A服務(wù)器做為主服務(wù)器,域名直接解析到A服務(wù)器(192.168.5.149)上,由A服務(wù)器負(fù)載均衡到B服務(wù)器(192.168.5.27)與C服務(wù)器(192.168.5.126)上。

 

3 域名解析

由于不是真實(shí)環(huán)境,域名就隨便使用一個(gè)http://a.com用作測(cè)試,所以http://a.com的解析只能在hosts文件設(shè)置。

打開:C:Windows\System32\drivers\etc\hosts

在末尾添加

192.168.5.149    a.com 

保存退出,然后啟動(dòng)命令模式ping下看看是否已設(shè)置成功

 

A、服務(wù)器nginx.conf設(shè)置

打開nginx.conf,文件位置在nginx安裝目錄的conf目錄下。

在http段加入以下代碼

upstream a.com { 
      server  192.168.5.126:80; 
      server  192.168.5.27:80; 
} 

server{ 
    listen 80; 
    server_name a.com; 
    location / { 
        proxy_pass        http://a.com; 
        proxy_set_header  Host            $host; 
        proxy_set_header  X-Real-IP        $remote_addr; 
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for; 
    } 
}

保存重啟nginx

 

B、C服務(wù)器nginx.conf設(shè)置

打開nginx.conf,在http段加入以下代碼

server{ 
    listen 80; 
    server_name a.com; 
    index index.html; 
    root /data0/htdocs/www; 
}

保存重啟nginx

 

測(cè)試

當(dāng)訪問a.com的時(shí)候,為了區(qū)分是轉(zhuǎn)向哪臺(tái)服務(wù)器處理我分別在B、C服務(wù)器下寫一個(gè)不同內(nèi)容的index.html文件,以作區(qū)分。

打開瀏覽器訪問a.com結(jié)果,刷新會(huì)發(fā)現(xiàn)所有的請(qǐng)求,均分別被主服務(wù)器(192.168.5.149)分配到B服務(wù)器(192.168.5.27)與C服務(wù)器(192.168.5.126)上,實(shí)現(xiàn)了負(fù)載均衡效果。


attachments-2020-04-QcZ1kbAh5e85431571c38.jpg


掃碼二維碼 獲取免費(fèi)視頻學(xué)習(xí)資料

Python編程學(xué)習(xí)

查 看2022高級(jí)編程視頻教程免費(fèi)獲取