Linux系統(tǒng)下配置HTTP負載均衡系統(tǒng)以扛流量增加

隨著網(wǎng)絡(luò)流量的增加,服務(wù)器開始面臨繁重負載,這時就需要搭配一套HTTP負載均衡系統(tǒng)了,那么Linux下該如何配置HTTP負載均衡系統(tǒng)呢?隨小編一起來學(xué)習(xí)一下吧。
如今對基于互聯(lián)網(wǎng)的應(yīng)用和服務(wù)的要求越來越大,這給廣大的IT管理員施加了越來越大的壓力。面對突如其來的流量猛增、自生的流量增加或者是內(nèi)部挑戰(zhàn)(比如硬件故障和緊急維護),不管怎樣,你的互聯(lián)網(wǎng)應(yīng)用都必須保持隨時可用。連現(xiàn)代化的開發(fā)運營和持續(xù)交付做法也會危及互聯(lián)網(wǎng)服務(wù)的可靠性和一貫表現(xiàn)。
無法預(yù)測或缺乏一貫的表現(xiàn)是你所無法承受的。那么,我們?nèi)绾文芟@些缺點呢?在大多數(shù)情況下,一套合適的負載均衡解決方案有望滿足這個要求。今天我將為各位介紹如何使用HAProxy搭建一套HTTP負載均衡系統(tǒng)。
HTTP負載均衡簡介
HTTP負載均衡是一種網(wǎng)絡(luò)解決方案,負責(zé)在托管相同應(yīng)用內(nèi)容的幾臺服務(wù)器之間分配進入的HTTP或HTTPS流量。由于在多臺可用服務(wù)器之間均衡了應(yīng)用請求,負載均衡系統(tǒng)就能防止任何應(yīng)用服務(wù)器變成單一故障點,因而提高了整體的應(yīng)用可用性和響應(yīng)能力。它還讓你可以隨著不斷變化的工作負載,輕松地縮小/擴大部署的應(yīng)用系統(tǒng)的規(guī)模,只需添加或刪除額外的應(yīng)用服務(wù)器。
哪里使用負載均衡、何時使用?
由于負載均衡系統(tǒng)改進了服務(wù)器的利用率,最大限度地提高了可用性,只要你的服務(wù)器開始面臨繁重負載,或者正為一個較龐大的項目規(guī)劃架構(gòu),就應(yīng)該使用它。事先規(guī)劃好負載均衡系統(tǒng)的用途是個好習(xí)慣。那樣,未來你需要擴展環(huán)境規(guī)模時,它會證明其用途。
HAProxy是什么東東?
HAProxy是一種流行的開源負載均衡和代理系統(tǒng),面向GNU/Linux平臺上的TCP/HTTP服務(wù)器。HAProxy采用了單一線程的事件驅(qū)動型架構(gòu)而設(shè)計,它能夠輕松地處理10G網(wǎng)卡線路速度,現(xiàn)廣泛應(yīng)用于許多生產(chǎn)環(huán)境中。其功能特性包括:自動檢查健康狀況、可定制的負載均衡算法、支持HTTPS/SSL以及會話速率限制等。
我們在本教程中要達到什么樣的目的?
在本教程中,我們將逐步介紹為HTTP網(wǎng)站服務(wù)器配置基于HAProxy的負載均衡系統(tǒng)這個過程。
前提條件
你至少需要一臺(最好是兩臺)網(wǎng)站服務(wù)器來證實所搭建負載均衡系統(tǒng)的功能。我們假設(shè),后端HTTP網(wǎng)站服務(wù)器已經(jīng)搭建并運行起來。
將HAProxy安裝到Linux上
就大多數(shù)發(fā)行版而言,我們可以使用你所用發(fā)行版的軟件包管理器來安裝HAProxy。
將HAProxy安裝到Debian上
在Debian中,我們需要為Wheezy添加向后移植功能。為此,請在/etc/apt/sources.list.d中創(chuàng)建一個名為“backports.list”的新文件,其內(nèi)容如下:
deb http://cdn.debian.net/debian wheezybackports main
更新你的軟件庫數(shù)據(jù),并安裝HAProxy。
# apt get update # apt get install haproxy
將HAProxy安裝到Ubuntu上
# apt get install haproxy
將HAProxy安裝到CentOS和RHEL上
# yum install haproxy
配置HAProxy
在本教程中,我們假設(shè)有兩臺HTTP網(wǎng)站服務(wù)器已搭建并運行起來,其IP地址分別為192.168.100.2和192.168.100.3。我們還假設(shè),負載均衡系統(tǒng)將在IP地址為192.168.100.4的那臺服務(wù)器處進行配置。
為了讓HAProxy發(fā)揮功用,你需要更改/etc/haproxy/haproxy.cfg中的幾個項目。這些變更在本章節(jié)中予以描述。萬一某個配置對不同的GNU/Linux發(fā)行版而言有所不同,會在相應(yīng)段落中加以注明。
1. 配置日志功能
你首先要做的工作之一就是,為你的HAProxy建立合適的日志功能,這對將來進行調(diào)試大有用處。日志配置內(nèi)容位于/etc/haproxy/haproxy.cfg的global部分。下面這些是針對特定發(fā)行版的指令,用于為HAProxy配置日志。
CentOS或RHEL:
要想在CentOS/RHEL上啟用日志功能,把:
log 127.0.0.1 local2
換成:
log 127.0.0.1 local0
下一步,在/var/log中為HAProxy創(chuàng)建單獨的日志文件。為此,我們需要改動當(dāng)前的rsyslog配置。為了讓配置簡單而清楚,我們將在/etc/rsyslog.d/中創(chuàng)建一個名為haproxy.conf的新文件,其內(nèi)容如下。
$ModLoad imudp $UDPServerRun 514 $template Haproxy,“%msg%\n” local0.=info /var/log/haproxy.log;Haproxy local0.notice /var/log/haproxystatus.log;Haproxy local0.* ~
該配置將把基于$template的所有HAProxy消息隔離到/var/log中的日志文件?,F(xiàn)在,重啟rsyslog,讓變更內(nèi)容生效。
# service rsyslog restart
Debian或Ubuntu:
要想在Debian或Ubuntu上為HAProxy啟用日志功能,把:
log /dev/log local0 log /dev/log local1 notice
換成:
log 127.0.0.1 local0
下一步,為HAProxy配置單獨的日志文件,編輯/etc/rsyslog.d/中一個名為haproxy.conf的文件(或者Debian中的49-haproxy.conf),其內(nèi)容如下。
$ModLoad imudp $UDPServerRun 514 $template Haproxy,“%msg%\n” local0.=info /var/log/haproxy.log;Haproxy local0.notice /var/log/haproxystatus.log;Haproxy local0.* ~
該配置將把基于$template的所有HAProxy消息隔離到/var/log中的日志文件?,F(xiàn)在,重啟rsyslog,讓變更內(nèi)容生效。
# service rsyslog restart
2. 設(shè)置默認值
下一步是為HAProxy設(shè)置默認變量。找到/etc/haproxy/haproxy.cfg中的defaults部分,把它換成下列配置。
log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 20000 contimeout 5000 clitimeout 50000 srvtimeout 50000
上述配置推薦HTTP負載均衡器使用,但可能不是最適合你環(huán)境的解決方案。如果那樣,請參閱HAProxy參考手冊頁,進行適當(dāng)?shù)母膭雍驼{(diào)整。
3. 網(wǎng)站服務(wù)器集群的配置
網(wǎng)站服務(wù)器集群(Webfarm)的配置定義了可用的HTTP服務(wù)器集群。我們所建負載均衡系統(tǒng)的大部分設(shè)置都將放在這里?,F(xiàn)在,我們將創(chuàng)建一些基本的配置,我們的節(jié)點將在這里加以定義。把從frontend部分到文件末尾的所有配置換成下列代碼:
listen webfarm *:80 mode http stats enable stats uri /haproxy?stats stats realm Haproxy\ Statistics stats auth haproxy:stats balance roundrobin cookie LBN insert indirect nocache option httpclose option forwardfor server web01 192.168.100.2:80 cookie node1 check server web02 192.168.100.3:80 cookie node2 check
“listen webfarm *:80”這一行定義了我們的負載均衡系統(tǒng)將偵聽哪些接口。出于本教程的需要,我將該值設(shè)為“*”,這讓負載均衡系統(tǒng)偵聽我們的所有接口。在實際場景下,這可能不合意,應(yīng)該換成可從互聯(lián)網(wǎng)來訪問的某個接口。
stats enable stats uri /haproxy?stats stats realm Haproxy\ Statistics stats auth haproxy:stats
上述設(shè)置聲明,可以在http://《load-balancer-IP》/haproxy?stats處訪問負載均衡系統(tǒng)的統(tǒng)計數(shù)字。這種訪問由簡單的HTTP驗證以及登錄名“haproxy”和密碼“stats”來確保安全。這些設(shè)置應(yīng)該換成你自己的登錄信息。如果你不想讓這些統(tǒng)計數(shù)字被人看到,那么可以完全禁用它們。
下面是HAProxy統(tǒng)計數(shù)字的一個例子。
“balance roundrobin”這一行定義了我們將使用哪種類型的負載均衡。在本教程中,我們將使用簡單的輪叫調(diào)度算法,這對HTTP負載均衡來說完全綽綽有余。HAProxy還提供了其他類型的負載均衡:
•leastconn:連接數(shù)最少的服務(wù)器優(yōu)先接收連接。
•source:對源IP地址進行哈希處理,用運行中服務(wù)器的總權(quán)重除以哈希值,即可決定哪臺服務(wù)器將接收請求。
•uri:URI的左邊部分(問號前面)經(jīng)哈希處理,用運行中服務(wù)器的總權(quán)重除以哈希值。所得結(jié)果決定哪臺服務(wù)器將接收請求。
•url_param:變量中指定的URL參數(shù)將在每個HTTP GET請求的查詢串中進行查詢。你基本上可以將使用蓄意制作的URL(crafted URL)的請求鎖定于特定的負載均衡節(jié)點。
•hdr(name):HTTP頭《name》 將在每個HTTP請求中進行查詢,被定向到特定節(jié)點。
“cookie LBN insert indirect nocache”這一行讓我們的負載均衡系統(tǒng)存儲持久性cookie,這讓我們得以準確查明集群中的哪個節(jié)點用于某一個會話。這些節(jié)點cookie將與指定的名稱一并存儲起來。在我們這個例子中,我使用了“LBN”,但你可以指定自己喜歡的任意名稱。節(jié)點將為該cookie把字符串作為一個值而存儲起來。
server web01 192.168.100.2:80 cookie node1 check server web02 192.168.100.3:80 cookie node2 check
上述部分對網(wǎng)站服務(wù)器節(jié)點集群進行了定義。每臺服務(wù)器都用內(nèi)部名稱(比如web01和web02)、IP地址和獨特的cookie串來表示。cookie串可以定義為你需要的任何名稱。我使用了簡單的node1、node2 。。。 node(n)。
啟動HAProxy
你完成了配置工作后,可以啟動HAProxy,驗證一切按預(yù)期運行。
在Centos/RHEL上啟動HAProxy
使用下列指令,讓HAProxy能夠在系統(tǒng)啟動后啟動,并打開它:
# chkconfig haproxy on # service haproxy start
當(dāng)然,別忘了啟用防火墻中的端口80,如下所示。
CentOS/RHEL 7上的防火墻:
# firewallcmd permanent zone=public addport=80/tcp # firewallcmd reload
CentOS/RHEL 6上的防火墻:
把下面這一行添加到/etc/sysconfig/iptables中的這部分“:OUTPUT ACCEPT”:
A INPUT m state state NEW m tcp p tcp dport 80 j ACCEPT
然后重啟iptables:
# service iptables restart
在Debian上啟動HAProxy
使用下列指令啟動HAProxy:
# service haproxy start
別忘了啟用防火墻中的端口80,為此把下面這一行添加到/etc/iptables.up.rules:
A INPUT p tcp dport 80 j ACCEPT
在Ubuntu上啟動HAProxy
讓HAProxy能夠在系統(tǒng)啟動后啟動,只要在/etc/default/haproxy中將“ENABLED”選項設(shè)為“1”:
ENABLED=1
啟動HAProxy:
# service haproxy start
然后啟用防火墻中的端口80:
# ufw allow 80
測試HAProxy
為了檢查HAproxy是否在正常工作,我們可以執(zhí)行下列步驟:
首先,用下列內(nèi)容準備好test.php文件:
《?php header(‘Content-Type: text/plain’); echo “Server IP: ”。
該PHP文件將告訴我們哪臺服務(wù)器(即負載均衡系統(tǒng))轉(zhuǎn)發(fā)請求,哪臺后端網(wǎng)站服務(wù)器實際處理請求。
把該PHP文件放到這兩臺后端網(wǎng)站服務(wù)器的根目錄下。現(xiàn)在,使用curl命令,從負載均衡系統(tǒng)(192.168.100.4)提取這個PHP文件。
# chkconfig haproxy on # service haproxy start nbsp;curl http://192.168.100.4/test.php
我們多次運行這個命令時,應(yīng)該會看到下面兩個輸出交替出現(xiàn)(由于輪叫調(diào)度算法)。
Server IP: 192.168.100.2
X-Forwarded-for: 192.168.100.4
Server IP: 192.168.100.3
X-Forwarded-for: 192.168.100.4
如果我們停止這兩臺后端網(wǎng)站服務(wù)器中的其中一臺,curl命令應(yīng)該仍會執(zhí)行,將請求定向到另一臺可用的網(wǎng)站服務(wù)器。
結(jié)束語
至此,你應(yīng)該有了一套完全實用的負載均衡系統(tǒng),能夠在輪叫循環(huán)模式下為你的網(wǎng)站節(jié)點提供請求。與往常一樣,你可以隨意更改配置,讓它更適合自己的基礎(chǔ)設(shè)施。希望本教程幫助你讓自己的網(wǎng)站項目具有更強的抗壓力和更高的可用性。
正如大家已經(jīng)注意到的那樣,本教程所含的設(shè)置適用于僅僅一套負載均衡系統(tǒng)。這意味著,我們把一個單一故障點換成了另一個單一故障點。在實際場景下,你應(yīng)該部署至少兩套或三套負載均衡系統(tǒng),以防范可能出現(xiàn)的任何故障,但這不在本教程的討論范圍之內(nèi)。
上面就是Linux系統(tǒng)下配置HTTP負載均衡系統(tǒng)的方法介紹了,這里主要使用的是HAProxy,且只介紹了配置一套負載均衡系統(tǒng)的方法,趕緊試試看吧。
相關(guān)文章
Fedora Linux 42 穩(wěn)定版發(fā)布: 帶來大量新功能和軟件更新
Fedora 42昨日發(fā)布,這是 Red Hat 贊助開發(fā)的杰出前沿 Linux 發(fā)行版的最新版,包含大量新功能和軟件更新,使其成為 2025 年上半年發(fā)布的一款出色的 Linux 操作系統(tǒng)之一,內(nèi)2025-04-16如何在Linux查看硬盤信息? 查看Linux硬盤大小類型和硬件信息的5種方法
使用Linux系統(tǒng)的過程中,查看和了解硬盤信息是非常重要的工作,尤其是對于系統(tǒng)管理員而言,那么在Linux系統(tǒng)中如何查看硬盤信息?以下是具體內(nèi)容介紹2025-03-12如何在 Linux 中查看 CPU 詳細信息? 3招輕松查看CPU型號、核心數(shù)和溫度
在日常運維工作中,獲取 CPU 信息是系統(tǒng)運維管理員常見的工作內(nèi)容,無論是為了性能調(diào)優(yōu)、硬件升級還是僅僅滿足好奇心2025-03-11什么是 Arch Linux? 獨樹一幟的Arch Linux發(fā)行版分析
Arch Linux是為簡化,優(yōu)化,現(xiàn)代化,實用主義,用戶中心和多功能性而創(chuàng)建Linux發(fā)行版,究竟是什么讓 Arch 與眾不同?下面我們就來簡要解讀2025-02-19如何在Linux環(huán)境下制作 Win11裝機U盤?
一直用的linux辦公,想要將筆記本電腦從 Linux 系統(tǒng)切換回 Windows 11,我們可以制作一個win11裝機u盤,詳細如下2025-02-17Rsnapshot怎么用? 基于Rsync的強大Linux備份工具使用指南
Rsnapshot 不僅可以備份本地文件,還能通過 SSH 備份遠程文件,接下來詳細介紹如何安裝、配置和使用 Rsnapshot,包括創(chuàng)建每小時、每天、每周和每月的本地備份,以及如何進2025-02-06Linux Kernel 6.13發(fā)布:附更新內(nèi)容及新特性解讀
Linux 內(nèi)核 6.13 正式發(fā)布,新版本引入了惰性搶占支持,簡化內(nèi)核搶占邏輯,通過減少與調(diào)度器相關(guān)的調(diào)用次數(shù),讓內(nèi)核在運行時表現(xiàn)更優(yōu),從而提高效率2025-01-23五大特性引領(lǐng)創(chuàng)新! 深度操作系統(tǒng) deepin 25 Preview預(yù)覽版發(fā)布
今日,深度操作系統(tǒng)正式推出deepin 25 Preview版本,該版本集成了五大核心特性:磐石系統(tǒng)、全新DDE、Treeland窗口合成器、AI For OS以及Distrobox子系統(tǒng)2025-01-18Linux Mint Xia 22.1重磅發(fā)布: 重要更新一覽
Beta 版 Linux Mint“Xia” 22.1 發(fā)布,新版本基于 Ubuntu 24.04,內(nèi)核版本為 Linux 6.8,這次更新帶來了諸多優(yōu)化和改進,進一步鞏固了 Mint 在 Linux 桌面操作系統(tǒng)領(lǐng)域的2025-01-16LinuxMint怎么安裝? Linux Mint22下載安裝圖文教程
Linux Mint22發(fā)布以后,有很多新功能,很多朋友想要下載并安裝,該怎么操作呢?下面我們就來看看詳細安裝指南2025-01-16