文章的翻譯是在課程開始前夕準備的
負載平衡是一種常見的解決方案,用於跨多個主機水平擴展 Web 應用程序,同時為使用者提供對服務的單點存取。
HAProxy 致力於優化資源使用、最大化吞吐量、最小化回應時間並避免任何單一資源過載。 它可以安裝在各種Linux發行版上,例如我們將在本指南中重點介紹的CentOS 8以及系統
HAProxy 特別適合流量非常高的網站,因此經常用於提高多伺服器 Web 服務配置的可靠性和效能。 本指南概述了在 CentOS 8 雲端主機上將 HAProxy 設定為負載平衡器的步驟,然後將流量路由到您的 Web 伺服器。
作為最佳結果的先決條件,您應該至少擁有兩台 Web 伺服器和一台負載平衡伺服器。 Web 伺服器必須至少執行基本的 Web 服務,例如 nginx 或 httpd,才能測試它們之間的負載平衡。
在 CentOS 8 上安裝 HAProxy
由於 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
將以下部分新增至文件。 代替 服務器名稱 統計頁面上應該調用您的伺服器的內容,以及 私有IP — 您想要將 Web 流量導向的伺服器的私人 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
這定義了一個外部名為 http_front 的傳輸層負載平衡器(第 4 層),偵聽連接埠 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
新增新的偵聽器群組後,從前端群組中刪除舊的 stats uri 連結。 完成後,儲存檔案並重新啟動 HAProxy。
sudo systemctl restart haproxy
然後使用新的連接埠號碼再次開啟負載平衡器,並使用您在設定檔中指定的使用者名稱和密碼登入。
http://load_balancer_public_ip:8181
確保所有伺服器仍顯示綠色,然後在瀏覽器中僅開啟負載平衡器 IP,而不開啟任何連接埠號碼。
http://load_balancer_public_ip/
如果您的後端伺服器上至少有某種類型的登入頁面,您會注意到每次重新載入頁面時都會收到來自不同主機的回應。 您可以在配置部分嘗試不同的平衡演算法或查看
結論:HAProxy 負載平衡器
恭喜您成功設定 HAProxy 負載平衡器! 即使使用基本的負載平衡設置,您也可以顯著提高 Web 應用程式的效能和可用性。 本指南只是 HAProxy 負載平衡的介紹,它的功能遠比快速設定指南中涵蓋的內容要多。 我們建議使用不同的配置進行試驗
透過使用多個主機來保護您的 Web 服務並留出空間,負載平衡器本身仍然可能會發生故障點。 您可以透過在多個負載平衡器之間安裝浮動 IP 來進一步提高高可用性。 您可以在我們的網站中找到更多相關信息
關於課程的更多信息
來源: www.habr.com