Nginx負載均衡實踐

當在業(yè)務增長圈匆,生產環(huán)境里有很大的流量產生和比較高的并發(fā)量產生時扑毡,一般單機模式的服務已經不再適合業(yè)務的需求探遵。所以多機的負載均衡技術來做負載優(yōu)化就很有必要了柳沙。Nginx不光可以實現(xiàn)web Server岩灭,還可以作為HTTP反向代理服務器分發(fā)客戶端請求和流量給后端RS,以此提高服務的性能和降低服務器的壓力赂鲤。Nginx的負載均衡依賴于ngx-http-upstream-module模塊噪径,所支持的代理模式有proxy-pass、fastcgi-pass数初、memcache-pass找爱。Nginx的反向代理效果充當了負載均衡的流量分發(fā)效果,類似的負載均衡效果的軟件有LVS集群泡孩、haproxy车摄。為了高可用集群,LVS+Keepalived和Nginx+Keepalived仑鸥、haproxy+Keepalived集群保證高可用容災負載均衡集群吮播。下面介紹Nginx負載均衡。

1. Nginx常用負載均衡算法:
  • 輪詢(默認算法):簡稱RR---每個請求會依次分配給后端RS不同應用程序服務器眼俊,后端RS實際的壓力會忽略不計意狠。
  • 加權輪詢:權重越大的服務器,被Nginx分配的請求次數(shù)會越多疮胖,適合用于后端RS中性能不一致的情況摄职,這種算法可以充分利用不同后端RS的配置性能。
  • IP HASH:當同IP進行重復訪問時會被指定到上次訪問的服務器获列,如果后端超載谷市,請求分發(fā)到別的服務器』骱ⅲ可以解決session動態(tài)網站共享問題迫悠。
2. Nginx配置文件常用配置參數(shù):
  • server 192.168.74.1:80 負載均衡后端RealServer的IP或者域名,端口默認為80,巩梢;在高并發(fā)請求下寫域名创泄,再通過DNS進行負載均衡艺玲。
  • weight:權重,默認為1鞠抑,在配置文件里面饭聚,權重越大的服務器接收的請求越多。
  • max_fails:失敗嘗試的失敗次數(shù)搁拙,默認是1,禁止失敗嘗試是0秒梳。
  • fail_timeout:失敗超時時間,默認是10秒箕速,通常3秒比較好酪碘。
  • backup:熱備配置,master負載均衡器出現(xiàn)問題后會自動接收Master的所有資源和VIP(Virtual IP address)盐茎;backup服務器兴垦。
  • down:標志服務器不可用,這個參數(shù)通常配合IP_hash使用字柠。
3. Ngxin負載均衡設置:
  • 默認負載均衡設置:
http{#upstream模塊包含在http模塊下
      upstream  kiwis{#定義upstream名字探越,下面會引用
           server 192.168.74.133;#后端負責處理真正請求的RS的ip地址
           server 192.168.74.128;
           server 192.168.74.130;
      }
      server {
           listen 80;
           server name  www.kiwis.com;
           location /{
               proxy_pass http://kiwis; #引用upstream
           }
      }
}
  • 當用戶訪問www.kiwis.com時窑业,Nginx會把請求分發(fā)給后端的三個RS扶关。
  • 加權負載均衡設置。
http{#upstream模塊包含在http模塊下
      upstream  kiwis{#定義upstream名字数冬,下面會引用
           server 192.168.74.133 weight=3;#后端負責處理真正請求的RS的ip地址;權重為3
           server 192.168.74.128;
           server 192.168.74.130;
      }
      server {
           listen 80节槐;
           server name  www.kiwis.com;
           location /{
               proxy_pass http://kiwis; #引用upstream
           }
      }
}
  • 加權負載均衡中,每5個請求分配給192.168.74.133拐纱,然后第4铜异、5個請求依次分配給后兩個服務器,如此循環(huán)操作秸架。
  • IP HASH負載均衡:
http{#upstream模塊包含在http模塊下
      upstream  kiwis{#定義upstream名字揍庄,下面會引用
           ip_hash;#采用IP HASH算法
           server 192.168.74.133;#后端負責處理真正請求的RS的ip地址
           server 192.168.74.128;
           server 192.168.74.130;
      }
      server {
           listen 80;
           server name  www.kiwis.com;
           location /{
               proxy_pass http://kiwis; #引用upstream
           }
      }
}
  • 如果需要將同一個客戶端請求綁定到相同得到后端服務器上东抹,可以使用ip_hash負載均衡蚂子,除非該服務器不可用。
  • Nginx高可用實現(xiàn)缭黔,利用backup標簽食茎,可以實現(xiàn)高可用;Master服務器故障馏谨;backup服務器可以自動接管服務别渔;期間接管服務的時間是1秒甚至更短,可以保證服務不中斷;對于客戶端來說是透明的哎媚。當Matser服務器修復喇伯,backup會自動放棄服務。
