Nginx簡單實現負載均衡
nginx
nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。其特點是佔有記憶體少,併發能力強
常用功能:
1.HTTP代理和反向代理
請求穩定,後端轉發與業務配合分離,配置靈活,支援判斷表示式,可以進行自定義配置,支援通過快取加速訪問,支援虛擬主機,支援URL重定向,支援網路監控,支援流媒體傳輸等
2.負載均衡
1)將單一的重負載分擔到多個網路節點上做並行處理,每個節點處理結束後將結果彙總給使用者提高網路系統的處理能力
2)將大量的前端併發訪問或者資料流量分擔到多個後端網路節點上分別處理
- nginx的負載均衡策略
- 內建策略:輪詢 加權輪詢 IP HASH
- 擴充套件策略 主要通過第三方模組實現,常見有url hash
3.WEB快取
主要由Proxy_Cache(提供代理服務時,對後端伺服器返回內容進行URL快取) 和FastCGI_Cache(對FastCGI程式快取)指令集構成
nginx編譯安裝
server1
tar zxf nginx-1.14.0.tar.gz
cd nginx-1.14.0
yum install -y gcc openssl-devel pcre-devel # 解決軟體包依賴
vim src/core/nginx.h #刪除nginx版本資訊,為了安全,這樣編譯後外界無法獲取程式的版本號
vim auto/cc/gcc #註釋掉debug,這樣編譯以後程式只有幾百 k
./configure --help #檢視幫助 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #為了方便呼叫,建立軟連結
nginx #開啟nginx
netstat -antlp | grep nginx #檢視埠資訊
curl -I localhost
Nginx反向代理加負載均衡
server1
lscpu #檢視cpu資訊
vim /usr/local/nginx/conf/nginx.conf user nginx nginx; #使用者 worker_processes 1; #cpu worker #worker_cpu_affinity 01 10; #當worker_processes 為1時不需要此行,當為2時,worker_cpu_affinity 01 10;為4時,worker_cpu_affinity 0001 0010 0100 1000;以此類推 events { worker_connections 65535; #程序最大連線數 } http { 新增論叫配置 upstream westos { # ip_hash; #若不填寫預設rr, server 172.25.254.2:80; server 172.25.254.3:80; } server { listen 80; #埠為80 server_name www.westos.org; location / { proxy_pass http://westos; } }
vim /etc/security/limits.conf
最後一行新增
nginx - nofile 65535
useradd -M -d /usr/local/nginx/ -u 800 nginx #建立nginx使用者,-M 不建立使用者的家目錄
nginx -t #檢查語法是否有錯
nginx -s reload #載入配置
server2與server3
配置apache
測試
curl www.westos.org 實現訪問輪詢
nginx 自帶健康檢查
關閉server2httpd,則會一直訪問server3
在server1中編輯nginx預設釋出頁面
修改nginx配置檔案
vim /usr/local/nginx/conf/nginx.conf
http {
upstream westos {
# ip_hash;
server 172.25.254.2:80 down; #停掉後端伺服器
server 172.25.254.3:80 down; #停掉後端伺服器
server 172.25.254.1:80 backup; #本機作備機
}
nginx -s reload
測試:
curl www.westos.org
nginx基於cookie粘滯實現負載均衡
nginx-sticky-module 是 Nginx 的一個擴充套件模組,實現了通過 Cookie 的會話貼上效果。
nginx以前對session 保持支援不太好,主要採用ip_hash把同一來源的客戶(同一C段的IP)固定指向後端的同一臺機器,ip_hash有個缺點是不能實現很好的負載均衡;直到nginx的擴充套件模組nginx-sticky-module的出現,解決了session sticky的問題。
基本原理:
首先根據輪詢RR隨機到某臺後端,然後在響應的Set-Cookie上加上route欄位,第二次請求再處理的時候,發現有route欄位,直接導向原來的那個節點
重新編譯安裝nginx
nginx -s stop #關閉nginx
cd nginx-1.14.0
make clean
unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make && make install
vim /usr/local/nginx/conf/nginx.conf
http {
upstream westos {
sticky;
server 172.25.24.2:80;
server 172.25.24.3:80;
}
nginx
nginx -s reload
測試:
需用瀏覽器測試,curl命令不支援cookies
使用火狐瀏覽器按F12在storage中檢視詳細資訊