1.HAProxy簡介
HAProxy提供高可用性、負載均衡以及基于TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速并且可靠的一種解決方案,HAProxy特別適用于那些負載特大的web站點,這些站點通常又需要會
話保持或七層處理,HAProxy運行在當前的硬體上,完全可以支持數以萬計的并發連接,并且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網路上,
HAProxy優缺點
優點:
1.支持兩種代理模式:TCP(四層)和HTTP(七層),支持虛擬主機;
2.支持Session的保持,Cookie的引導;同時支持通過獲取指定的url來檢測后端服務器的狀態,能夠補充Nginx的一些缺點,
3.HAProxy跟LVS類似,本身就只是一款負載均衡軟體;單純從效率上來講HAProxy會比Nginx有更出色的負載均衡速度,在并發處理上也是優于Nginx的,
4.HAProxy可以對Mysql進行負載均衡,對后端的DB節點進行檢測和負載均衡,
5.HAProxy負載均衡策略非常多,比如:動態加權輪循(Dynamic Round Robin),加權源地址哈希(Weighted Source Hash),加權URL哈希和加權引數哈希(Weighted Parameter Hash)
6.免費開源,穩定性也是非常好,可以與LVS相媲美;
7.自帶強大的監控服務器狀態的頁面,實際環境中我們結合Nagios進行郵件或短信報警;
缺點:
1.不支持POP/SMTP協議 SPDY協議;
2.不能做Web服務器,即不支持HTTP cache功能;
3.多載配置的功能需要重啟行程,雖然也是soft restart,但沒有Nginx的reaload更為平滑和友好;
4.多行程模式支持不夠好;
4層負載均衡
將網路流量負載平衡到多個服務器的最簡單方法是使用第4層(傳輸層)負載平衡,以這種方式進行負載均衡將根據IP范圍和埠轉發用戶流量,用戶訪問負載均衡器,負載均衡器將用戶的請求轉發給后端服務器的Web后端組,無論選擇哪個后端服務器,都將直接回應用戶的請求,通常,Web后端中的所有服務器應該提供相同的內容 - 否則用戶可能會收到不一致的內容,
7層負載均衡
7層負載均衡是更復雜的負載均衡,網路流量使用第7層(應用層)負載均衡,允許負載均衡器根據用戶請求的內容將請求轉發到不同的后端服務器,這種負載平衡模式允許在同一域和埠下運行多個Web應用程式服務器,
Haproxy特點
支持TCP與Http協議,作業在網路4層和7層
支持Session共享、Cookies引導
支持通過URL健康檢測
支持8種負載均衡策略
支持心跳檢測
Nginx特點
支持Http協議,作業在網路7層
支持通過埠健康檢測
支持強大的正則匹配規則
支持WebSocket協議
支持Http Cache
說明:對于Http協議,Haproxy處理效率比Nginx高,所以,沒有特殊要求的時候或者一般場景,建議使用Haproxy來做Http協議負載!但如果是Web,那么建議使用Nginx!
2.HAProxy作業原理
HAProxy有前端(frontend)和后端(backend),前端和后端都可以有多個,也可以只有一個listen塊來同時實作前端和后端,
前端(frontend)區域可以根據HTTP請求的header資訊來定義一些規則,然后將符合某規則的請求轉發到相應后端(backend)進行處理,因此HAProxy可以實作動靜分離(動靜分離簡單來說就是指將靜態請求轉發到對應的靜態資源服務器,將動態請求轉發到動態資源服務器),我們上篇說過的LVS就沒有此功能
3.實作HAProxy負載均衡
1.配置部署haproxy和設定身份驗證


stats uri /status #設定統計頁面的uri為/status
stats auth admin:westos #身份驗證用戶名密碼
frontend main *:80 #監聽地址為80
default_backend app #默認的請求轉發地址,名為app
backend app #定義一個名為app的后端部分,需要與frontend的配置項default_backend 值相一致,演算法為輪詢,將動態請求轉到以下兩臺服務器的任意一臺
server app1 172.25.33.2:80 check #定義的多個后端
server app2 172.25.33.3:80 check #定義的多個后端








![]()



2.自定義路由監控器
自定義設定符合條件的url監控,并把請求轉發到指定服務器
當訪問路徑以/static /images等開頭,以.jpg .gif等結尾時,跳入backend static模塊,由該模塊內server提供服務






如果圖片在瀏覽器中訪問不到有可能是權限不夠
3.指定日志存放



systemctl restart rsyslog.service
systemctl start haproxy.service

避免產生兩次日志,增加負擔 
4.自定義路由監控器

把來自172.25.134.250的訪問拒絕

添加錯誤代碼,把相應錯誤代碼轉發至其他路徑

![]()

5. 訪問重定向



6.讀寫分離


把2作為只讀服務器,提供頁面![]()
把server3作為存盤服務器,在server3的httpd服務中創建上傳頁面,并賦予寫入權限![]()


設定檔案大小限制
![]()


在server3中也給upload777權限


上傳后檔案到server3中,server2為空
4.HAProxy高可用
![]()




server1生成免密操作密鑰,發送給server4
![]()
配置軟體倉庫,安裝高可用插件
將server1的倉庫組態檔發送給server4
安裝高可用插件
開啟server1和server4的pcsd服務
修改server1和server4的hacluster認證密碼,然后認證![]()

認證

設定集群的名稱為mycluster,集群內有server1和server4兩個設備![]()

啟動集群內所有服務節點

驗證配置,出現報錯,這個因為沒有Fencing設備時,沒有禁用stonith功能
禁用功能
crm_mon是監控集群狀態的主要命令crm status是一樣的效果


訪問網頁172.25.134.1/status可以查看到狀態,查看埠可以顯示80埠被監聽
配置集群管理VIP
設定VIP,查看狀態顯示獲取到了VIP資訊

關閉server1、server4的haproxy服務


將haproxy 添加到集群管理
查看狀態發現vip運行在server1節點,haproxy運行在server4節點
將vip和haproxy 放入同一個組中解決不同步的問題
pcs status
手動洗掉vip,查看集群運行狀態,運行出現了錯誤和警告

VIP自動添加
關閉server1的haproxy![]()

節點自動切換

設定集群節點為備用節點,以及重新上線

節點自動切換
5.防止腦裂
Fence主要作用是防止兩個系統同時向資源寫資料
破懷澩的安全性和一致性從而導致腦裂
真實主機安裝fence插件
建立fence_xvm.key的存放目錄
配置fence,只有在網橋的時候選擇br0介面,其余回車即可)



![]()
![]()
![]()
此處可以看到之后要生成的fence_xvm.key檔案的存放位置
![]()
生成fence_xvm.key檔案



關倍訓墻
將生成的密鑰檔案發送給server1、server4


在server1、server4安裝客戶端fence![]()
查詢fence設備

![]()

查詢fence設備的元資料![]()


在server1將server1、server4節點添加到fence
#server1:y1(主機名:虛擬機名)

以看到haproxy和vip在server1,fence運行在server4
關閉server1網卡
![]()
成功切換

讓系統崩潰,執行后主機斷點重啟
server1接管 

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/306395.html
標籤:其他


