文章的翻譯是在課程開始前夕準備的

負載平衡是一種常見的解決方案,用於跨多個主機水平擴展 Web 應用程序,同時為使用者提供服務的單一存取點。 是最受歡迎的開源負載平衡軟體之一,它還提供高可用性和代理功能。
HAProxy旨在優化資源利用率、最大化吞吐量、最小化回應時間,並避免單一資源過載。它可以安裝在多種發行版上。 Linux例如 CentOS 8,我們將在本指南以及系統中重點介紹它。 и .

HAProxy 特別適用於高流量網站,因此常用於提升多伺服器 Web 服務配置的可靠性和效能。本指南概述了在雲端主機上將 HAProxy 配置為負載平衡器的步驟。 CentOS 8,然後將流量路由到您的 Web 伺服器。
作為最佳效果的先決條件,您應該至少擁有兩台 Web 伺服器和一台負載平衡伺服器。為了測試它們之間的負載平衡,Web 伺服器至少應該執行一個基本的 Web 服務,例如 nginx 或 httpd。
在…上安裝 HAProxy CentOS 8
由於 HAProxy 是一個快速發展的開源應用程序,因此您可以在標準儲存庫中找到該發行版。 CentOS可能不是最新版本。若要查看目前版本,請執行以下命令:
sudo yum info haproxy
HAProxy 始終提供三個穩定版本供選擇:兩個最近支援的版本和第三個仍接收關鍵更新的舊版本。您可以隨時檢查 HAProxy 網站上列出的最新穩定版本,然後決定要使用哪個版本。
在本指南中,我們將安裝最新的穩定版本 2.0,該版本在撰寫本文時尚未在標準儲存庫中提供。您需要從原始來源安裝它。但首先,請檢查您是否具備下載和編譯程式的必要條件。
sudo yum install gcc pcre-devel tar make -y
使用以下命令下載原始碼。您可以存取以下網址檢查是否有更新版本 .
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz
下載完成後,使用以下命令解壓縮檔案:
tar xzvf ~/haproxy.tar.gz -C ~/
進入包含來源檔案的解壓縮目錄:
cd ~/haproxy-2.0.7
然後為你的系統編譯程式:
make TARGET=linux-glibc
最後,安裝 HAProxy 本身:
sudo make install
HAProxy 現在已安裝,但需要一些額外的操作才能使其運作。下面我們繼續設定軟體和服務。
為你的伺服器設定 HAProxy
現在為 HAProxy 條目新增以下目錄和統計檔案:
sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy
sudo touch /var/lib/haproxy/stats
為二進位檔案建立符號鏈接,以便您可以以普通使用者身分執行 HAProxy 命令:
sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
如果您想將代理伺服器作為服務新增至系統中,請將 haproxy.init 檔案從範例複製到您的 /etc/init.d 目錄。編輯檔案權限以便腳本運行,然後重新載入 systemd 守護程式:
sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload
您還需要允許服務在系統啟動時自動重新啟動:
sudo chkconfig haproxy on
為了方便起見,也建議新增用戶來執行 HAProxy:
sudo useradd -r haproxy
此後,您可以使用以下命令再次檢查已安裝的版本號:
haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/
在我們的例子中,版本應該是 2.0.7,如上面的範例輸出所示。
最後,防火牆 CentOS 預設情況下,防火牆版本 8 對本項目限制較多。請使用以下命令允許必要的服務並重新啟動防火牆:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload
負載平衡器設定
設定 HAProxy 是一個相當簡單的過程。基本上,您需要做的就是告訴 HAProxy 它應該監聽什麼連接以及應該將它們中繼到哪裡。
這是透過建立具有定義設定的設定檔 /etc/haproxy/haproxy.cfg 來完成的。您可以閱讀有關 HAProxy 配置參數 ,如果您想了解更多。
傳輸層(第 4 層)的負載平衡
讓我們從基本設定開始。建立新的設定文件,例如使用 vi 使用以下命令:
sudo vi /etc/haproxy/haproxy.cfg
將以下部分新增至文件。代替 服務器名稱 在統計頁面上應該如何呼叫你的伺服器,以及 private_ip — 您想要引導網路流量到的伺服器的私人 IP 位址。您可以檢查私人 IP 位址 並在選項卡上 私人網絡 在菜單上 網絡.
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
這定義了一個傳輸層 4 負載平衡器,其外部名稱為 http_front,監聽連接埠 80,然後將流量路由到名為 http_back 的預設後端。附加統計資料/haproxy?stats 連接到指定位址的統計資訊頁面。
不同的負載平衡演算法。
在後端部分指定伺服器允許 HAProxy 在可能的情況下根據循環演算法使用這些伺服器進行負載平衡。
平衡演算法用於確定每個連接傳遞到後端的哪個伺服器。以下是一些有用的選項:
- 循環賽: 每個伺服器依照其權重輪流使用。這是最流暢、最公平的演算法,其中伺服器的處理時間保持均勻分佈。該演算法是動態的,允許您動態調整伺服器權重。
- 最少連線數: 選擇連線數最少的伺服器。相同負載的伺服器之間進行循環調度。對於長會話(例如 LDAP、SQL、TSE 等)建議使用此演算法,但對於短會話(例如 HTTP)則不太合適。
- 第一: 第一個具有可用連線槽的伺服器接收連線。伺服器會依照從最低數字 ID 到最高數字 ID 的順序進行選擇,預設情況下,這與伺服器在伺服器叢集中的位置相對應。一旦伺服器達到 maxconn 值,就會使用下一個伺服器。
- 資源: 對來源 IP 位址進行雜湊處理,然後除以正在執行的伺服器的總權重,以確定哪個伺服器將接收請求。這樣,相同的客戶端 IP 位址將始終轉到相同的伺服器,而伺服器保持不變。
在應用層(第 7 層)設定負載平衡
另一個可用選項是將負載平衡器配置為在應用程式層(第 7 層)運行,這在您的 Web 應用程式的各個部分位於不同主機上時很有用。這可以透過調節連接傳輸來實現,例如透過 URL。
使用文字編輯器開啟 HAProxy 設定檔:
sudo vi /etc/haproxy/haproxy.cfg
然後根據以下範例配置前端和後端段:
frontend http_front
bind *:80
stats uri /haproxy?stats
acl url_blog path_beg /blog
use_backend blog_back if url_blog
default_backend http_back
backend http_back
balance roundrobin
server server_name1 private_ip1:80 check
server server_name2 private_ip2:80 check
backend blog_back
server server_name3 private_ip3:80 check
前端宣告一個名為 url_blog 的 ACL 規則,該規則適用於所有以 /blog 開頭的路徑的連接。 Use_backend 指定符合 url_blog 條件的連線應由名為 blog_back 的後端提供服務,所有其他要求都由預設後端處理。
在後端,設定了兩組伺服器:http_back(與先前一樣)和一組名為 blog_back 的新伺服器,用於處理與 example.com/blog 的連接。
更改設定後,儲存檔案並使用以下命令重新啟動 HAProxy:
sudo systemctl restart haproxy
如果在啟動時收到任何警告或錯誤訊息,請檢查您的配置並確保已建立所有必要的文件和資料夾,然後嘗試重新啟動。
測試設定
一旦 HAProxy 設定並執行,請在瀏覽器中開啟負載平衡器伺服器的公用 IP 位址並檢查您是否正確連接到後端。配置中的stats uri參數在指定的位址建立統計頁面。
http://load_balancer_public_ip/haproxy?stats
當您載入統計資料頁面時,如果所有伺服器都顯示綠色,則表示設定成功!

