應(yīng)用服務(wù)器負(fù)載均衡有兩個(gè)步驟:
1.根據(jù)負(fù)載均衡策略選擇真實(shí)服務(wù)端,常見策略有輪詢、加權(quán)輪詢、ip_hash、cookie、url_hash等;
2.把請(qǐng)求轉(zhuǎn)發(fā)到真實(shí)服務(wù)器,轉(zhuǎn)發(fā)方式有二到七層負(fù)載均衡。
請(qǐng)求轉(zhuǎn)發(fā)方式
二層負(fù)載均衡
二層負(fù)載均衡,是指在數(shù)據(jù)鏈路層修改mac地址進(jìn)行負(fù)載均衡。

real server直接響應(yīng)數(shù)據(jù)給client,響應(yīng)過程不經(jīng)過load balance,這種負(fù)載均衡方式呈三角傳輸,也被稱為直接路由模式(DR模式)。
load balance跟real server的ip需要配置成一致,否則請(qǐng)求數(shù)據(jù)包的目標(biāo)地址,與響應(yīng)數(shù)據(jù)包的源地址不一致。
三層負(fù)載均衡
三層負(fù)載均衡,是指在網(wǎng)絡(luò)層修改目標(biāo)ip地址(DNAT協(xié)議)進(jìn)行負(fù)載均衡,實(shí)際上,還用到了SNAT協(xié)議修改源ip地址。
NAT(network address translation, 網(wǎng)絡(luò)地址轉(zhuǎn)換)包含SNAT和DNAT
SNAT修改源地址,DNAT修改目標(biāo)地址

步驟1,client請(qǐng)求load balance的外網(wǎng)ip地址。
步驟2,load balance通過負(fù)載均衡策略選中192.168.1.1為真實(shí)的目標(biāo)服務(wù)器,為了讓請(qǐng)求數(shù)據(jù)包發(fā)到目標(biāo)服務(wù)器,需要修改目標(biāo)ip為192.168.1.1。另外,為了讓目標(biāo)服務(wù)器的響應(yīng)數(shù)據(jù)包能發(fā)回load balance,需要修改源ip為192.168.1.0。
步驟3,目標(biāo)服務(wù)器響應(yīng)數(shù)據(jù),發(fā)給load balance。
步驟4,load balance響應(yīng)數(shù)據(jù)給client,需要修改目標(biāo)ip為client ip,修改源ip為114.100.80.10。
四層負(fù)載均衡
感覺跟三層負(fù)載均衡幾乎一毛一樣,不知道有啥區(qū)別。。。有高人路過求指點(diǎn)
七層負(fù)載均衡
七層負(fù)載均衡,即應(yīng)用層負(fù)載均衡,通常以反向代理的方式實(shí)現(xiàn)(最常見的是nginx)。
client向load balance發(fā)起http請(qǐng)求,load balance向real server發(fā)起http請(qǐng)求,再把real server的響應(yīng)返回給client。

由于需要重發(fā)http請(qǐng)求,七層負(fù)載均衡性能較差,但是更智能和安全,因?yàn)閼?yīng)用層可以獲取甚至修改請(qǐng)求的真實(shí)內(nèi)容(即應(yīng)用數(shù)據(jù)),比如cookie、url等,可以做一些智能的操作,比如根據(jù)cookie/url轉(zhuǎn)發(fā)請(qǐng)求,也可以做一些安全操作,比如過濾特定報(bào)文、防止SYN Flood攻擊等。
負(fù)載均衡策略
常見的負(fù)載均衡策略,有輪詢、加權(quán)輪詢、ip_hash、cookie、url_hash,根據(jù)服務(wù)器響應(yīng)時(shí)間轉(zhuǎn)發(fā)、根據(jù)最少連接轉(zhuǎn)發(fā)等等。
nginx可以安裝第三方插件,使用第三方實(shí)現(xiàn)的策略
輪詢:按服務(wù)器列表順序轉(zhuǎn)發(fā)請(qǐng)求,輪詢是nginx默認(rèn)的策略,本策略適合服務(wù)器配置相當(dāng)、請(qǐng)求無狀態(tài)(即不依賴session)的場(chǎng)景
加權(quán)輪詢:如果不同服務(wù)器配置不同,可以為配置高的服務(wù)器增加權(quán)重
ip_hash:根據(jù)ip哈希結(jié)果轉(zhuǎn)發(fā),可以實(shí)現(xiàn)同一用戶持續(xù)請(qǐng)求同一服務(wù)器(即會(huì)話保持),適合有狀態(tài)(即依賴session)的場(chǎng)景,對(duì)png、jpg、js、css等靜態(tài)資源的請(qǐng)求,不適合使用本策略
cookie:根據(jù)特定cookie轉(zhuǎn)發(fā)請(qǐng)求,一般也是用于實(shí)現(xiàn)會(huì)話保持,比如第一次請(qǐng)求時(shí),為服務(wù)器A、B分別種上service-flag=a、service-flag=b的cookie,后續(xù)請(qǐng)求根據(jù)cookie轉(zhuǎn)發(fā)
url_hash:根據(jù)url哈希結(jié)果轉(zhuǎn)發(fā),同一個(gè)接口始終請(qǐng)求同一臺(tái)服務(wù)器,一般配合緩存使用,可以提高緩存命中率
根據(jù)服務(wù)器響應(yīng)時(shí)間轉(zhuǎn)發(fā):優(yōu)先轉(zhuǎn)發(fā)到響應(yīng)時(shí)間較快的服務(wù)器
根據(jù)最少連接轉(zhuǎn)發(fā):優(yōu)先轉(zhuǎn)發(fā)到連接數(shù)較少的服務(wù)器