Nginx負(fù)載均衡
應(yīng)用情況
Nginx作為負(fù)載均衡主要有以下幾點(diǎn)理由:
- 高并發(fā)連接
- 內(nèi)存消耗少
- 配置文件非常簡(jiǎn)單
- 成本低廉
- 支持Rewrite重寫(xiě)規(guī)則
- 內(nèi)置的健康檢查功能
- 節(jié)省帶寬
- 穩(wěn)定性高
架構(gòu)
上圖為來(lái)自官方的一張總體架構(gòu)圖。
nginx在啟動(dòng)后,會(huì)以daemon的方式在后臺(tái)運(yùn)行碧聪,后臺(tái)進(jìn)程包含一個(gè)master進(jìn)程和多個(gè)worker進(jìn)程节榜。工作進(jìn)程以非特權(quán)用戶運(yùn)行遇西。
master進(jìn)程主要用來(lái)管理worker進(jìn)程棵磷,包含:接收來(lái)自外界的信號(hào)若债,向各worker進(jìn)程發(fā)送信號(hào)澡匪,監(jiān)控worker進(jìn)程的運(yùn)行狀態(tài)熔任,當(dāng)worker進(jìn)程退出后(異常情況下),會(huì)自動(dòng)重新啟動(dòng)新的worker進(jìn)程唁情。
worker進(jìn)程則是處理基本的網(wǎng)絡(luò)事件疑苔。多個(gè)worker進(jìn)程之間是對(duì)等的,他們同等競(jìng)爭(zhēng)來(lái)自客戶端的請(qǐng)求甸鸟,各進(jìn)程互相之間是獨(dú)立的惦费。一個(gè)請(qǐng)求兵迅,只可能在一個(gè)worker進(jìn)程中處理,一個(gè)worker進(jìn)程薪贫,不可能處理其它進(jìn)程的請(qǐng)求恍箭。
開(kāi)發(fā)模型:epoll和kqueue。
支持的事件機(jī)制:kqueue瞧省、epoll扯夭、rt signals、/dev/poll 鞍匾、event ports交洗、select以及poll。
支持的kqueue特性包括EV_CLEAR橡淑、EV_DISABLE构拳、NOTE_LOWAT、EV_EOF梁棠,可用數(shù)據(jù)的數(shù)量置森,錯(cuò)誤代碼.
支持sendfile、sendfile64和sendfilev;文件AIO符糊;DIRECTIO;支持Accept-filters和TCP_DEFER_ACCEP.
性能
Nginx的高并發(fā)凫海,官方測(cè)試支持5萬(wàn)并發(fā)連接。實(shí)際生產(chǎn)環(huán)境能到2-3萬(wàn)并發(fā)連接數(shù)濒蒋。10000個(gè)非活躍的HTTP keep-alive 連接僅占用約2.5MB內(nèi)存盐碱。三萬(wàn)并發(fā)連接下,10個(gè)Nginx進(jìn)程沪伙,消耗內(nèi)存150M瓮顽。淘寶tengine團(tuán)隊(duì)說(shuō)測(cè)試結(jié)果是“24G內(nèi)存機(jī)器上,處理并發(fā)請(qǐng)求可達(dá)200萬(wàn)”围橡。
協(xié)議支持
Nginx工作在網(wǎng)絡(luò)的7層暖混,可以針對(duì)http應(yīng)用本身來(lái)做分流策略。支持七層HTTP翁授、HTTPS協(xié)議的負(fù)載均衡拣播。對(duì)四層協(xié)議的支持需要第三方插件-yaoweibin的ngx_tcp_proxy_module實(shí)現(xiàn)了tcp upstream。
四層負(fù)載均衡和七層負(fù)載均衡
四層:
七層:
nginx實(shí)現(xiàn)的負(fù)載均衡(7層)
配置語(yǔ)法:
syntax: upstream name{...}
default: -
context:http
Upstream舉例:
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.exmple.com:8080 backup;
server backup2.example.com:8080 backup;
}