統計頁麵包含一些用於追蹤您的網站主機的有用信息,包括正常運行時間/停機時間和會話次數。如果伺服器標記為紅色,請確保伺服器已啟動並且您可以從負載平衡器機器 ping 它。
如果您的負載平衡器沒有回應,請確保 HTTP 連線沒有被防火牆阻止。也要使用以下指令確保 HAProxy 正在運作:
sudo systemctl status haproxy
使用密碼保護統計頁面
然而,如果統計資訊頁面只是簡單地列在前端,那麼它就會向公眾開放,這可能不是一個好主意。相反,您可以透過將下列範例新增至 haproxy.cfg 檔案末尾來為其指派自訂連接埠號碼。代替 用戶名 и 密碼 安全的東西:
listen stats
bind *:8181
stats enable
stats uri /
stats realm Haproxy Statistics
stats auth username:password
新增新的監聽器群組後,從前端群組中刪除舊的統計 uri 連結。完成後,儲存檔案並重新啟動 HAProxy。
sudo systemctl restart haproxy
然後使用新的連接埠號碼再次開啟負載平衡器,並使用您在設定檔中指定的使用者名稱和密碼登入。
http://load_balancer_public_ip:8181
確保所有伺服器仍然顯示綠色,然後在瀏覽器中僅開啟負載平衡器 IP,而不開啟任何連接埠號碼。
http://load_balancer_public_ip/
如果您的後端伺服器上有各種各樣的登入頁面,您會注意到每次重新載入頁面時,您都會收到來自不同主機的回應。您可以在配置部分嘗試不同的平衡演算法,或查看 .
結論:HAProxy 負載平衡器
恭喜您成功設定 HAProxy 負載平衡器!即使只採用基本的負載平衡設置,您也可以顯著提高 Web 應用程式的效能和可用性。本指南僅是使用 HAProxy 進行負載平衡的介紹,其功能遠不止於快速設定指南中所描述的。我們建議使用以下方法嘗試不同的配置 ,可供 HAProxy 使用,然後開始為您的生產環境規劃負載平衡。
雖然使用多台主機透過冗餘保護您的 Web 服務,但負載平衡器本身仍可能出現單點故障。您可以透過在多個負載平衡器之間設定浮動 IP 來進一步提高高可用性。您可以在我們的 .
有關課程的更多信息 ***
來源: www.habr.com
