一、什麼是負載均衡
負載均衡是將負載分載分攤到多個操作單元上執行,從而提高服務的可用性和響應速度,帶給用戶更好的體驗。通過負載均衡,可以將一臺服務器的工作擴展到多臺服務器中執行,提高整個網站的負載能力。如下圖演示了負載均衡服務器的工作方式:
二、負載均衡配置
Nginx不僅可以作爲一個Web服務器或反向代理服務器,還可以通過輪詢、權重、ip_hash、第三方模塊多種方式實現負載均衡。
1.基礎配置環境:所有配置負載均衡方式的基礎環境一至
準備3臺虛擬機,並全部安裝Nginx服務器
負責均衡服務器:192.168.12.128
後端web1服務器:192.168.12.129
後端web2服務器:192.168.12.130
後端備份服務器:192.168.12.131
1)配置一般輪詢負載均衡
#配置nginx.conf文件
server {
listen 80;
server_name test.ng.test;
location / {
proxy_pass http://web_server;
}
}
upstream web_server {
server 192.168.12.129;
server 192.168.12.130;
}
2)加權輪詢負載均衡
server {
listen 80;
server_name test.ng.test;
location / {
proxy_pass http://web_server;
}
}
upstream web_server {
server 192.168.12.129 weight=1 max_fails=1 fail_timeout=2;
server 192.168.12.130 weight=8 max_fails=2 fail_timeout=2;
server 192.168.12.131 backup;
#當所服有務器巖機了,會自動啓用預留的備份服務器
}
參數說明:
weight 參數值越高則被分配到的概率越大
max_fails 允許請求失敗的次數,默認爲1
fail_timeout 在經歷了max_fails次失敗後,暫停服務的時間
backup 預留的備份機器
down 表示當前的server暫時不參與負載均衡
測試方式:
對其他服務器做#nginx -s quit
只留back服務器,測試效果如下圖所示:
3)ip_hash負載均衡
ip_hash方式的負載均衡,是將每個請求按照訪問IP的hash結果分配,這樣可以使來自同一個IP的客戶端用戶固定訪問一臺Web服務器,有效地解決了動態網頁存在Session共享問題。
這種方式,無法保證負載均衡,建議少使用。
server {
listen 80;
server_name test.ng.test;
location / {
proxy_pass http://web_server;
}
}
upstream web_server {
ip_hash;
server 192.168.12.129 ;
server 192.168.12.130 ;
server 192.168.12.131 down;
}
參數說明:
down 在負載均衡時,會忽略服務器的分配;
ip_hash方式不能使用weight和backup設置。
測試運行效果:
4)利用第三方模塊
按照Web服務器的響應時間實現負載均衡,響應時間短的優先分配。
備份已安裝的Nginx
[root@Nginx ~]# cp -r /usr/local/nginx/ /usr/local/nginx_old
重新編譯安裝Nginx
https://github.com/gnosek/nginx-upstream-fair #下載nginx-upstream-fair-master.zip
[root@Nginx src]# unzip nginx-upstream-fair-master.zip
-bash: unzip: command not found
[root@Nginx src]# yum install unzip
[root@Nginx src]# unzip nginx-upstream-fair-master.zip
Archive: nginx-upstream-fair-master.zip
creating: nginx-upstream-fair-master/
inflating: nginx-upstream-fair-master/.gdbinit
inflating: nginx-upstream-fair-master/README
inflating: nginx-upstream-fair-master/config
inflating: nginx-upstream-fair-master/ngx_http_upstream_fair_module.c
#mv nginx-upstream-fair-master nginx-upstream-fair
[root@Nginx src]# cd nginx-1.14.2
[root@Nginx nginx-1.14.2]# ./configure \
> --prefix=/usr/local/nginx \
> --with-http_ssl_module \
> --add-module=/usr/local/src/nginx-upstream-fair
[root@Nginx nginx-1.14.2]# make
#上述命令完成nginx和第三方模塊fair的編譯
#上述錯錯的原因是nginx版本過高,nginx-upstream-fair-master.zip模塊無法支持。使用此模塊,建設採用nginx 1.14.0以下版本或者是通過打補丁的方式,參考網址:https://www.cnblogs.com/ztlsir/p/8945043.html
編譯安裝成功如下圖所示:
配置fair方式的負載均衡
server {
listen 80;
server_name test.ng.test;
location / {
proxy_pass http://web_server;
}
}
upstream web_server {
server 192.168.12.129;
server 192.168.12.130;
server 192.168.12.131;
fair;
}
測試結論:響應快的服務器都會優先分配,接着纔會分配響應速度較慢的服務器。