Linux企業運維——HAProxy負載均衡
文章目錄
- Linux企業運維——HAProxy負載均衡
- 1、HAProxy簡介
- 1.1、HAProxy優缺點
- 1.2、4層負載均衡
- 1.3、7層負載均衡
- 2、HAProxy作業原理
- 3、HAProxy實驗演練
- 3.1、HAProxy負載均衡
- 3.2、身份驗證
- 3.3、自定義路由監控器
- 3.4、負載均衡權重
- 3.5、設定備份服務器
- 3.6、haproxy日志管理
- 3.7、訪問黑名單與錯誤重定向
- 3.8、訪問重定向
- 3.9、讀寫分離
- 4、HAProxy高可用
- 4.1、pacemaker實作雙機熱備
- 4.2、fence防止檔案系統腦裂
1、HAProxy簡介
HAProxy是一種高效、可靠、免費的高可用及負載均衡解決方案,非常適合于高負載站點的七層資料請求,
因為HAProxy實作了一種事件驅動、單一行程模型,此模型支持非常大的并發連接數,客戶端通過HAProxy代理服務器獲得站點頁面,而代理服務器收到客戶請求后根據負載均衡的規則將請求資料轉發給后端真實服務器,HAProxy還支持Session的保持和Cookie的引導,
1.1、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.多行程模式支持不夠好;
1.2、4層負載均衡
將網路流量負載平衡到多個服務器的最簡單方法是使用第4層(傳輸層)負載平衡,以這種方式進行負載均衡將根據IP范圍和埠轉發用戶流量,用戶訪問負載均衡器,負載均衡器將用戶的請求轉發給后端服務器的Web后端組,無論選擇哪個后端服務器,都將直接回應用戶的請求,通常,Web后端中的所有服務器應該提供相同的內容 - 否則用戶可能會收到不一致的內容,

1.3、7層負載均衡
7層負載均衡是更復雜的負載均衡,網路流量使用第7層(應用層)負載均衡,允許負載均衡器根據用戶請求的內容將請求轉發到不同的后端服務器,這種負載平衡模式允許在同一域和埠下運行多個Web應用程式服務器,

2、HAProxy作業原理
HAProxy有前端(frontend)和后端(backend),前端和后端都可以有多個,也可以只有一個listen塊來同時實作前端和后端,
前端(frontend)區域可以根據HTTP請求的header資訊來定義一些規則,然后將符合某規則的請求轉發到相應后端(backend)進行處理,因此HAProxy可以實作動靜分離(動靜分離簡單來說就是指將靜態請求轉發到對應的靜態資源服務器,將動態請求轉發到動態資源服務器),我們上篇說過的LVS就沒有此功能,
3、HAProxy實驗演練
3.1、HAProxy負載均衡
環境準備,在真實主機上為所有虛擬機配置域名決議

在server1上安裝haproxy

編輯haproxy的組態檔

stats uri /status #設定統計頁面的uri為/status
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 #定義的多個后端

server1啟動haproxy服務,看到埠處于監聽狀態

server2和server3啟動httpd服務


訪問172.25.33.1進行測驗,看到輪詢請求

修改系統檔案,添加如下配置


訪問統計頁面172.25.33.1/status

關閉server2的httpd服務

再次訪問,請求都轉發給了server3

在web統計頁面也可以看到app1標紅了,就是出現了問題無法作業

3.2、身份驗證
編譯haproxy組態檔,輸入用戶名密碼
(haproxy組態檔修改后,必須使用reload,不能restart,否則會使連接斷開)


配置生效后訪問web頁面,需要登陸

3.3、自定義路由監控器
可以將設定的符合監控條件的url轉發到指定服務器
編譯haproxy組態檔,并重新加載服務:當訪問路徑以/static /images等開頭,以.jpg .gif等結尾時,跳入backend static模塊,由該模塊內server提供服務


在server2網站目錄內創建images檔案夾并放入一張jpg格式的圖片

現在訪問172.25.33.1/images/rabbit.jpg,因為設定了自定義路由,可以訪問到server2里的檔案圖片

另一個例子,我們監控php頁面
首先,在server2中安裝php

在server2網站目錄下撰寫一個簡單的php頁面

在server1的haproxy組態檔中添加如下配置,然后重新加載服務


測驗訪問,可以看到我們在訪問以.php結尾的url時,會訪問到server2的php頁面

3.4、負載均衡權重
編譯haproxy組態檔,將app1(也就是server2)的權重設定為2

重新加載haproxy服務

訪問172.25.33.1,發現在輪詢種server2占的次數是server3的兩倍,因為haproxy中服務器默認權重是1,我們把server2設定為2,權重增加了

3.5、設定備份服務器
在haproxy組態檔中添加如下備份服務器

重新加載服務

將server2和server3的httpd服務關閉


server1查看網路狀態,httpd和haproxy的監聽埠重復了

配置server1的httpd服務,將監聽埠設定為8080

