在 CentOS 上安裝 HAProxy 負載平衡器

文章的翻譯是在課程開始前夕準備的 “Linux 管理員。 虛擬化與叢集"

在 CentOS 上安裝 HAProxy 負載平衡器

負載平衡是一種常見的解決方案,用於跨多個主機水平擴展 Web 應用程序,同時為使用者提供對服務的單點存取。 HAProxy的 是最受歡迎的開源負載平衡軟體之一,還提供高可用性和代理功能。

HAProxy 致力於優化資源使用、最大化吞吐量、最小化回應時間並避免任何單一資源過載。 它可以安裝在各種Linux發行版上,例如我們將在本指南中重點介紹的CentOS 8以及系統 Debian 8的 и Ubuntu的16.

在 CentOS 上安裝 HAProxy 負載平衡器

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

使用以下命令下載原始碼。 您可以檢查是否有更新的版本可用 HAProxy 下載頁面.

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位址 在UpCloud控制面板上 並在選項卡上 私人網絡 在菜單上 網絡.

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

當您載入統計頁面時,如果您的所有伺服器都顯示綠色,則設定成功!

在 CentOS 上安裝 HAProxy 負載平衡器

統計頁麵包含一些用於追蹤網路主機的有用信息,包括啟動/停機時間和會話數量。 如果伺服器標記為紅色,請確保伺服器已開啟並且可以從負載平衡器電腦對其執行 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 負載平衡的介紹,它的功能遠比快速設定指南中涵蓋的內容要多。 我們建議使用不同的配置進行試驗 廣泛的文檔,可供 HAProxy 使用,然後開始為您的生產環境規劃負載平衡。

透過使用多個主機來保護您的 Web 服務並留出空間,負載平衡器本身仍然可能會發生故障點。 您可以透過在多個負載平衡器之間安裝浮動 IP 來進一步提高高可用性。 您可以在我們的網站中找到更多相關信息 關於UpCloud上的浮動IP位址的文章.

關於課程的更多信息 “Linux 管理員。 虛擬化與叢集"***

來源: www.habr.com

添加評論