溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Haproxy服務(wù)調(diào)優(yōu)及配置內(nèi)容詳解

發(fā)布時(shí)間:2020-07-02 17:34:07 來(lái)源:網(wǎng)絡(luò) 閱讀:760 作者:筱振 欄目:系統(tǒng)運(yùn)維

通過(guò)博文:Nginx+Tomcat實(shí)現(xiàn)負(fù)載均衡群集實(shí)例,可跟做?。。?br/>LVS負(fù)載均衡群集詳解
已經(jīng)能夠使用Nginx、LVS做負(fù)載均衡群集,它們各自都具有各自的特點(diǎn),今天,我們認(rèn)識(shí)一款比較流行的群集調(diào)度工具——Haproxy。

一、Haproxy概述

Haproxy是目前比較流行的一種群集調(diào)度工具,同類群集調(diào)度工具還有很多,比如:LVS和Nginx。相比較而言:LVS性能最好,但是搭建相對(duì)復(fù)雜;Nginx的upstream模塊支持群集功能,但是對(duì)群集節(jié)點(diǎn)健康檢查功能并不強(qiáng),性能也不及Haproxy好。

二、使用Haproxy必須要了解的知識(shí)點(diǎn)

1.HTTP請(qǐng)求

通過(guò)URL訪問(wèn)網(wǎng)站使用的協(xié)議是HTTP協(xié)議,此類請(qǐng)求一般稱為HTTP請(qǐng)求。

HTTP請(qǐng)求的方式分為GET方式和POST方式,二者的區(qū)別:

  • GET方式:內(nèi)容少(一般不可以超過(guò)8kB)、不安全,內(nèi)容直接附加在URL上;
  • POST方式:內(nèi)容多、安全;

當(dāng)使用瀏覽器訪問(wèn)某一個(gè)URL,會(huì)根據(jù)請(qǐng)求URL返回狀態(tài)碼,通常正常是的狀態(tài)碼是:2 X X、3 XX(比如201、301),如果出現(xiàn)異常就會(huì)返回4 X X、5 XX(比如401、501)。

HTTP請(qǐng)求返回狀態(tài)碼詳情,可以參考博文:HTTP請(qǐng)求返回狀態(tài)碼詳解

2.負(fù)載均衡常用調(diào)度算法

利用LVS、Haproxy、Nginx搭建群集最常用的調(diào)度算法有三種:

(1)RR(輪詢算法)

RR(Round Robin):RR算法是最簡(jiǎn)單,也最容易理解,即輪詢調(diào)度。此算法還有一種加權(quán)輪詢,即根據(jù)每個(gè)節(jié)點(diǎn)的權(quán)重輪詢分配訪問(wèn)請(qǐng)求。

此算法主要用于節(jié)點(diǎn)服務(wù)器性能都差不多,要工作都工作;

(2)LC(最小連接數(shù)算法)

LC(Least Connections):即最小連接數(shù)算法,根據(jù)后端的節(jié)點(diǎn)連接數(shù)大小動(dòng)態(tài)分配前端請(qǐng)求。能保證將新的請(qǐng)求分配給連接數(shù)最少的客戶端。由于實(shí)際情況中,各個(gè)節(jié)點(diǎn)的連接數(shù)對(duì)動(dòng)態(tài)釋放,很難出現(xiàn)一樣連接數(shù)的情況,因此此算法想比較RR算法有很大的改進(jìn),是目前用到最多的一種算法。

(3)SH(基于來(lái)源訪問(wèn)調(diào)度算法)

SH(Source Hashing):即基于來(lái)源訪問(wèn)調(diào)度算法,此算法用于一些有Session會(huì)話記錄在服務(wù)器端的場(chǎng)景,可以基于來(lái)源的IP、Cookie等做群集調(diào)度。此算法的好處就是實(shí)現(xiàn)會(huì)話保持,但某些IP訪問(wèn)量非常大時(shí)會(huì)引起負(fù)載不均衡,部分節(jié)點(diǎn)訪問(wèn)量大,影響業(yè)務(wù)使用。

3.常見(jiàn)的Web群集調(diào)度器

目前最常見(jiàn)的Web群集調(diào)度器分為軟件和硬件;軟件通常使用開(kāi)源的LVS、Haproxy、Nginx;硬件一般使用比較多的是F5,也有很多人使用國(guó)內(nèi)的一些產(chǎn)品。如梭子魚(yú)、綠盟等。

4.Haproxy的應(yīng)用環(huán)境

如圖:
Haproxy服務(wù)調(diào)優(yōu)及配置內(nèi)容詳解

三、安裝Haproxy

Haproxy的安裝包網(wǎng)盤鏈接:https://pan.baidu.com/s/10masYgp7VSWuZu8ebZ-pfQ
提取碼:2l44

1.編譯安裝Haproxy

[root@localhost ~]# yum -y install pcre-devel bzip2-devel
//安裝依賴包,讓Haproxy服務(wù)支持正則表達(dá)式、解壓
[root@localhost ~]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/haproxy-1.5.19/
[root@localhost haproxy-1.5.19]# make TARGET=linux26            //表示是64系統(tǒng)
//正常解壓即可,但是這個(gè)軟件不需要配置。
[root@localhost haproxy-1.5.19]# make install

2.Haproxy服務(wù)配置

