HAproxy+Nginx負載均衡集群
- HAproxy概述
- 關于4/7層負載均衡
- HAProxy Session親緣性
- HAproxy特點
- HAproxy配置
- Web1和Web2創建測驗頁面
- 安裝HAproxy
- 配置HAproxy
- 測驗結果
- HAproxy組態檔五部分
- HAproxy狀態
- Nginx七層負載均衡集群
- 特點
- 優勢
- 缺點
- 生產架構
- Nginx配置
- 域名決議
- 配置Nginx
- 測驗負載均衡
HAproxy概述
關于4/7層負載均衡
無負載均衡

- 在此示例中,用戶直接連接到您的Web服務器,在yourdomain.com上,并且沒有負載平衡,如果您的單個Web服務器出現故障,用戶將無法再訪問您的Web服務器,此外,如果許多用戶試圖同時訪問您的服務器并且無法處理負載,他們可能會遇到緩慢的體驗,或者可能根本無法連接,
四層負載均衡

- 將網路流量負載,平衡到多個服務器的最簡單方法,是使用第4層(傳輸層)負載平衡,以這種方式進行負載均衡將根據IP范圍和埠轉發用戶流量(即,如果請求進入http://yourdomain.com/anything,則流量將轉發到處理yourdomain.com的所有請求的后端,埠80)
- 用戶訪問負載均衡器,負載均衡器將用戶的請求轉發給后端服務器的Web后端組,無論選擇哪個后端服務器,都將直接回應用戶的請求,通常,Web后端中的所有服務器應該提供相同的內容-否則用戶可能會收到不一致的內容,
七層負載均衡

- 7層負載平衡是更復雜的負載均衡網路流量的方法是使用第7層(應用層)負載均衡,使用第7層允許負載均衡器根據用戶請求的內容將請求轉發到不同的后端服務器,這種負載平衡模式允許您在同一域和埠下運行多個Web應用程式服務器,
- 示例中,如果用戶請求yourdomain.com/blog,則會將其轉發到博客后端,后端是一組運行博客應用程式的服務器,其他請求被轉發到web-backend,后端可能正在運行另一個應用程式,
關于HAproxy
7層負載均衡、應用程式負載均衡、URL負載均衡、動靜分離技術,免費、快速并且可靠
是一款高性能的負載均衡軟體,因為其專注于負載均衡這一些事情,因此與nginx比起來在負載均衡這件事情上做更好,更專業,
HAProxy Session親緣性
haproxy負載均衡保持客戶端和服務器Session親緣性的三種方式
- 用戶IP識別
- cookie識別
- session識別
HAproxy特點
- 支持tcp / http兩種協議層的負載均衡,使得其負載均衡功能非常豐富,
- 支持8種左右的負載均衡演算法,尤其是在http模式時,有許多非常實在的負載均衡演算法,適用各種需求,
- 性能非常優秀,基于事件驅動的鏈接處理模式及單行程處理模式(和Nginx類似)讓其性能卓越,
- 擁有一個功能出色的監控頁面,實時了解系統的當前狀況,
- 功能強大的ACL支持,給用戶極大的方便,
HAproxy配置

#環境
四臺Linux,做好域名決議
HAproxy:192.168.100.10
Web1:192.168.100.20
Web2:192.168.100.30
Client:192.168.100.40
#域名決議
[root@haproxy ~]# vim /etc/hosts
192.168.100.10 haproxy
192.168.100.20 web1
192.168.100.30 web2
192.168.100.40 client
[root@haproxy ~]# scp /etc/hosts web1:/etc/
[root@haproxy ~]# scp /etc/hosts web2:/etc/
[root@haproxy ~]# scp /etc/hosts client:/etc/
Web1和Web2創建測驗頁面
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo web1 > /var/www/html/index.html
[root@web1 ~]# systemctl enable httpd --now
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# echo web2 > /var/www/html/index.html
[root@web2 ~]# systemctl enable httpd --now
安裝HAproxy
[root@haproxy ~]# yum -y install epel-release
[root@haproxy ~]# yum -y install haproxy
配置HAproxy
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
global #全域配置
log 127.0.0.1 local3 info #日志配置記錄本機日志中 local3 日志型別自定義
maxconn 4096 #最大連接限制(優先級低)
user nobody #運行haproxy用戶是誰/也可以寫99
group nobody #組用戶
daemon #守護行程常駐系統記憶體
nbproc 1 #haproxy行程數,該值的設定應與服務器cpu核心數一致,如16,即2顆8核心
pidfile /run/haproxy.pid #haproxy 行程id存放位置
defaults #默認配置
log global #日志使用全域設定
mode http #haproxy作業模式七層LB,程式會檢查用戶url
maxconn 2048 #haproxy最大連接數(優先級中)
retries 3 #健康檢查,對后端真實服務器,3次失敗認為服務不可用
option redispatch #重新匹配,服務器不可用后的操作,重定向至健康服務器
timeout connect 5000 #重傳計時器,定義haproxy將客戶端請求轉發至后端服務器所等待的時間/毫秒
timeout client 50000 #向后長連接,haproxy作為客戶,和后端服務器之間空閑連接的超時時間,到時發送fin指令
timeout server 50000 #向前長連接,haproxy作為服務器,和用戶之間空閑連接的超時時間,到時發送fin指令
option abortonclose #關于關閉的選項,當服務器過載過高,自動結束當前佇列處理較久的連接
stats uri /admin?stats #設定統計頁面的uri為/admin?stats
stats realm Private lands #設定統計頁面認證時的提示內容
stats auth admin:password #設定統計頁面認證的用戶和密碼,如果設定多個,另一行寫入即可
stats hide-version #隱藏統計頁面上的haproxy版本資訊
frontend http-in #前端虛擬服務器
bind 0.0.0.0:80 #系結地址,為本機所有IP服務
mode http #面對前端http模式檢查用戶uri
log global #可以對面向前端日志單獨存放,也可以放入本機全域設定
option httplog #日志格式,記錄詳細
option httpclose #關閉長連接
acl html url_reg -i \.html$ #訪問控制列名名稱html,用戶url地址可以被正則匹配,-i:忽略大小寫,if如果html規則命中,則向后端真實服務器轉發
use_backend html-server if html #如果滿足acl html規則,則推送給后端服務器html-server
default_backend html-server #默認的后端服務器
backend html-server #真實服務器
mode http #觀察用戶url地址進行分發
balance roundrobin #輪詢策略
option httpchk GET /index.html #健康狀態檢查查看服務器主頁
cookie SERVERID insert indirect nocache #將相同用戶請求,轉發給相同的真實服務器
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
#cookie 3 服務器id,避免rr演算法將客戶機請求轉發給其他服務器,對后端服務器的健康狀態檢查為2000毫秒,連續兩次健康檢查成功,則認為有效,連續五次健康檢查失敗,則認為宕機
[root@haproxy ~]# systemctl start haproxy #啟動haproxy
測驗結果
[root@client ~]# elinks --dump http://haproxy

HAproxy組態檔五部分
- global:設定全域配置引數,屬于行程的配置,通常是和作業系統相關;
- defaults:配置默認引數,這些引數可以被用到frontend,backend,Listen組件;
- frontend:接收請求的前端虛擬節點,Frontend可以更加規則直接指定具體使用后端的backend;
- backend:后端服務集群的配置,是真實服務器,一個Backend對應一個或者多個物體服務器;
- Listen:frontend和backend的組合體,
HAproxy狀態
http://192.168.100.10/admin?stats
密碼為剛才在組態檔中配置的賬戶密碼


Nginx七層負載均衡集群
特點
- 功能強大,性能卓越,運行穩定
- 配置簡單靈活
- 能夠自動剔除作業不正常的后端服務器
- 上傳檔案使用異步模式,client—nginx-web1 web2 web3 lvs同步請求DRclient–>dr—web1
- 支持多種分配策略,可以分配權重,分配方式靈活,
優勢
- nginx復制用戶請求,在后端服務器出現問題時,nginx會再復制一份請求發給另一臺后端服務器,lvs則在這種情況,只能用戶重新發請求
缺點
- 流量會經過nginx,nginx成為瓶頸
生產架構

Nginx配置
基于剛才的實驗環境
[root@haproxy ~]# systemctl stop haproxy #停止haproxy
nginx:192.168.100.10
Web1:192.168.100.20
Web2:192.168.100.30
域名決議
[root@nginxproxy ~]# vim /etc/hosts
192.168.100.10 nginx
192.168.100.20 web1
192.168.100.30 web2
192.168.100.40 client
[root@nginx ~]# scp /etc/hosts web1:/etc/
[root@nginx ~]# scp /etc/hosts web2:/etc/
[root@nginx ~]# scp /etc/hosts client:/etc/
#頁面準備使用剛才實驗的試驗主頁
配置Nginx
[root@nginx ~]# yum -y install nginx
[root@nginx ~]# vim /etc/nginx/nginx.conf
...
#找到http模塊添加 upstream
http {
upstream html { #上游服務器,服務器名html
server web1:80;
server web2:80;
}
...
#找到server模塊中的location /
location / {
proxy_pass http://html; #html對應上方html服務器集群名
}
...
[root@nginx ~]# systemctl restart nginx
測驗負載均衡
[root@client ~]# elinks --dump http://nginx

如需做動靜分離添加location即可
#例:
location / { upstream html {
server web1:80;
} server web2:80;
location ~\.html$ { }
proxy_pass ... upstream php {
} server web3:80;
location ~\php$ { server web4:80;
proxy_pass ... }
} server {
location ~\.(jpg|png|css|js)$ { location / {
proxy_pass ... proxy_pass http://html;
} }
location ~\.php$ {
proxy_pass http://php;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/287593.html
標籤:其他
上一篇:SpringCloud Alibaba(六)Seata 分布式事務
下一篇:設計模式(單例、工廠)
