佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫 > Linux系統(tǒng)下使用HAProxy配置HTTP負(fù)載均衡系統(tǒng)的方法

Linux系統(tǒng)下使用HAProxy配置HTTP負(fù)載均衡系統(tǒng)的方法

熱門標(biāo)簽:百度競(jìng)價(jià)點(diǎn)擊價(jià)格的計(jì)算公式 家政服務(wù)網(wǎng)絡(luò) 外呼系統(tǒng) 美團(tuán) 電話機(jī)器人搭建 硅谷的囚徒呼叫中心 服務(wù)器配置 解決方案

如今對(duì)基于互聯(lián)網(wǎng)的應(yīng)用和服務(wù)的要求越來越大,這給廣大的IT管理員施加了越來越大的壓力。面對(duì)突如其來的流量猛增、自生的流量增加或者是內(nèi)部挑戰(zhàn)(比如硬件故障和緊急維護(hù)),不管怎樣,你的互聯(lián)網(wǎng)應(yīng)用都必須保持隨時(shí)可用。連現(xiàn)代化的開發(fā)運(yùn)營(yíng)和持續(xù)交付做法也會(huì)危及互聯(lián)網(wǎng)服務(wù)的可靠性和一貫表現(xiàn)。

無法預(yù)測(cè)或缺乏一貫的表現(xiàn)是你所無法承受的。那么,我們?nèi)绾文芟@些缺點(diǎn)呢?在大多數(shù)情況下,一套合適的負(fù)載均衡解決方案有望滿足這個(gè)要求。今天我將為各位介紹如何使用HAProxy搭建一套HTTP負(fù)載均衡系統(tǒng)。

HTTP負(fù)載均衡簡(jiǎn)介

HTTP負(fù)載均衡是一種網(wǎng)絡(luò)解決方案,負(fù)責(zé)在托管相同應(yīng)用內(nèi)容的幾臺(tái)服務(wù)器之間分配進(jìn)入的HTTP或HTTPS流量。由于在多臺(tái)可用服務(wù)器之間均衡了應(yīng)用請(qǐng)求,負(fù)載均衡系統(tǒng)就能防止任何應(yīng)用服務(wù)器變成單一故障點(diǎn),因而提高了整體的應(yīng)用可用性和響應(yīng)能力。它還讓你可以隨著不斷變化的工作負(fù)載,輕松地縮小/擴(kuò)大部署的應(yīng)用系統(tǒng)的規(guī)模,只需添加或刪除額外的應(yīng)用服務(wù)器。

哪里使用負(fù)載均衡、何時(shí)使用?

由于負(fù)載均衡系統(tǒng)改進(jìn)了服務(wù)器的利用率,最大限度地提高了可用性,只要你的服務(wù)器開始面臨繁重負(fù)載,或者正為一個(gè)較龐大的項(xiàng)目規(guī)劃架構(gòu),就應(yīng)該使用它。事先規(guī)劃好負(fù)載均衡系統(tǒng)的用途是個(gè)好習(xí)慣。那樣,未來你需要擴(kuò)展環(huán)境規(guī)模時(shí),它會(huì)證明其用途。

HAProxy是什么東東?

HAProxy是一種流行的開源負(fù)載均衡和代理系統(tǒng),面向GNU/Linux平臺(tái)上的TCP/HTTP服務(wù)器。HAProxy采用了單一線程的事件驅(qū)動(dòng)型架構(gòu)而設(shè)計(jì),它能夠輕松地處理10G網(wǎng)卡線路速度,現(xiàn)廣泛應(yīng)用于許多生產(chǎn)環(huán)境中。其功能特性包括:自動(dòng)檢查健康狀況、可定制的負(fù)載均衡算法、支持HTTPS/SSL以及會(huì)話速率限制等。

我們?cè)诒窘坛讨幸_(dá)到什么樣的目的?

在本教程中,我們將逐步介紹為HTTP網(wǎng)站服務(wù)器配置基于HAProxy的負(fù)載均衡系統(tǒng)這個(gè)過程。

前提條件

你至少需要一臺(tái)(最好是兩臺(tái))網(wǎng)站服務(wù)器來證實(shí)所搭建負(fù)載均衡系統(tǒng)的功能。我們假設(shè),后端HTTP網(wǎng)站服務(wù)器已經(jīng)搭建并運(yùn)行起來。

將HAProxy安裝到Linux上

就大多數(shù)發(fā)行版而言,我們可以使用你所用發(fā)行版的軟件包管理器來安裝HAProxy。

將HAProxy安裝到Debian上

