注意,本篇文章爲負載均衡的理論篇,後續找個機會推出實戰篇。理論篇主要講述如何配置負載均衡,配置負載均衡不難。但實戰中要要注意幾個點,好比如何作到多服務器之間的數據共享(session,file等),多cache服務器如何作到命中率高等等問題
上一篇文章中咱們經過反向代理了後端一臺服務器,但隨着網站訪問的人愈來愈多一臺服務器實在是頂不住,因而咱們加了多臺服務器,那麼多臺服務器又怎麼配置代理呢?web
upstream test.com{ # ip_hash; server 192.168.10.13:80; server 192.168.10.14:80 down; server 192.168.10.15:8009 max_fails=3 fail_timeout=20s; server 192.168.10.16:8080; } server { location / { proxy_pass http://test.com; } }
實際上負載均衡也是經過反向代理的方式,可是proxy_pass
只能寫一個地址,因此咱們把某些地址經過upstream
做爲一個集合來作反向代理就實現了負載均衡;算法
upstream是Nginx的HTTP Upstream模塊,這個模塊經過一個簡單的調度算法來實現客戶端IP到後端服務器的負載均衡。在上面的設定中,經過upstream指令指定了一個負載均衡器的名稱test.com。這個名稱能夠任意指定,在後面須要用到的地方直接調用便可。後端
Nginx的負載均衡模塊目前支持4種調度算法,下面進行分別介紹,其中後兩項屬於第三方調度算法。緩存
upstream_fair
模塊。在HTTP Upstream模塊中,能夠經過server指令指定後端服務器的IP地址和端口,同時還能夠設定每一個後端服務器在負載均衡調度中的狀態。經常使用的狀態有:服務器
注,當負載調度算法爲ip_hash時,後端服務器在負載均衡調度中的狀態不能是weight和backup。session
upstream webservers { server 192.168.18.201 weight=1; server 192.168.18.202 weight=1; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://webservers; proxy_set_header X-Real-IP $remote_addr; } }
注,upstream是定義在server{ }以外的,不能定義在server{ }內部。定義好upstream以後,用proxy_pass引用一下便可。
若是定義在server內部就會報錯:負載均衡
"upstream" directive is not allowed here in xxxxxx
重啓之後不斷刷新208就會發現,是201和202的內容交替出現,而後分別查看其日誌,達到了負載均衡輪詢的效果;性能