日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
用HAProxy實(shí)現(xiàn)網(wǎng)絡(luò)流量的負(fù)載平衡

安裝、配置和運(yùn)行 HAProxy,在幾個(gè)網(wǎng)絡(luò)或應(yīng)用服務(wù)器之間分配網(wǎng)絡(luò)流量。

“只有客戶(hù)發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個(gè)不僅審美在線(xiàn),而且實(shí)用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對(duì)成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無(wú)止境。

不是只有在一個(gè)大型公司工作才需要使用負(fù)載平衡器。你可能是一個(gè)業(yè)余愛(ài)好者,用幾臺(tái)樹(shù)莓派電腦自我托管一個(gè)網(wǎng)站。也許你是一個(gè)小企業(yè)的服務(wù)器管理員;也許你確實(shí)在一家大公司工作。無(wú)論你的情況如何,你都可以使用 HAProxy 負(fù)載平衡器來(lái)管理你的流量。

HAProxy 被稱(chēng)為“世界上最快和使用最廣泛的軟件負(fù)載平衡器”。它包含了許多可以使你的應(yīng)用程序更加安全可靠的功能,包括內(nèi)置的速率限制、異常檢測(cè)、連接排隊(duì)、健康檢查以及詳細(xì)的日志和指標(biāo)。學(xué)習(xí)本教程中所涉及的基本技能和概念,將有助于你使用 HAProxy 建立一個(gè)更強(qiáng)大的、遠(yuǎn)為強(qiáng)大的基礎(chǔ)設(shè)施。

為什么需要一個(gè)負(fù)載平衡器?

負(fù)載平衡器是一種在幾個(gè)網(wǎng)絡(luò)或應(yīng)用服務(wù)器之間輕松分配連接的方法。事實(shí)上,HAProxy 可以平衡任何類(lèi)型的傳輸控制協(xié)議(TCP)流量,包括 RDP、FTP、WebSockets 或數(shù)據(jù)庫(kù)連接。分散負(fù)載的能力意味著你不需要因?yàn)槟愕木W(wǎng)站流量比谷歌大就購(gòu)買(mǎi)一個(gè)擁有幾十萬(wàn) G 內(nèi)存的大型網(wǎng)絡(luò)服務(wù)器。

負(fù)載平衡器還為你提供了靈活性。也許你現(xiàn)有的網(wǎng)絡(luò)服務(wù)器不夠強(qiáng)大,無(wú)法滿(mǎn)足一年中繁忙時(shí)期的峰值需求,你想增加一個(gè),但只是暫時(shí)的。也許你想增加一些冗余,以防一個(gè)服務(wù)器出現(xiàn)故障。有了 HAProxy,你可以在需要時(shí)向后端池添加更多的服務(wù)器,在不需要時(shí)刪除它們。

你還可以根據(jù)情況將請(qǐng)求路由到不同的服務(wù)器。例如,你可能想用幾個(gè)緩存服務(wù)器(如 Varnish)來(lái)處理你的靜態(tài)內(nèi)容,但把任何需要?jiǎng)討B(tài)內(nèi)容的東西,如 API 端點(diǎn),路由到一個(gè)更強(qiáng)大的機(jī)器。

在這篇文章中,我將通過(guò)設(shè)置一個(gè)非?;镜?HAProxy 環(huán)境,使用 HTTPS 來(lái)監(jiān)聽(tīng)安全端口 443,并利用幾個(gè)后端 Web 服務(wù)器。它甚至?xí)⑺羞M(jìn)入預(yù)定義 URL(如 /api/)的流量發(fā)送到不同的服務(wù)器或服務(wù)器池。

安裝 HAProxy

要開(kāi)始安裝,請(qǐng)啟動(dòng)一個(gè)新的 CentOS 8 服務(wù)器或?qū)嵗⑹瓜到y(tǒng)達(dá)到最新?tīng)顟B(tài):

$ sudo yum update -y

這通常會(huì)持續(xù)一段時(shí)間。在等待的時(shí)候給自己拿杯咖啡。

這個(gè)安裝有兩部分:第一部分是安裝 yum 版本的 HAProxy,第二部分是編譯和安裝你的二進(jìn)制文件,用最新的版本覆蓋以前的 HAProxy。用 yum 安裝,在生成 systemd 啟動(dòng)腳本等方面做了很多繁重的工作,所以運(yùn)行 yum install,然后從源代碼編譯,用最新的版本覆蓋 HAProxy 二進(jìn)制:

