nginx集群詳解

今天介紹以下nginx集群方面的知識,先了解下傳統(tǒng)的web訪問模型吧,上圖


nginx

? 1 部署?臺備份服務(wù)器,宕機(jī)直接切換
? 2 部署多臺服務(wù)器,根據(jù)DNS的輪詢解析機(jī)制去實(shí)現(xiàn)?戶分發(fā)
問題:
1?案:服務(wù)器利?率低,成本?,切換不及時,服務(wù)器壓?依然?
2?案: 優(yōu)勢是?戶處理速度得到了提升,但是當(dāng)其中?臺故障,就會有?部分?戶訪問不了?站

并?處理解決?案
? 1上述的DNS輪詢解析?案
? 2 多機(jī)陣列---集群模式


image.png

那么啥是集群了???
將多個物理機(jī)器組成?個邏輯計算機(jī),實(shí)現(xiàn)負(fù)載均衡和容錯
? 計算機(jī)集群簡稱集群,是?種計算機(jī)系統(tǒng), 它通過?組松散集成的計算機(jī)軟件或硬件連接起來?度緊密地協(xié)作完成計算?作。在某種意義上,他們可以被看作是?臺計算機(jī)。 (百度解釋) ? 組成要素

1)VIP: ?個IP地址
2)分發(fā)器: nginx
3)數(shù)據(jù)服務(wù)器: Web服務(wù)器

Nginx集群

在該集群中Nginx扮演的??是: 分發(fā)器
? 任務(wù):接受請求、分發(fā)請求、響應(yīng)請求
? 功能模塊:
1:ngx_http_upstream_module 基于應(yīng)?層分發(fā)模塊
2:ngx_stream_core_module 基于傳輸層分發(fā)模塊 (1.9開始提供)

Nginx集群原理
? Nginx集群其實(shí)是:虛擬主機(jī)+反向代理+upstream分發(fā)模塊組成的
虛擬主機(jī):接受和響應(yīng)請求
反向代理: 帶?戶去數(shù)據(jù)服務(wù)器拿數(shù)據(jù)
upstream: 告訴Nginx去哪個數(shù)據(jù)服務(wù)器拿數(shù)據(jù)

? 數(shù)據(jù)?向
1.虛擬主機(jī)接受?戶請求
2.虛擬主機(jī)去找反向代理
3.反向代理讓去找upstream
4.upstream 告訴 ?個數(shù)據(jù)服務(wù)器IP
5.Nginx去找數(shù)據(jù)服務(wù)器 并發(fā)起?戶的請求
6.數(shù)據(jù)服務(wù)器接受請求并處理請求
7.數(shù)據(jù)服務(wù)器響應(yīng)請求給Nginx
8.Nginx響應(yīng)請求給?戶

Nginx集群默認(rèn)算法
upstream module
nginx的upstream?前?持4種?式的分配
1、輪詢(默認(rèn))
每個請求按時間順序逐?分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能?動剔除。
2、weight
指定輪詢?率,weight和訪問?率成正?,?于后端服務(wù)器性能不均的情況。
3、ip_hash
每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問?個后端服務(wù)器,可以解決session的問題。
4、fair(第三?)
按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。
5、url_hash(第三?)
按訪問url的hash結(jié)果來分配請求,使每個url定向到同?個后端服務(wù)器,后端服務(wù)器為緩存時?較有效。
Nginx業(yè)務(wù)服務(wù)器狀態(tài)

每個設(shè)備的狀態(tài)設(shè)置為:
1.down 表示單前的server暫時不參與負(fù)載
2.weight 默認(rèn)為1.weight越?,負(fù)載的權(quán)重就越?。
3.max_fails :允許請求失敗的次數(shù)默認(rèn)為1.當(dāng)超過最?次數(shù)時,返回proxy_next_upstream 模塊定義的錯誤
4.fail_timeout: 失敗超時時間,在連接Server時,如果在超時時間之內(nèi)超過max_fails指定的失敗次數(shù),會認(rèn)為在fail_timeout時間內(nèi)Server不可?。默認(rèn)為10s。
5.backup: 其它所有的?backup機(jī)器down或者忙的時候,請求backup機(jī)器。所以這臺機(jī)器壓?會最輕。

基于請求頭的分發(fā)
1.基于host分發(fā)
2.基于開發(fā)語?分發(fā)
3.基于瀏覽器的分發(fā)
4.基于源ip

#配置web業(yè)務(wù)機(jī)器,可略過。。。。
#web02
[root@web02 ~]# sh nginx_install
[root@web02 ~]# echo web02 > /usr/local/nginx/html/index.html
[root@web02 ~]# yum -y install elinks &>/dev/null
[root@web02 ~]# /usr/local/nginx/sbin/nginx
[root@web02 ~]# elinks http://localhost -dump
 web02

輪詢分發(fā)(默認(rèn))

#配置分發(fā)器
upstream web {
   server 192.168.10.42;
   server 192.168.10.43; 
}
 server {
   listen 80;
   server_name localhost;
   location / {
     proxy_pass http://web;
   }
 }