重啟server1的httpd服務,現在可以看到8080埠處于監聽狀態

訪問172.25.33.1,可以看到備份服務器生效

3.6、haproxy日志管理
編輯檔案,加入haproxy的日志資訊


開啟server2和server3的httpd服務


訪問172.25.33.1,可以看到正常輪詢

查看日志記錄,可以看到訪問記錄

3.7、訪問黑名單與錯誤重定向
編輯haproxy的組態檔,添加黑名單

重新加載haproxy服務

用黑名單上的ip對應的主機對172.25.33.1進行訪問,被拒絕

如果不想出現訪問失敗的頁面,而是需要跳轉到別的頁面,我們可以在組態檔中添加如下配置


再次訪問,可以看到沒有報錯頁面,而是跳轉到了組態檔中指定的頁面

3.8、訪問重定向
我們也可以直接做如下配置,讓所有對目標的訪問都重定向到指定的url

撰寫一個簡單的跳轉頁面

測驗訪問,發現頁面被重定向到了我們剛才設定的跳轉頁面

3.9、讀寫分離
目標:訪問流量導向server3服務器,寫入資料時導向server2服務器
在server2和server3上都安裝php

在server2網站目錄下創建index.php和upload_file.php,創建upload檔案夾并賦予權限,用來接收訪問者上傳的檔案

將上一步server2上創建的檔案和檔案夾發送給server3


編輯server1的haproxy組態檔
server3來接收訪問流量,當寫入資料時切換至server2

重新加載haproxy服務

現在測驗,進行檔案上傳


查看日志

現在查看server2和server3的upload檔案夾,發現我們上傳的檔案發送到了server2


4、HAProxy高可用
4.1、pacemaker實作雙機熱備
真實主機上準備高可用插件的檔案夾

server1修改軟體倉庫,配置高可用插件地址

安裝高可用插件pacemaker

為了操作方便,server1生成免密操作密鑰,發送給server4

將server1的倉庫組態檔發送給server4

server1連接server4并為其安裝相關高可用插件

開啟server1和server4的pcsd服務,可以使用pcs命令

修改server1和server4的hacluster認證密碼,然后認證

設定集群的名稱為mycluster,集群內有server1和server4兩個設備

啟動集群內所有服務節點

查看狀態,會出現如下報錯,這個是沒有Fencing設備時,沒有禁用stonith功能,將其禁用就可以了

pcs property set stonith-enabled=false禁用stonith功能,現在沒有報警

在server4上安裝haproxy,并將server1的haproxy組態檔發送給server4


server1和server4啟動haproxy負載均衡,查看網路狀態可以看到80埠處于監聽狀態


測驗訪問

查看pcs支持的腳本和提供者

配置集群管理VIP

可以看到集群狀態里已經獲取到了VIP資訊,測驗訪問看到服務已經成功啟動


在server1中將節點置為后備standby狀態,pcs查看集群狀態,看到vip現在運行在了server4節點

在server4中洗掉vip網路介面,因為server1節點已經為后備狀態了,所以vip網路介面資訊又會自動生成


停止haproxy,會出現下面報錯

server1節點取消后備狀態

server1和server4關閉haproxy服務
將haproxy添加到集群管理

查看集群狀態,可以看到vip運行在server4節點,haproxy運行在server1節點

為了解決不同步的問題,我們將vip和haproxy放入同一個組

現在將server4設為后備狀態,可以看到vip和haproxy都運行在了server1節點

取消server4的后備狀態,看到vip和haproxy還是運行在server1節點

現在關閉server1的haproxy服務,查看集群運行狀態,可以看到haproxy在server1節點的運行出行錯誤和警告

再次開啟haproxy服務,集群運行恢復

再server1中輸入命令echo c > /proc/sysrq-trigger,讓系統崩潰

現在再server4上查看集群狀態,可以看到vip和haproxy服務都轉移到了server4節點,并正常運行


4.2、fence防止檔案系統腦裂
Fence主要的作用是為防止二個服務器同時向資源寫資料,破壞了資源的安全性和一致性從而導致腦裂的發生,
在server1和server4上安裝客戶端fence


查看fence設備和fence設備的元資料

真實主機安裝fence組件

配置fence

此處根據自己的網卡名進行設定,這里介面選擇br0橋接

查看到后續要生成的fence_xvm.key檔案的存放位置
建立fence_xvm.key的存放目錄,并生成fence_xvm.key檔案,然后重啟fence服務

在server1和server4上創建將要存放密鑰檔案的cluster目錄,并將server1和server4節點添加到fence

真實主機將密鑰檔案發送到server1和server4的cluster目錄下

查看集群狀態,可以看到資源在server4節點,fence服務運行在server1

現在測驗,關閉server4的網卡

可以看到server4重啟后fence還在server4,防止資源爭搶

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290985.html
標籤:其他
上一篇:復習Java網路編程.NET包&Java面試題Redis哨兵模式&生活【記錄一個咸魚大學生三個月的奮進生活】022
