五听怕、負載均衡和會話保持

負載均衡設(shè)備硬件設(shè)備常見:F5

upstream 負載均衡模塊

一、負載均衡算法

算法 upstream 支持4種負載均衡調(diào)度算法
輪詢(默認) 每個請求按時間順序逐一分配到不同的后端服務(wù)器;
ip_hash 每個請求按訪問IP的hash結(jié)果分配虑绵,同一個IP客戶端固定訪問一個后端服務(wù)器尿瞭。可以保證來自同一ip的請求被打到固定的機器上翅睛,可以解決session(會話)問題声搁。
url_hash 按訪問url的hash結(jié)果來分配請求,使每個url定向到同一個后端服務(wù)器捕发。
fair 這是比上面兩個更加智能的負載均衡算法疏旨。此種算法可以依據(jù)頁面大小和加載時間長短智能地進行負載均衡,也就是根據(jù)后端服務(wù)器的響應(yīng)時間來分配請求扎酷,響應(yīng)時間短的優(yōu)先分配檐涝。Nginx本身是不支持 fair的,如果需要使用這種調(diào)度算法法挨,必須下載Nginx的 upstream_fair模塊谁榜。

二、upstream配置

這個配置是寫一組被代理的服務(wù)器地址凡纳,然后配置負載均衡的算法.

1. 輪詢

nginx默認就是輪詢其權(quán)重都默認為1窃植,服務(wù)器處理請求的順序:ABABABABAB