在Debian中,我們需要為Wheezy添加向后移植功能。為此,請(qǐng)?jiān)?etc/apt/sources.list.d中創(chuàng)建一個(gè)名為“backports.list”的新文件,其內(nèi)容如下:

  1. deb http://cdn.debian.net/debian wheezy­backports main 

更新你的軟件庫數(shù)據(jù),并安裝HAProxy。

  1. # apt­ get update  # apt ­get install haproxy 

將HAProxy安裝到Ubuntu上

  1. # apt ­get install haproxy 

將HAProxy安裝到CentOS和RHEL上

  1. # yum install haproxy 

配置HAProxy

在本教程中,我們假設(shè)有兩臺(tái)HTTP網(wǎng)站服務(wù)器已搭建并運(yùn)行起來,其IP地址分別為192.168.100.2和192.168.100.3。我們還假設(shè),負(fù)載均衡系統(tǒng)將在IP地址為192.168.100.4的那臺(tái)服務(wù)器處進(jìn)行配置。

為了讓HAProxy發(fā)揮功用,你需要更改/etc/haproxy/haproxy.cfg中的幾個(gè)項(xiàng)目。這些變更在本章節(jié)中予以描述。萬一某個(gè)配置對(duì)不同的GNU/Linux發(fā)行版而言有所不同,會(huì)在相應(yīng)段落中加以注明。

1. 配置日志功能

你首先要做的工作之一就是,為你的HAProxy建立合適的日志功能,這對(duì)將來進(jìn)行調(diào)試大有用處。日志配置內(nèi)容位于/etc/haproxy/haproxy.cfg的global部分。下面這些是針對(duì)特定發(fā)行版的指令,用于為HAProxy配置日志。

CentOS或RHEL:

要想在CentOS/RHEL上啟用日志功能,把:

log 127.0.0.1 local2

換成:

log 127.0.0.1 local0

下一步,在/var/log中為HAProxy創(chuàng)建單獨(dú)的日志文件。為此,我們需要改動(dòng)當(dāng)前的rsyslog配置。為了讓配置簡(jiǎn)單而清楚,我們將在/etc/rsyslog.d/中創(chuàng)建一個(gè)名為haproxy.conf的新文件,其內(nèi)容如下。

  1. $ModLoad imudp   $UDPServerRun 514    
  2. $template Haproxy,"%msg%\n"   local0.=info ­/var/log/haproxy.log;Haproxy   
  3. local0.notice ­/var/log/haproxy­status.log;Haproxy   local0.* ~   

該配置將把基于$template的所有HAProxy消息隔離到/var/log中的日志文件?,F(xiàn)在,重啟rsyslog,讓變更內(nèi)容生效。

  1. # service rsyslog restart 

Debian或Ubuntu:

要想在Debian或Ubuntu上為HAProxy啟用日志功能,把:

  1. log /dev/log local0  log /dev/log local1 notice 

換成:

  1. log 127.0.0.1 local0 

下一步,為HAProxy配置單獨(dú)的日志文件,編輯/etc/rsyslog.d/中一個(gè)名為haproxy.conf的文件(或者Debian中的49-haproxy.conf),其內(nèi)容如下。

  1. $ModLoad imudp   $UDPServerRun 514    
  2. $template Haproxy,"%msg%\n"   local0.=info ­/var/log/haproxy.log;Haproxy   
  3. local0.notice ­/var/log/haproxy­status.log;Haproxy   local0.* ~   

該配置將把基于$template的所有HAProxy消息隔離到/var/log中的日志文件。現(xiàn)在,重啟rsyslog,讓變更內(nèi)容生效。

  1. # service rsyslog restart 

2. 設(shè)置默認(rèn)值

下一步是為HAProxy設(shè)置默認(rèn)變量。找到/etc/haproxy/haproxy.cfg中的defaults部分,把它換成下列配置。

  1. log     global   mode    http   
  2. option  httplog   option  dontlognull   
  3. retries 3   option redispatch   
  4. maxconn 20000   contimeout      5000   
  5. clitimeout      50000   srvtimeout      50000  

上述配置推薦HTTP負(fù)載均衡器使用,但可能不是最適合你環(huán)境的解決方案。如果那樣,請(qǐng)參閱HAProxy參考手冊(cè)頁,進(jìn)行適當(dāng)?shù)母膭?dòng)和調(diào)整。

3. 網(wǎng)站服務(wù)器集群的配置

網(wǎng)站服務(wù)器集群(Webfarm)的配置定義了可用的HTTP服務(wù)器集群。我們所建負(fù)載均衡系統(tǒng)的大部分設(shè)置都將放在這里。現(xiàn)在,我們將創(chuàng)建一些基本的配置,我們的節(jié)點(diǎn)將在這里加以定義。把從frontend部分到文件末尾的所有配置換成下列代碼:

  1. listen webfarm *:80        mode http   
  2.      stats enable        stats uri /haproxy?stats   
  3.      stats realm Haproxy\&;Statistics        stats auth haproxy:stats   
  4.      balance roundrobin        cookie LBN insert indirect nocache   
  5.      option httpclose        option forwardfor   
  6.      server web01 192.168.100.2:80 cookie node1 check        server web02 192.168.100.3:80 cookie node2 check  