http{#upstream模塊包含在http模塊下
      upstream  kiwis{#定義upstream名字拨与,下面會引用
           server 192.168.74.133;#后端負責處理真正請求的RS的ip地址
           server 192.168.74.128;
           server 192.168.74.130 backup;
      }
      server {
           listen 80稻据;
           server name  www.kiwis.com;
           location /{
               proxy_pass http://kiwis; #引用upstream
           }
      }
}
3. Nginx的http_proxy_module模塊常用參數(shù)。
  • Nginx的upstream模塊相當于是建立一個函數(shù)庫买喧,把后端的服務器地址放在一個池子里面捻悯,而proxy模塊則是從這個池子里調用了這些服務器,http_proxy_module模塊常用參數(shù):
    • proxy_set_header:讓后端服務器能獲取到前端用戶真實IP岗喉,而不只是代理服務器的IP。
    • proxy_set_header Host $host:當后端服務器配置了多個應用時炸庞,該選項可以讓服務器識別出具體要訪問的是哪個應用钱床,而不會將第一個站點作為默認應用傳遞給用戶。
    • proxy_set_header X-Forward-For $remote_addr:如果后端服務器需要獲取用戶的真實IP埠居,需要該選項查牌。
    • client_body_buffer_size:客戶端請求主體緩沖區(qū)大小。
    • proxy_connect_timeout:代理服務器和后端服務端握手鏈接時間滥壕。
    • proxy_send_timeout:后端服務器回傳數(shù)據(jù)給Nginx的時間纸颜,需要在設置的時間內發(fā)送完所有的數(shù)據(jù);如果沒有發(fā)送完數(shù)據(jù)绎橘,Nginx將斷開數(shù)據(jù)鏈接胁孙。
    • proxy_read_timeout:代理服務器和后端服務器連接成功后,等待后端服務器響應的時間称鳞。
      +Nginx作反向代理涮较,獲取客戶端的真實IP地址,轉發(fā)動態(tài)頁面給Tomcat進行處理冈止。
location ~\.( jsp | jspx )?${
    proxy_set_header Host $host;
    proxy_set_header x-Real-IP $remote_addr;
    proxy_set_header X-Forward-For $proxy-add_x_forward_for;
    proxy_pass http://tomcat.server
}
4. Nginx的配置文件說明:
  • 在此記錄Nginx服務器nginx.conf的配置文件說明:
#定義運行用戶和用戶組狂票,此用戶必須在系統(tǒng)存在;可以是nologin
user nginx nginx熙暴;
#啟動進程闺属,通常設置為何cpu數(shù)量相等
worker_process 8;
#全局錯誤日志及pid文件
error_log  /var/log/nginx/error.log;#錯誤日志定義等級  [debug|info|notice|warn|error|crit]
pid        /var/run/nginx.pid;#指定進程id的存儲文件位置
worker_rilimit_nofile 65535;#一個nginx進程最多打開的文件描述符數(shù)目,理論值是最大打開文件數(shù)(系統(tǒng)的值ulimit -n)與nginx進程數(shù)相除周霉;nginx請求分配不均掂器,網上有些博客建議與ulimit -n數(shù)目相等
#工作模式及連接上限
events{
    use epoll; #epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內核俱箱,可以大大提高nginx的性能唉匾;除此之外還有select、poll、kqueue巍膘、rtsig和/dev/poll模式 
    worker_connetctions 1024;#單個后臺worker process進程的最大并發(fā)連接數(shù)
    #multi_accept on;
}
#設置http服務器厂财,利用它反向代理功能提供負載均衡實現(xiàn)
http{
    #設定mime類型,類型有mime.type文件定義
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    #設定日志格式
    access_log /var/nginx/access.log;
    #sendfile指令指定nginx是否調用sendfile函數(shù)(zero copy)來輸出文件峡懈,對于普通的應用璃饱。
    #必須設置為on,如果用來進行下載等應用磁盤IO負載應用肪康,可設置為off荚恶,以平衡磁盤與網絡I/O處理速度,降低系統(tǒng)的uptime磷支。
    sendfile on;
    # tcp_nopush  on;
    # 連接超時時間
    #Keepalive_timeout 0;
    Keepalive_timeout  65;
    tcp_nodelay  on;
    #開啟gzip壓縮
    gzip on谒撼;
    gzip_disable "MSIE[1-6]\.(?!.*SV1)";
    #設定請求緩沖
    client_header_buffer_size  1k;
    large_client_header_buffers 4 4k;
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    # 設定負載均衡的服務器列表
    upstream myServer{
        #weight參數(shù)表示權值,權值越高被分配到的幾率就越大
        #本機上開啟80端口
        server 192.168.74.2:80  weight=5雾狈;
        server 192.168.74.3:80  weight=1廓潜;
        server 192.168.74.4:80  weight=8;
    }
    server{
        #偵聽81端口
        listen 81善榛;
        #定義使用www.kiwis.com訪問
        server_name www.kiwis.com;
        #設定本虛擬機訪問的日志
        access_log logs/www.kiwis.com.access.log main;
        #默認請求
        location / {
            root /root/www; #定義服務器的默認網站根目錄位置
            index index.php index.html index.htm;# 定義首頁索引文件的名稱
            fastcgi_pass  www.kiwis.com;
            fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }
        #定義錯誤提示頁面
        error_page 500 502 503 504 /50.x.html;
        location =/50x.html{
            root /root/www;
        }
        #靜態(tài)文件辩蛋,nginx自己處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/{
            root  /var/www/virtual/htdocs/public;
            #過期20天,靜態(tài)文件更新頻率低移盆,過期可以根據(jù)需要設置
            expires 20d;
        }
        #PHP腳本請求全部轉發(fā)到FASTCGI處理悼院,使用FastCGI默認設置
        location ~ \.php$ {
            root /root/www;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;
            include fastcgi_params;
        }
        #設定查看Nginx狀態(tài)的地址
        location /NginxStatus {
            stub_status  on;
            access_log  on;
            auth_basic  "NginxStatus";
            auth_basic_user_file conf/htpassword;
        }
        #禁止訪問 .js文件
        location  ~ /\.js {
            deny all;
        }
    }
}