$ sudo yum install -y haproxy

啟用 HAProxy 服務(wù):

$ sudo systemctl enable haproxy

要升級(jí)到最新版本(版本 2.2,截至本文寫(xiě)作為止),請(qǐng)編譯源代碼。許多人認(rèn)為從源代碼編譯和安裝一個(gè)程序需要很高的技術(shù)能力,但這是一個(gè)相當(dāng)簡(jiǎn)單的過(guò)程。首先,使用 yum 安裝一些提供編譯代碼工具的軟件包:

$ sudo yum install dnf-plugins-core
$ sudo yum config-manager --set-enabled PowerTools
$ sudo yum install -y git ca-certificates gcc glibc-devel \
    lua-devel pcre-devel openssl-devel systemd-devel \
    make curl zlib-devel 

使用 git 獲得最新的源代碼,并改變到 haproxy 目錄:

$ git clone http://git.haproxy.org/git/ haproxy
$ cd haproxy

運(yùn)行以下三個(gè)命令來(lái)構(gòu)建和安裝具有集成了 Prometheus 支持的 HAProxy:

$ make TARGET=linux-glibc USE_LUA=1 USE_OPENSSL=1 USE_PCRE=1 \
    PCREDIR= USE_ZLIB=1 USE_SYSTEMD=1 \
    EXTRA_OBJS="contrib/prometheus-exporter/service-prometheus.o"

$ sudo make PREFIX=/usr install # 安裝到 /usr/sbin/haproxy

通過(guò)查詢(xún)版本來(lái)測(cè)試它:

$ haproxy -v

你應(yīng)該看到以下輸出:

HA-Proxy version 2.2.4-b16390-23 2020/10/09 - https://haproxy.org/

創(chuàng)建后端服務(wù)器

HAProxy 并不直接提供任何流量,這是后端服務(wù)器的工作,它們通常是網(wǎng)絡(luò)或應(yīng)用服務(wù)器。在這個(gè)練習(xí)中,我使用一個(gè)叫做 Ncat 的工具,它是網(wǎng)絡(luò)領(lǐng)域的“瑞士軍刀”,用來(lái)創(chuàng)建一些極其簡(jiǎn)單的服務(wù)器。安裝它:

$ sudo yum install nc -y

如果你的系統(tǒng)啟用了 SELinux,你需要啟用端口 8404,這是用于訪(fǎng)問(wèn) HAProxy 統(tǒng)計(jì)頁(yè)面的端口(下面有解釋?zhuān)?,以及你的后端服?wù)器的端口:

$ sudo dnf install policycoreutils-python-utils
$ sudo semanage port -a -t http_port_t  -p tcp 8404
$ sudo semanage port -a -t http_port_t  -p tcp 10080
$ sudo semanage port -a -t http_port_t  -p tcp 10081
$ sudo semanage port -a -t http_port_t  -p tcp 10082

創(chuàng)建兩個(gè) Ncat 網(wǎng)絡(luò)服務(wù)器和一個(gè) API 服務(wù)器:

$ while true ;
do
nc -l -p 10080 -c 'echo -e "HTTP/1.1 200 OK\n\n This is Server ONE"' ;
done &

$ while true ;
do
nc -l -p 10081 -c 'echo -e "HTTP/1.1 200 OK\n\n This is Server TWO"' ;
done &

$ while true ;
do
nc -l -p 10082 -c 'echo -e "HTTP/1.1 200 OK\nContent-Type: application/json\n\n { \"Message\" :\"Hello, World!\" }"' ;
done &

這些簡(jiǎn)單的服務(wù)器打印出一條信息(如“This is Server ONE”),并運(yùn)行到服務(wù)器停止為止。在現(xiàn)實(shí)環(huán)境中,你會(huì)使用實(shí)際的網(wǎng)絡(luò)和應(yīng)用程序服務(wù)器。

修改 HAProxy 的配置文件

HAProxy 的配置文件是 /etc/haproxy/haproxy.cfg。你在這里進(jìn)行修改以定義你的負(fù)載平衡器。這個(gè) 基本配置 將讓你從一個(gè)工作的服務(wù)器開(kāi)始:

global
    log         127.0.0.1 local2
    user        haproxy
    group       haproxy

defaults 
    mode                    http
    log                     global
    option                  httplog

