跨多個應用程序實例的負載平衡是一種經常使用的技術,用於優化資源利用率、最大化吞吐量、減小延遲和確保容錯配置。html
可使用nginx做爲一個很是有效的HTTP負載均衡器,將流量分配到多個應用服務器,並使用nginx提升web應用程序的性能、可伸縮性和可靠性。nginx
nginx默認支持4種負載均衡機制:web
建立/root/web/app1,/root/web/app2,/root/web/app3目錄,分別模擬三個應用程序。在三個目錄中分別上傳index.html文件,index.html分別輸出app一、app二、app3。修改"/usr/local/nginx/conf/nginx.conf"配置文件,在http節點下添加三個server節點:算法
1 # app1 2 server { 3 listen 8080; 4 server_name localhost; 5 location / { 6 root /root/web/app1; 7 } 8 } 9 10 # app2 11 server { 12 listen 8081; 13 server_name localhost; 14 15 location / { 16 root /root/web/app2; 17 } 18 } 19 20 # app3 21 server { 22 listen 8082; 23 server_name localhost; 24 25 location / { 26 root /root/web/app3; 27 } 28 }
在http節點下添加以下配置節點centos
1 upstream app { 2 server localhost:8080; //app1 3 server localhost:8081; //app2 4 server localhost:8082; //app2 5 } 6 7 server { 8 listen 80; 9 server_name localhost; 10 location / { 11 proxy_pass http://app; //app是upstream節點後的key取值 12 } 13 }
保存nginx.conf配置文件,從新加載配置文件服務器
1 /usr/local/nginx/sbin/nginx -t; 2 /usr/local/nginx/sbin/nginx -s reload;
當訪問http://server_name時,請求會大致均衡的分發給:localhost:8080,localhost:8081,localhost:8082。app
nginx中使用最少鏈接機制須要"least_conn"指令來激活,負載均衡
1 upstream app { 2 least_conn; 3 server localhost:8080; //app1 4 server localhost:8081; //app2 5 server localhost:8082; //app2 6 }
當接收到請求後,請求會被分發給當前負載量最少的服務器性能
循環機制、最少鏈接機制針對同一個客戶端發送的請求可能會被分發給不一樣的服務器,可是在一些場景中須要將同一個客戶端的請求分發給固定的服務器,那個可使用ip-hash機制來實現此功能。測試
1 upstream app { 2 ip_hash; 3 server localhost:8080; //app1 4 server localhost:8081; //app2 5 server localhost:8082; //app2 6 }
當接收到請求後,請求會被分發給當前負載量最少的服務器
在實際場景中,應用程序所在的服務器集羣的配置性能可能差距很大,那麼配置好的服務器天然也須要處理較多的請求才能發揮出價值,此時就能夠經過「權重機制」來完成
1 upstream app { 2 server localhost:8080 weight=3; //app1 3 server localhost:8081; //app2 4 server localhost:8082; //app2 5 }
如上配置,若是5個請求,3個請求分發給localhost:8080,另外兩個分發給localhost:808一、localhost:8082. 對於"最少鏈接機制"、"ip-hash機制"的權重機制配置語法如上配置同樣。
nginx健康檢查主要是經過「max_fails"和「fail_timeout」指令來控制。
1 upstream app { 2 server localhost:8080 weight=3 fail_timeout=10 max_fails=1; //app1 3 server localhost:8081; //app2 4 server localhost:8082; //app2 5 }
若是fail_timeout的次數超過了max_fails的值,nginx則認爲該服務不可達,後續的請求則不會分發給該服務。後面nginx會定時檢測不可達的服務是否可達,若是可達,則將其激活,分發請求。 保存nginx.conf配置文件,從新加載配置文件
1 /usr/local/nginx/sbin/nginx -t; 2 /usr/local/nginx/sbin/nginx -s reload;