nginx的基本配置參數(shù)大概如上所示,安裝Nginx實現(xiàn)負載均衡參見另外一篇文章咒循。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末据途,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叙甸,更是在濱河造成了極大的恐慌昨凡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚁署,死亡現(xiàn)場離奇詭異便脊,居然都是意外死亡,警方通過查閱死者的電腦和手機光戈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門哪痰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人久妆,你說我怎么就攤上這事晌杰。” “怎么了筷弦?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵肋演,是天一觀的道長抑诸。 經常有香客問我,道長爹殊,這世上最難降的妖魔是什么蜕乡? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮梗夸,結果婚禮上层玲,老公的妹妹穿的比我還像新娘。我一直安慰自己反症,他們只是感情好辛块,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著铅碍,像睡著了一般润绵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上胞谈,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天尘盼,我揣著相機與錄音,去河邊找鬼呜魄。 笑死悔叽,一個胖子當著我的面吹牛莱衩,可吹牛的內容都是我干的爵嗅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼笨蚁,長吁一口氣:“原來是場噩夢啊……” “哼睹晒!你這毒婦竟也來了?” 一聲冷哼從身側響起括细,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤伪很,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奋单,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锉试,經...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年览濒,在試婚紗的時候發(fā)現(xiàn)自己被綠了呆盖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡贷笛,死狀恐怖应又,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情乏苦,我是刑警寧澤株扛,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響洞就,放射性物質發(fā)生泄漏盆繁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一奖磁、第九天 我趴在偏房一處隱蔽的房頂上張望改基。 院中可真熱鬧,春花似錦咖为、人聲如沸秕狰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸣哀。三九已至,卻和暖如春吞彤,著一層夾襖步出監(jiān)牢的瞬間我衬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工饰恕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挠羔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓埋嵌,卻偏偏與公主長得像破加,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雹嗦,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內容

  • 好久沒寫文章了,因為最近在安卓上寫一個小東西,寫完后,我發(fā)現(xiàn)我們編程的實在是沒什么意思. 不管你在哪個平臺編程,都...
    都是一家人閱讀 597評論 0 0
  • 《老男孩Linux運維》Nginx Documentation 集群簡介 集群就是指一組(若干)相互獨立的計算機范舀,...
    Zhang21閱讀 3,379評論 0 51
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)了罪,斷路器锭环,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • nginx做負載均衡器以及proxy緩存配置 關于nginx的安裝和基本配置請參考nginx,本文在原基礎上完成以...
    meng_philip123閱讀 1,587評論 1 16
  • 夜深星月靜泊藕,秉燭探素馨辅辩。 臥枝含春淚,細裹鵝黃緊娃圆。 歸期明日近玫锋,只惜未吐新。 應憐吾將去踊餐,曉日投花陰景醇。
    比目的一條魚閱讀 121評論 0 0