upstream myweb {          #myweb只是一個定義的名字,但是必須和location中指定的 名字一致
      server 10.3.134.2:80;      #/服務(wù)端口
      server 10.3.134.3:80;
    }
 server {
        ....
        location / {         
           proxy_pass  http://myweb;  #upstream myweb 定義的服務(wù)器列表         
        } 

2. 熱備

熱備:如果你有2臺服務(wù)器荐糜,當一臺服務(wù)器發(fā)生事故時巷怜,才啟用第二臺服務(wù)器給提供服務(wù)。服務(wù)器處理請求的順序:AAAAAA突然A掛啦暴氏,BBBBBBBBBBBBBB

upstream myweb {
      server 10.3.134.2:80;
      server 10.3.134.3:80 backup;  #熱備
    }
 server {
        ....
        location / {         
           proxy_pass  http://myweb;         
        } 

3. 加權(quán)輪詢

加權(quán)輪詢:跟據(jù)配置的權(quán)重的大小而分發(fā)給不同服務(wù)器不同數(shù)量的請求延塑。如果不設(shè)置,則默認為1答渔。下面服務(wù)器的請求順序為:ABBABBABBABBABB....

upstream myweb {
      server 10.3.134.2:8080 weight=1;
      server 10.3.134.3:8080 weight=2;     權(quán)重高的先被訪問}
 server {
        ....
        location / {         
           proxy_pass  http://myweb;         
        } 

4. ip_hash

ip_hash:nginx會讓相同的客戶端ip請求相同的服務(wù)器页畦。

upstream myweb {
      server 10.3.134.2:8080;
      server 10.3.134.3:8080;
      ip_hash;
    }
server {
        ....
        location / {         
           proxy_pass  http://myweb;         
        } 

5. 參數(shù)

nginx負載均衡配置狀態(tài)參數(shù)
down 表示當前的server暫時不參與負載均衡。
backup 預(yù)留的備份機器研儒。當其他所有的非backup機器出現(xiàn)故障或者忙的時候豫缨,才會請求backup機器,因此這臺機器的壓力最輕端朵。
max_fails 允許請求失敗的次數(shù)好芭,默認為1。當超過最大次數(shù)時冲呢,返回proxy_next_upstream 模塊定義的錯誤舍败。
fail_timeout 在經(jīng)歷了max_fails次失敗后,暫停服務(wù)的時間單位秒。max_fails可以和fail_timeout一起使用邻薯。
   upstream myweb {
       server 10.3.134.2:8080 weight=2 max_fails=2 fail_timeout=2;
       server 10.3.134.3:8080 weight=1 max_fails=2 fail_timeout=1;
    }

三裙戏、nginx配置7層協(xié)議

舉例講解下什么是7層協(xié)議,什么是4層協(xié)議厕诡。
(1)7層協(xié)議
OSI(Open System Interconnection)是一個開放性的通行系統(tǒng)互連參考模型累榜,他是一個定義的非常好的協(xié)議規(guī)范,共包含七層協(xié)議灵嫌。直接上圖壹罚,這樣更直觀些:


1561624521541.png

準備三臺機器:

代理服務(wù)器IP:10.3.134.2
后端服務(wù)器IP:
nginx-a:10.3.134.98
nginx-b:10.3.134.3

配置代理服務(wù)器的nginx配置文件:

worker_processes  4;

worker_rlimit_nofile 102400;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    upstream testweb {
    server 10.3.134.98:80;
    server 10.3.134.3:80;
     }
    server {
        listen       80;
        server_name  www.test.com;
        charset utf-8;
        #access_log  logs/host.access.log  main;
        location / {
        proxy_pass http://testweb;
         proxy_set_header Host $host:$server_port;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
            }
    }
}

nginx-a

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /duan/html;    #路徑自定義
            index  index.html index.htm;
        }

nginx-b

 server {
        listen       80;
        server_name  localhost;

        location / {
            root   /duan/html;    #路徑自定義
            index  index.html index.htm;
        }

測試訪問10.3.134.2

4層協(xié)議方法(擴展)

(2)4層協(xié)議
TCP/IP協(xié)議
之所以說TCP/IP是一個協(xié)議族,是因為TCP/IP協(xié)議包括TCP寿羞、IP猖凛、UDP、ICMP绪穆、RIP辨泳、TELNETFTP、SMTP玖院、ARP菠红、TFTP等許多協(xié)議,這些協(xié)議一起稱為TCP/IP協(xié)議司恳。

從協(xié)議分層模型方面來講途乃,TCP/IP由四個層次組成:網(wǎng)絡(luò)接口層绍傲、網(wǎng)絡(luò)層扔傅、傳輸層、應(yīng)用層烫饼。


1561624556568.png

nginx在1.9.0的時候猎塞,增加了一個 stream 模塊,用來實現(xiàn)四層協(xié)議(網(wǎng)絡(luò)層和傳輸層)的轉(zhuǎn)發(fā)杠纵、代理荠耽、負載均衡等。stream模塊的用法跟http的用法類似比藻,允許我們配置一組TCP或者UDP等協(xié)議的監(jiān)聽.

負載均衡機器配置

user  nginx;
worker_processes  1;

events {
    worker_connections  1024;
stream {
            upstream myweb {
                hash $remote_addr consistent;     #ip hash
                server 10.3.134.98:80;            #服務(wù)端口,服務(wù)端口改變铝量,配置文件也要改變
                server 10.3.134.3:80;
        }
        server {
            listen 82;      #監(jiān)聽82端口,訪問時要加端口號
            proxy_connect_timeout 10s;
            proxy_timeout 30s;
            proxy_pass myweb;
        }
}

所有七層協(xié)議有關(guān)的配置文件都會報錯

nginx 會話保持

nginx會話保持主要有以下幾種實現(xiàn)方式银亲。
1慢叨、ip_hash

ip_hash使用源地址哈希算法,將同一客戶端的請求總是發(fā)往同一個后端服務(wù)器务蝠,除非該服務(wù)器不可用拍谐。
ip_hash語法:

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
}

ip_hash簡單易用,但有如下問題:

當后端服務(wù)器宕機后,session會丟失轩拨;
來自同一局域網(wǎng)的客戶端會被轉(zhuǎn)發(fā)到同一個后端服務(wù)器践瓷,可能導致負載失衡;

2亡蓉、sticky_cookie_insert

使用sticky_cookie_insert晕翠,這會讓來自同一客戶端的請求被傳遞到一組服務(wù)器的同一臺服務(wù)器。與ip_hash不同之處在于寸宵,它不是基于IP來判斷客戶端的崖面,而是基于cookie來判斷。(需要引入第三方模塊才能實現(xiàn))

sticky模塊

語法:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    sticky_cookie_insert srv_id expires=1h domain=3evip.cn path=/;
}

說明:
expires:設(shè)置瀏覽器中保持cookie的時間
domain:定義cookie的域
path:為cookie定義路徑

使用后端服務(wù)器自身通過相關(guān)機制保持session同步梯影,如:使用數(shù)據(jù)庫巫员、redis、memcached 等做session復(fù)制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甲棍,一起剝皮案震驚了整個濱河市简识,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌感猛,老刑警劉巖七扰,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異陪白,居然都是意外死亡颈走,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門咱士,熙熙樓的掌柜王于貴愁眉苦臉地迎上來立由,“玉大人,你說我怎么就攤上這事序厉∪衲ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵弛房,是天一觀的道長道盏。 經(jīng)常有香客問我,道長文捶,這世上最難降的妖魔是什么荷逞? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮粹排,結(jié)果婚禮上种远,老公的妹妹穿的比我還像新娘。我一直安慰自己恨搓,他們只是感情好院促,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布筏养。 她就那樣靜靜地躺著,像睡著了一般常拓。 火紅的嫁衣襯著肌膚如雪渐溶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天弄抬,我揣著相機與錄音茎辐,去河邊找鬼。 笑死掂恕,一個胖子當著我的面吹牛拖陆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懊亡,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼依啰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了店枣?” 一聲冷哼從身側(cè)響起速警,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸯两,沒想到半個月后闷旧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡钧唐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年忙灼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钝侠。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡该园,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出机错,到底是詐尸還是另有隱情爬范,我是刑警寧澤父腕,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布弱匪,位于F島的核電站,受9級特大地震影響璧亮,放射性物質(zhì)發(fā)生泄漏萧诫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一枝嘶、第九天 我趴在偏房一處隱蔽的房頂上張望帘饶。 院中可真熱鬧,春花似錦群扶、人聲如沸及刻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缴饭。三九已至暑劝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颗搂,已是汗流浹背担猛。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丢氢,地道東北人傅联。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像疚察,于是被迫代替她去往敵國和親蒸走。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

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