“listen webfarm *:80”這一行定義了我們的負(fù)載均衡系統(tǒng)將偵聽哪些接口。出于本教程的需要,我將該值設(shè)為“*”,這讓負(fù)載均衡系統(tǒng)偵聽我們的所有接口。在實(shí)際場(chǎng)景下,這可能不合意,應(yīng)該換成可從互聯(lián)網(wǎng)來訪問的某個(gè)接口。

  1. stats enable   stats uri /haproxy?stats   
  2. stats realm Haproxy\&;Statistics   stats auth haproxy:stats  

上述設(shè)置聲明,可以在http://load-balancer-IP>/haproxy?stats處訪問負(fù)載均衡系統(tǒng)的統(tǒng)計(jì)數(shù)字。這種訪問由簡(jiǎn)單的HTTP驗(yàn)證以及登錄名“haproxy”和密碼“stats”來確保安全。這些設(shè)置應(yīng)該換成你自己的登錄信息。如果你不想讓這些統(tǒng)計(jì)數(shù)字被人看到,那么可以完全禁用它們。

下面是HAProxy統(tǒng)計(jì)數(shù)字的一個(gè)例子。

“balance roundrobin”這一行定義了我們將使用哪種類型的負(fù)載均衡。在本教程中,我們將使用簡(jiǎn)單的輪叫調(diào)度算法,這對(duì)HTTP負(fù)載均衡來說完全綽綽有余。HAProxy還提供了其他類型的負(fù)載均衡:

•leastconn:連接數(shù)最少的服務(wù)器優(yōu)先接收連接。

•source:對(duì)源IP地址進(jìn)行哈希處理,用運(yùn)行中服務(wù)器的總權(quán)重除以哈希值,即可決定哪臺(tái)服務(wù)器將接收請(qǐng)求。

•uri:URI的左邊部分(問號(hào)前面)經(jīng)哈希處理,用運(yùn)行中服務(wù)器的總權(quán)重除以哈希值。所得結(jié)果決定哪臺(tái)服務(wù)器將接收請(qǐng)求。

•url_param:變量中指定的URL參數(shù)將在每個(gè)HTTP GET請(qǐng)求的查詢串中進(jìn)行查詢。你基本上可以將使用蓄意制作的URL(crafted URL)的請(qǐng)求鎖定于特定的負(fù)載均衡節(jié)點(diǎn)。

•hdr(name):HTTP頭name> 將在每個(gè)HTTP請(qǐng)求中進(jìn)行查詢,被定向到特定節(jié)點(diǎn)。

“cookie LBN insert indirect nocache”這一行讓我們的負(fù)載均衡系統(tǒng)存儲(chǔ)持久性cookie,這讓我們得以準(zhǔn)確查明集群中的哪個(gè)節(jié)點(diǎn)用于某一個(gè)會(huì)話。這些節(jié)點(diǎn)cookie將與指定的名稱一并存儲(chǔ)起來。在我們這個(gè)例子中,我使用了“LBN”,但你可以指定自己喜歡的任意名稱。節(jié)點(diǎn)將為該cookie把字符串作為一個(gè)值而存儲(chǔ)起來。

  1. server web01 192.168.100.2:80 cookie node1 check   server web02 192.168.100.3:80 cookie node2 check   

上述部分對(duì)網(wǎng)站服務(wù)器節(jié)點(diǎn)集群進(jìn)行了定義。每臺(tái)服務(wù)器都用內(nèi)部名稱(比如web01和web02)、IP地址和獨(dú)特的cookie串來表示。cookie串可以定義為你需要的任何名稱。我使用了簡(jiǎn)單的node1、node2 ... node(n)。

啟動(dòng)HAProxy

你完成了配置工作后,可以啟動(dòng)HAProxy,驗(yàn)證一切按預(yù)期運(yùn)行。

在Centos/RHEL上啟動(dòng)HAProxy

使用下列指令,讓HAProxy能夠在系統(tǒng)啟動(dòng)后啟動(dòng),并打開它:

  1. # chkconfig haproxy on  # service haproxy start  

當(dāng)然,別忘了啟用防火墻中的端口80,如下所示。

CentOS/RHEL 7上的防火墻:

  1. # firewall­cmd ­­permanent ­­zone=public ­­add­port=80/tcp  # firewall­cmd ­­reload  