frontend main
    bind *:80
        
    default_backend web
    use_backend api if { path_beg -i /api/ }
    
    #-------------------------
    # SSL termination - HAProxy handles the encryption.
    #    To use it, put your PEM file in /etc/haproxy/certs  
    #    then edit and uncomment the bind line (75)
    #-------------------------
    # bind *:443 ssl crt /etc/haproxy/certs/haproxy.pem ssl-min-ver TLSv1.2
    # redirect scheme https if !{ ssl_fc }

#-----------------------------
# Enable stats at http://test.local:8404/stats
#-----------------------------

frontend stats
    bind *:8404
    stats enable
    stats uri /stats
#-----------------------------
# round robin balancing between the various backends
#-----------------------------

backend web
    server web1 127.0.0.1:10080 check
    server web2 127.0.0.1:10081 check

#-----------------------------

# API backend for serving up API content
#-----------------------------
backend api
    server api1 127.0.0.1:10082 check

重啟并重新加載 HAProxy

HAProxy 可能還沒(méi)有運(yùn)行,所以發(fā)出命令 sudo systemctl restart haproxy 來(lái)啟動(dòng)(或重新啟動(dòng))它?!爸貑ⅰ?的方法在非生產(chǎn)情況下是很好的,但是一旦你開(kāi)始運(yùn)行,你要養(yǎng)成使用 sudo systemctl reload haproxy 的習(xí)慣,以避免服務(wù)中斷,即使你的配置中出現(xiàn)了錯(cuò)誤。

例如,當(dāng)你對(duì) /etc/haproxy/haproxy.cfg 進(jìn)行修改后,你需要用 sudo systemctl reload haproxy 來(lái)重新加載守護(hù)進(jìn)程,使修改生效。如果有錯(cuò)誤,它會(huì)讓你知道,但繼續(xù)用以前的配置運(yùn)行。用 sudo systemctl status haproxy 檢查 HAProxy 的狀態(tài)。

如果它沒(méi)有報(bào)告任何錯(cuò)誤,你就有一個(gè)正在運(yùn)行的服務(wù)器。在服務(wù)器上用 curl 測(cè)試,在命令行輸入 curl http://localhost/。如果你看到 “This is Server ONE”,那就說(shuō)明一切都成功了!運(yùn)行 curl 幾次,看著它在你的后端池中循環(huán),然后看看當(dāng)你輸入 curl http://localhost/api/ 時(shí)會(huì)發(fā)生什么。在 URL 的末尾添加 /api/ 將把所有的流量發(fā)送到你池子里的第三個(gè)服務(wù)器。至此,你就有了一個(gè)正常運(yùn)作的負(fù)載平衡器

檢查你的統(tǒng)計(jì)資料

你可能已經(jīng)注意到,配置中定義了一個(gè)叫做 stats 的前端,它的監(jiān)聽(tīng)端口是 8404:

frontend stats
    bind *:8404
    stats uri /stats
    stats enable

在你的瀏覽器中,加載 http://localhost:8404/stats。閱讀 HAProxy 的博客 學(xué)習(xí) HAProxy 的統(tǒng)計(jì)頁(yè)面,了解你在這里可以做什么。

一個(gè)強(qiáng)大的負(fù)載平衡器

雖然我只介紹了 HAProxy 的幾個(gè)功能,但你現(xiàn)在有了一個(gè)服務(wù)器,它可以監(jiān)聽(tīng) 80 和 443 端口,將 HTTP 流量重定向到 HTTPS,在幾個(gè)后端服務(wù)器之間平衡流量,甚至將匹配特定 URL 模式的流量發(fā)送到不同的后端服務(wù)器。你還解鎖了非常強(qiáng)大的 HAProxy 統(tǒng)計(jì)頁(yè)面,讓你對(duì)你的系統(tǒng)有一個(gè)很好的概覽。

這個(gè)練習(xí)可能看起來(lái)很簡(jiǎn)單,不要搞錯(cuò)了,你剛剛建立和配置了一個(gè)非常強(qiáng)大的負(fù)載均衡器,能夠處理大量的流量。

為了你方便,我把本文中的所有命令放在了 GitHub Gist 中。



本文名稱(chēng):用HAProxy實(shí)現(xiàn)網(wǎng)絡(luò)流量的負(fù)載平衡
瀏覽地址:http://m.5511xx.com/article/dhdjoip.html