ps:定義了一個名稱為web分發(fā)機(jī)制,會自動去upstream按照順序自動分發(fā)訪問
每個請求按時間順序逐?分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能?動剔除。

基于權(quán)重的分發(fā)

upstream web {
   server 192.168.10.42 weight=1;
   server 192.168.10.43 weight=2 down;#down表示不參與分發(fā)了 ,backup表示web01忙不過來的時候幫忙分發(fā)
}
 server {
   listen 80;
   server_name localhost;
   location / {
     proxy_pass http://web;
   }
 }

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

ip_hash

upstream web {
   ip_hash;
   server 192.168.10.42;
   server 192.168.10.43;
}
 server {
    listen 80;
    server_name localhost;
    location / {
       proxy_pass http://web;
   }
 }
#ip_hash算法能夠保證來?同樣源地址的請求,都分發(fā)到同?臺主機(jī)

ps:每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問?個后端服務(wù)器,可以解決
session的問題。
介紹2個第三方的分發(fā)方式吧!
A:fair(第三?)
按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。
B:url_hash(第三?)
按訪問url的hash結(jié)果來分配請求,使每個url定向到同?個后端服務(wù)器,后端服務(wù)器為緩
存時?較有效。
下面介紹4個常用的分發(fā)吧

1:基于host分發(fā)(域名)

http{
  upstream web1 {
    server 192.168.10.42;
  }
  upstream web2 {
    server 192.168.10.43; 
  }
  server {
     listen 80;
     server_name www.web1.com;
     location / {
         proxy_pass http://web1;
       }
   }
   server {
     listen 80;
     server_name www.web2.com;
     location / {
         proxy_pass http://web2;
     }
   }
}

2:基于開發(fā)語言分發(fā)

http{
   upstream php {
      server 192.168.10.42;
  }
  upstream html {
     server 192.168.10.43;
  }
  server {
      location ~* \.php$ {
          proxy_pass http://php;
      }
      location ~* \.html$ {
          proxy_pass http://html;
     }
  }
}

ps:就是訪問不同的域名,例如index.html和index.php就可以根據(jù)規(guī)則,分發(fā)不同的服務(wù)器去訪問

3:基于瀏覽器分發(fā)

upstream elinks { server 192.168.10.42; }
upstream chrome { server 192.168.10.43; }
upstream any { server 192.168.10.42:81; }
server {
    listen 80;
    server_name www.web1.com;
    location / {
       proxy_pass http://any;
       if ( $http_user_agent ~* Elinks ) {
         proxy_pass http://elinks;
    }
   if ( $http_user_agent ~* chrome ) {
     proxy_pass http://chrome;
   }
 }
}

ps:根據(jù)你訪問的瀏覽器的不同,從而分發(fā)不同的服務(wù)器或者匹配的規(guī)則去響應(yīng)數(shù)據(jù),例如手機(jī)客戶和PC客戶

4:基于源ip分發(fā)

upstream beijin.server {
     server 192.168.10.42;
 }
upstream shanghai.server {
     server 192.168.10.43;
 }
upstream default.server {
    server 192.168.10.42:81;
 }
geo $geo {
    default default;
    192.168.10.241/32 beijin;
    192.168.10.242/32 shanghai;
}
location / {
   proxy_pass http://$geo.server$request_uri;
 }

ps:http://geo.serverrequest_uri;是為了匹配全路徑,防止url所有參數(shù)丟失,例如源ip來自北京的就返回北京的server數(shù)據(jù),來自上海的就返回上海的server數(shù)據(jù)
好了,大功告成,今天就先寫到這里吧,感謝觀看~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、集群介紹 1、傳統(tǒng)web訪問模型 (1)傳統(tǒng)web訪問模型完成一次請求的步驟 1)用戶發(fā)起請求2)服務(wù)器接受請...
    呆叔么么閱讀 4,053評論 1 5
  • 傳統(tǒng)web服務(wù)模型 集群 將多個物理機(jī)器組成一個邏輯計算機(jī) , 實(shí)現(xiàn)負(fù)載均衡和容器 計算機(jī)集群簡稱集群,是一種計算...
    stamSuper閱讀 617評論 0 1
  • 什么是負(fù)載均衡就不多說了、自己可以百度查看 實(shí)現(xiàn)負(fù)載均衡其實(shí)并不難、只是很多人不敢去嘗試而已,簡單來說就是: 在n...
    一顆地梨子閱讀 1,721評論 0 1
  • 準(zhǔn)備條件 服務(wù)器最少2-3臺 服務(wù)器先添加站點(diǎn) 添加反向代理 找到反向代理的文件夾 修改反向代理的文件夾 至此簡單...
    王玉偉的偉閱讀 2,123評論 0 0
  • 更多內(nèi)容請瀏覽本人博客 LVS搭建Nginx集群 準(zhǔn)備工作 環(huán)境說明 設(shè)定IP環(huán)境如下 服務(wù)名IP端口作用LVS-...
    weylan閱讀 608評論 0 1

友情鏈接更多精彩內(nèi)容