(1)建立Haproxy配置文件
[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy
[root@localhost haproxy-1.5.19]# cp /usr/src/haproxy-1.5.19/examples/haproxy.cfg /etc/haproxy/
//將haproxy.cfg文件復(fù)制到配置文件目錄
(2)Haproxy配置項(xiàng)詳解

Haproxy 配置文件通常分為三個(gè)部分:

  • global(全局配置);
  • defaults(默認(rèn)配置);
  • listen(應(yīng)用組件配置)

global(全局配置)通常有以下配置參數(shù):

global
        log 127.0.0.1   local   #配置日志記錄,local0為日志設(shè)備,默認(rèn)存放到系統(tǒng)日志
        log 127.0.0.1   local1 notice  #notice為日志級(jí)別,通常有24個(gè)級(jí)別
        #log loghost    local0 info
        maxconn 4096             #最大連接數(shù)
        chroot /usr/share/haproxy         #該服務(wù)自設(shè)置的根目錄,一般需將此行注釋掉
        uid 99         #用戶UID
        gid 99        #用戶GID
        daemon        #守護(hù)進(jìn)程模式

defaults(默認(rèn)配置)一般會(huì)被應(yīng)用組件繼承,如果在應(yīng)用組件中沒(méi)有特別聲明,將安裝默認(rèn)配置參數(shù)設(shè)置,常見(jiàn)的參數(shù)有:

defaults
        log     global               #定義日志為global配置中的日志定義
        mode    http                 #模式為http
        option  httplog              #采用http日志格式記錄日志
        option  dontlognull
        retries 3         #檢查節(jié)點(diǎn)服務(wù)器失敗次數(shù),連續(xù)達(dá)到三次失敗,則認(rèn)為節(jié)點(diǎn)不可用
        redispatch             #當(dāng)服務(wù)器負(fù)載很高時(shí),自動(dòng)結(jié)束當(dāng)前隊(duì)列處理比較久的連接
        maxconn 2000                      #最大連接數(shù)
        contimeout      5000              #連接超時(shí)時(shí)間
        clitimeout      50000             #客戶端超時(shí)時(shí)間
        srvtimeout      50000             #服務(wù)器超時(shí)時(shí)間

listen(配置項(xiàng))一般配置應(yīng)用模塊參數(shù):

listen  appli4-backup 0.0.0.0:10004           #定義一個(gè)名為appli4-backup的應(yīng)用
                option  httpchk /index.html        #檢查服務(wù)器的index.html文件
                option  persist     #強(qiáng)制將請(qǐng)求發(fā)送到已經(jīng)down掉的服務(wù)器,一般禁用此選項(xiàng)。
                balance roundrobin        #負(fù)載均衡調(diào)度算法使用輪詢算法
            server  inst1 192.168.114.56:80 check inter 2000 fall 3     #定義在線節(jié)點(diǎn)
         server  inst2 192.168.114.56:81 check inter 2000 fall 3 backup #定義備份節(jié)點(diǎn)
#注意:在以上定義備份節(jié)點(diǎn)的參數(shù)中,
#“check inter 2000”表示haproxy服務(wù)器和節(jié)點(diǎn)之間的一個(gè)心跳頻率,
#“fall 3”表示連續(xù)三次檢測(cè)不到心跳頻率則認(rèn)為該節(jié)點(diǎn)失效。
#節(jié)點(diǎn)配置后帶有“ backup”表示該節(jié)點(diǎn)只是個(gè)備份節(jié)點(diǎn),只有主節(jié)點(diǎn)失效該節(jié)點(diǎn)才會(huì)上。
#去除backup,表示為主節(jié)點(diǎn),和其他主節(jié)點(diǎn)共同提供服務(wù)。
(3)Haproxy的參數(shù)調(diào)優(yōu)

如圖:
Haproxy服務(wù)調(diào)優(yōu)及配置內(nèi)容詳解

以下修改的配置文件可以滿足正常需求,如果詳細(xì)閱讀以上配置項(xiàng)的意思,可以自行添加需求。

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        #redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen  appli1-rewrite 0.0.0.0:80
        option httpchk GET /index.html
        balance roundrobin
        server  app1_1 192.168.1.3:80 check inter 2000 rise 2 fall 5
        server  app1_2 192.168.1.4:80 check inter 2000 rise 2 fall 5

這里就不解釋具體都是什么意思了。

(4)創(chuàng)建啟動(dòng)腳本
[root@localhost ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@localhost ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy 
[root@localhost ~]# chmod +x /etc/init.d/haproxy 
[root@localhost ~]# chkconfig --add /etc/init.d/haproxy 
[root@localhost ~]# /etc/init.d/haproxy start
Starting haproxy (via systemctl):                          [  確定  ]
//都是很基礎(chǔ)的命令,這里就不解釋都是什么意思了
(5)Haproxy服務(wù)的日志

Haproxy的日志默認(rèn)輸出到系統(tǒng)的syslog中,查看起來(lái)非常不方便,為了更好的管理Haproxy的日志信息,我們?cè)诼晥?chǎng)環(huán)境中一般單獨(dú)定義出來(lái)。方法如下:

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg 
global
        log /dev/log local0 info
        log /dev/log local0 notice
//添加兩行內(nèi)容,把原本關(guān)于日志的信息注釋掉
[root@localhost ~]# systemctl restart haproxy
//重啟服務(wù)
[root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf
//定義Haproxy服務(wù)的日志文件存放的位置,添加如下內(nèi)容:
if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
& ~
[root@localhost ~]# systemctl restart rsyslog
//重啟日志服務(wù)

當(dāng)客戶端訪問(wèn)時(shí),就可以利用以下命令查看Haproxy服務(wù)的日志文件

[root@localhost ~]# tail -f /var/log/haproxy/haproxy-info.log

———————— 本文至此結(jié)束,感謝閱讀 ————————

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI