負(fù)載均衡 - nginx基本配置與分發(fā)策略

[TOC]

1 為什么叫反向代理衡奥?

關(guān)于反向代理和正向代理的概念,貼出知乎上面的一個(gè)回答,個(gè)人覺得還是很形象的蛾狗。
https://www.zhihu.com/question/24723688

正向代理座菠,被代理對(duì)象是客戶端狸眼,服務(wù)端不知道客戶端是誰(shuí),只知道代理對(duì)象.

反向代理浴滴,被代理對(duì)象是服務(wù)端拓萌,客戶端不知道服務(wù)端是誰(shuí),只知道代理對(duì)象

2 Nginx如何處理請(qǐng)求

2.1 基于域名的虛擬主機(jī)

server {
    listen      80;
    server_name example.org www.example.org;
    ...
}

server {
    listen      80;
    server_name example.net www.example.net;
    ...
}

server {
    listen      80;
    server_name example.com www.example.com;
    ...
}

如上面的配置升略,就是使用基于域名的配置微王,請(qǐng)求會(huì)對(duì)應(yīng)到對(duì)應(yīng)server_name的主機(jī)上面,如果沒有匹配的主機(jī)品嚣,這個(gè)時(shí)候nginx會(huì)默認(rèn)把第一當(dāng)做默認(rèn)處理主機(jī)炕倘,當(dāng)然也可以使用如下配置(default_server)指定默認(rèn)處理主機(jī):

server {
    listen      80 default_server;
    server_name example.net www.example.net;
    ...
}

2.2 基于域名和IP的虛擬主機(jī)

接下來(lái)看看不同主機(jī)listen on 不同的IP地址

server {
    listen      192.168.1.1:80;
    server_name example.org www.example.org;
    ...
}

server {
    listen      192.168.1.1:80;
    server_name example.net www.example.net;
    ...
}

server {
    listen      192.168.1.2:80;
    server_name example.com www.example.com;
    ...
}

對(duì)于這種情況,Nginx會(huì)先檢測(cè)IP和端口翰撑,再去檢測(cè)server_name是否匹配罩旋,如果IP匹配了,但是server_name 沒有匹配眶诈,就是使用當(dāng)前匹配的ip+port的default_server 瘸恼,如果沒有配置default_server就是默認(rèn)使用第一個(gè)作為default_server.

關(guān)于server_name的幾種形式

  1. 字符串或者IP地址
  2. 通配符,*
  3. 正則表達(dá)式
  4. 多個(gè)一起組合而成(上例中server_name每個(gè)配置了多個(gè)name)
  5. 一些特殊字符册养,例如: "","-","--"等

3 負(fù)載均衡(load balance)

3.1 負(fù)載均衡算法(Load balancing methods)

使用Nginx作為http負(fù)載均衡實(shí)現(xiàn)东帅。Nginx負(fù)載均衡算法有如下幾種:

  1. Round-Robin,輪詢調(diào)度算法球拦,當(dāng)配置未指明的時(shí)候靠闭,默認(rèn)就是輪詢算法
  2. least-connected,下一次鏈接將被鏈接到活躍鏈接最少的機(jī)器上
  3. ip-hash坎炼,利用IP地址哈希進(jìn)行分配
  4. weight-balancing愧膀,按照權(quán)重分配

需要說(shuō)明的是,很多時(shí)候谣光,weight-balancing都是和least-connected或者ip-hash算法一起使用檩淋,在官方文檔中,都沒有把他算做load balancing methods中的一種萄金。

3.2 常見配置示例

  1. 最常見的配置,默認(rèn)輪詢算法
http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://myapp1;
        }
    }
}
  1. 使用least-connected
upstream myapp1 {
    least_conn;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}
  1. 使用ip-hash算法
upstream myapp1 {
    ip_hash;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}
  1. 權(quán)重分配
upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
        server srv3.example.com;
    }

此種配置蟀悦,srv1占比3/5,srv2,srv3分別占比 1/5

4 關(guān)于健康檢查

簡(jiǎn)單的服務(wù)端示例健康檢查,使用server配置上面的fail_timeout配置氧敢,設(shè)置失敗時(shí)間日戈,在設(shè)置時(shí)間內(nèi)沒回應(yīng),Nginx就會(huì)用不斷的起嘗試孙乖,如果可行就標(biāo)記服務(wù)為live浙炼。如果客戶端返回錯(cuò)誤份氧,Nginx就會(huì)標(biāo)記這個(gè)節(jié)點(diǎn)為failed,然后避免轉(zhuǎn)發(fā)請(qǐng)求到這個(gè)節(jié)點(diǎn)弯屈。

關(guān)于健康監(jiān)測(cè)蜗帜,在后續(xù)總結(jié)中會(huì)有專門的分析使用。

5 ngx_http_upstream_module

更多時(shí)候我們配置都是這個(gè)模塊的一些配置资厉,下面簡(jiǎn)單總結(jié)下此模塊的配置說(shuō)明

先提供一個(gè)示例:

upstream backend {
    server backend1.example.com       weight=5;
    server backend2.example.com:8080;
    server unix:/tmp/backend3;

    server backup1.example.com:8080   backup;
    server backup2.example.com:8080   backup;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

http模塊中比較重要的幾個(gè)節(jié)點(diǎn)

upstream name {....}

在upstream中常見的節(jié)點(diǎn)有 server厅缺,ip_hash,keepalive酌住,least_conn,least_time

分別介紹下這幾個(gè)節(jié)點(diǎn)

5.1 upstream-->server

Syntax: server address [parameters];
Default:    —
Context:    upstream

server的上下文為upstream店归,后面server地址和配置參數(shù)阎抒,如:server 192.168.0.100 weight=10 max_fails=3 fail_timeout=5

分別介紹下可選的幾個(gè)參數(shù)的含義:

  1. weight=number: 之前說(shuō)過(guò)的酪我,配置主機(jī)的權(quán)重,配合負(fù)載均衡算法
  2. max_conns=number: 同時(shí)生效的鏈接數(shù)上線且叁,默認(rèn)為0都哭,表示不限制。如果server group不在共享內(nèi)存中逞带,則次值按每個(gè) worker process 來(lái)工作
  3. fail_timeout=number: 1.在指定時(shí)間內(nèi)超時(shí)欺矫,任務(wù)服務(wù)不可達(dá)時(shí)候嘗試超時(shí)時(shí)間。2.判斷服務(wù)不可用時(shí)間展氓。默認(rèn)時(shí)間為10s.
  4. max_fails=number:配合fail_timeout穆趴,做大的嘗試次數(shù),默認(rèn)值為1遇汞,設(shè)置為0表示不統(tǒng)計(jì)嘗試次數(shù)未妹。
  5. backup:設(shè)置當(dāng)前server 為備份機(jī)器,放主機(jī)器不可達(dá)的時(shí)候空入,請(qǐng)求會(huì)傳遞過(guò)來(lái)
  6. down:標(biāo)記當(dāng)前節(jié)點(diǎn)宕機(jī)
  7. resolve:指明解析的IP络它,要使用resolve ,需要先在http幾點(diǎn)下面配置resolver,例如:
http {
    resolver 10.0.0.1;

    upstream u {
        zone ...;
        ...
        server example.com resolve;
    }
}
  1. route:設(shè)置服務(wù)路由名稱
  2. service:?jiǎn)⒂肈NS解析SRV歪赢,并設(shè)置service名稱
  3. slow_start:設(shè)置多久之后化戳,server回復(fù)自己的權(quán)重值,設(shè)置server從不可達(dá)到健康之后多久認(rèn)為是可用埋凯。次配置不能用在upstream 為 hash 或者ip_hash的算法中点楼。當(dāng)server Group 中只有一個(gè)server的時(shí)候,max_fails白对、 fail_timeout 盟步、slow_start都會(huì)被忽略。

5.2 upstream-->hash/ip_hash

hash key [consistent]; 使用key值來(lái)做hash負(fù)載均衡躏结,一旦添加個(gè)刪除機(jī)器却盘,需要重新做hash狰域,負(fù)載后的路徑可坑改變