CentOS/RHEL 6上的防火墻:

把下面這一行添加到/etc/sysconfig/iptables中的這部分“:OUTPUT ACCEPT”:

  1. A INPUT ­m state ­­state NEW ­m tcp ­p tcp ­­dport 80 ­j ACCEPT 

然后重啟iptables:

  1. # service iptables restart 

在Debian上啟動(dòng)HAProxy

使用下列指令啟動(dòng)HAProxy:

  1. # service haproxy start 

別忘了啟用防火墻中的端口80,為此把下面這一行添加到/etc/iptables.up.rules:

  1. A INPUT ­p tcp ­­dport 80 ­j ACCEPT 

在Ubuntu上啟動(dòng)HAProxy

讓HAProxy能夠在系統(tǒng)啟動(dòng)后啟動(dòng),只要在/etc/default/haproxy中將“ENABLED”選項(xiàng)設(shè)為“1”:

  1. ENABLED=1 

啟動(dòng)HAProxy:

  1. # service haproxy start 

然后啟用防火墻中的端口80:

  1. # ufw allow 80 

測(cè)試HAProxy

為了檢查HAproxy是否在正常工作,我們可以執(zhí)行下列步驟:

首先,用下列內(nèi)容準(zhǔn)備好test.php文件:

  1. ?php header('Content-Type: text/plain');  
  2. echo "Server IP: ".

    該P(yáng)HP文件將告訴我們哪臺(tái)服務(wù)器(即負(fù)載均衡系統(tǒng))轉(zhuǎn)發(fā)請(qǐng)求,哪臺(tái)后端網(wǎng)站服務(wù)器實(shí)際處理請(qǐng)求。

    把該P(yáng)HP文件放到這兩臺(tái)后端網(wǎng)站服務(wù)器的根目錄下?,F(xiàn)在,使用curl命令,從負(fù)載均衡系統(tǒng)(192.168.100.4)提取這個(gè)PHP文件。

      1. # chkconfig haproxy on  # service haproxy start  
      nbsp;curl http://192.168.100.4/test.php 

    我們多次運(yùn)行這個(gè)命令時(shí),應(yīng)該會(huì)看到下面兩個(gè)輸出交替出現(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

    如果我們停止這兩臺(tái)后端網(wǎng)站服務(wù)器中的其中一臺(tái),curl命令應(yīng)該仍會(huì)執(zhí)行,將請(qǐng)求定向到另一臺(tái)可用的網(wǎng)站服務(wù)器。

    結(jié)束語

    至此,你應(yīng)該有了一套完全實(shí)用的負(fù)載均衡系統(tǒng),能夠在輪叫循環(huán)模式下為你的網(wǎng)站節(jié)點(diǎn)提供請(qǐng)求。與往常一樣,你可以隨意更改配置,讓它更適合自己的基礎(chǔ)設(shè)施。希望本教程幫助你讓自己的網(wǎng)站項(xiàng)目具有更強(qiáng)的抗壓力和更高的可用性。

    正如大家已經(jīng)注意到的那樣,本教程所含的設(shè)置適用于僅僅一套負(fù)載均衡系統(tǒng)。這意味著,我們把一個(gè)單一故障點(diǎn)換成了另一個(gè)單一故障點(diǎn)。在實(shí)際場(chǎng)景下,你應(yīng)該部署至少兩套或三套負(fù)載均衡系統(tǒng),以防范可能出現(xiàn)的任何故障,但這不在本教程的討論范圍之內(nèi)。

    要是你有什么問題或建議,歡迎留言。謝謝閱讀,希望能幫到大家,請(qǐng)繼續(xù)關(guān)注腳本之家,我們會(huì)努力分享更多優(yōu)秀的文章。

    英文:http://xmodulo.com/haproxy-http-load-balancer-linux.html

標(biāo)簽:南昌 烏蘭察布 韶關(guān) 北海 防城港 臨沂 撫州 邢臺(tái)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux系統(tǒng)下使用HAProxy配置HTTP負(fù)載均衡系統(tǒng)的方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    怀远县| 巴东县| 宜君县| 平和县| 灵武市| 定兴县| 观塘区| 乌海市| 锡林浩特市| 嵊州市| 九台市| 曲水县| 萨迦县| 阳朔县| 武川县| 南郑县| 枣阳市| 汉中市| 沂南县| 班玛县| 汝阳县| 岳阳市| 和田县| 金寨县| 洞口县| 碌曲县| 晋中市| 莱阳市| 龙门县| 浦县| 达孜县| 禄丰县| 改则县| 万州区| 仙桃市| 台州市| 微博| 星子县| 阳曲县| 新余市| 漾濞|