ip_hash; 在upstream 中啟用按照IP進(jìn)行hash的分配策略

5.3 upstream-->keepalive

keepalive 激活服務(wù)器到upstream的緩存,設(shè)置上限的話黄橘,設(shè)置鏈接緩存的最大數(shù)量兆览,如果超出數(shù)量,最少使用的鏈接就會(huì)被關(guān)閉塞关。

例如:

upstream memcached_backend {
    server 127.0.0.1:11211;
    server 10.0.0.2:11211;

    keepalive 32;
}

5.4 upstream-->least_conn/least_time

least_conn: 使用least_conn 的負(fù)載均衡方式,找到鏈接最少的機(jī)器處理抬探,并且結(jié)合權(quán)重來(lái)處理,如果有多臺(tái)候選機(jī)器的話帆赢,會(huì)接著使用輪詢的方式小压。

least_time: 找到平均響應(yīng)時(shí)間最少并且連接數(shù)最少的機(jī)器,并結(jié)合權(quán)重椰于,如何有多臺(tái)候選機(jī)器的話怠益,會(huì)接著使用輪詢的方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘾婿,一起剝皮案震驚了整個(gè)濱河市蜻牢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偏陪,老刑警劉巖抢呆,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異笛谦,居然都是意外死亡抱虐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門饥脑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恳邀,“玉大人,你說(shuō)我怎么就攤上這事好啰⌒ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵框往,是天一觀的道長(zhǎng)鳄抒。 經(jīng)常有香客問我,道長(zhǎng)椰弊,這世上最難降的妖魔是什么许溅? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮秉版,結(jié)果婚禮上贤重,老公的妹妹穿的比我還像新娘。我一直安慰自己清焕,他們只是感情好并蝗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布祭犯。 她就那樣靜靜地躺著,像睡著了一般滚停。 火紅的嫁衣襯著肌膚如雪沃粗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天键畴,我揣著相機(jī)與錄音最盅,去河邊找鬼。 笑死起惕,一個(gè)胖子當(dāng)著我的面吹牛涡贱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惹想,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼问词,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了勺馆?” 一聲冷哼從身側(cè)響起戏售,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤侨核,失蹤者是張志新(化名)和其女友劉穎草穆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搓译,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悲柱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了些己。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豌鸡。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖段标,靈堂內(nèi)的尸體忽然破棺而出涯冠,到底是詐尸還是另有隱情,我是刑警寧澤逼庞,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布蛇更,位于F島的核電站,受9級(jí)特大地震影響赛糟,放射性物質(zhì)發(fā)生泄漏派任。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一璧南、第九天 我趴在偏房一處隱蔽的房頂上張望掌逛。 院中可真熱鬧,春花似錦司倚、人聲如沸豆混。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)皿伺。三九已至遗淳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間心傀,已是汗流浹背屈暗。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脂男,地道東北人养叛。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宰翅,于是被迫代替她去往敵國(guó)和親弃甥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第一章 Nginx簡(jiǎn)介 Nginx是什么 沒有聽過(guò)Nginx汁讼?那么一定聽過(guò)它的“同行”Apache吧淆攻!Ngi...
    JokerW閱讀 32,688評(píng)論 24 1,002
  • 《老男孩Linux運(yùn)維》Nginx Documentation 集群簡(jiǎn)介 集群就是指一組(若干)相互獨(dú)立的計(jì)算機(jī),...
    Zhang21閱讀 3,401評(píng)論 0 51
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理嘿架,服務(wù)發(fā)現(xiàn)瓶珊,斷路器,智...
    卡卡羅2017閱讀 134,661評(píng)論 18 139
  • 以下內(nèi)容來(lái)自官方文檔 http://nginx.org/en/docs/http/ngx_http_upstrea...
    再回到從前閱讀 2,684評(píng)論 0 1
  • Nginx簡(jiǎn)介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請(qǐng)求時(shí)即使無(wú)狀態(tài)連接如web服務(wù)都無(wú)法達(dá)到并發(fā)響應(yīng)量級(jí)一萬(wàn)的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,005評(píng)論 0 9