Linux 使用Haproxy搭建Web群集

2018-07-31 14:43 更新

防偽碼:不必向我解釋色彩,我的眼里自有一片湛藍(lán)

          第七章 使用Haproxy搭建Web集群

前言:Haproxy是目前比較流行的一種集群調(diào)度工具,同類集群調(diào)度工具很多,如LVS和Nginx。相比較而言,LVS性能最好,但是搭建相對(duì)復(fù)雜,Nginx的upstream模塊支持集群功能,但是對(duì)集群節(jié)點(diǎn)的檢查功能不強(qiáng),性能沒有Haproxy好,其官網(wǎng)是http://haproxy.1wt.eu/。本章我們將使用Haproxy搭建一套Web集群,并增加一臺(tái)Haproxy做雙機(jī)熱備,達(dá)到高可用的效果。

一、前置知識(shí)點(diǎn):

1、HTTP請(qǐng)求

請(qǐng)求方式(GET方式和POST方式)

返回狀態(tài)碼:

正常的狀態(tài)碼為2××、3××

異常的狀態(tài)碼為4××、5××

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

RR(Round Robin):輪詢調(diào)度

LC(Least Connections):最小連接數(shù)

SH(Source Hashing):基于來源訪問調(diào)度

3、常見的web集群調(diào)度器

軟件:LVS、Haproxy、Nginx

硬件:F5、梭子魚、綠盟等

二、綜合實(shí)驗(yàn):使用Haproxy搭建web集群

1、實(shí)驗(yàn)拓?fù)鋱D:

2、案例環(huán)境表:

3、 實(shí)驗(yàn)步驟

1) 編譯安裝haproxy

首先安裝兩個(gè)支持包

2) haproxy服務(wù)器的配置

首先建立haproxy的配置文件

拷貝配置文件的樣本復(fù)制到/etc/haproxy目錄下

修改haproxy.cfg配置文件(分為三部分,global為全局,defaults為默認(rèn),listen為應(yīng)用組件)

詳解配置參數(shù):

# this config needs haproxy-1.1.28 or haproxy-1.2.1


global

        log /dev/log    local0 info                                        //日志記錄,local0為日志設(shè)備,默認(rèn)存放到系統(tǒng)日志

        log /dev/log    local1 notice                                    //notice為日志級(jí)別,通常有24個(gè)級(jí)別

        #log loghost    local0 info

        maxconn 4096

        #chroot /usr/share/haproxy

        uid 99                                        //用戶uid

        gid 99                                        //用戶gid

        pidfile /var/run/haproxy.pid                                        //pid文件的路徑以及文件名

        daemon                                        //后臺(tái)運(yùn)行

        #debug

        #quiet


defaults

        log     global                                        //定義日志為global配置中的日志定義

        mode    http                                        //模式為http協(xié)議

        option  httplog                                    //采用http日志格式記錄日志

        option  dontlognull                             

        retries 3                                              //檢查節(jié)點(diǎn)服務(wù)器的失敗次數(shù),連續(xù)達(dá)到三次則認(rèn)為節(jié)點(diǎn)不可用

        maxconn 2000                                    //最大連接次數(shù)

        contimeout      5000                            //連接超時(shí)時(shí)間

        clitimeout      50000                            //客戶端超時(shí)時(shí)間

        srvtimeout      50000                            //服務(wù)器超時(shí)時(shí)間


listen  webcluster 0.0.0.0:80

        option  httpchk GET /index.html                            //檢查服務(wù)器的index.html文件

        balance roundrobin                                        //負(fù)載均衡調(diào)度算法為輪詢

        server  inst1 192.168.1.30:80 check inter 2000 fall 3                 //定義節(jié)點(diǎn)地址和端口,健康檢查三次

        server  inst2 192.168.1.40:80 check inter 2000 fall 3

3)創(chuàng)建自啟動(dòng)腳本

4) 安裝nginx(以第一臺(tái)nginx為例)

剩下的節(jié)點(diǎn)配置一樣,為了測(cè)試時(shí)看出效果,建議將測(cè)試頁(yè)的內(nèi)容不要保持一致

第一臺(tái)如圖所示:

第二臺(tái)如圖所示:

5) 開啟haproxy服務(wù)(防火墻開啟tcp80端口)

6) 測(cè)試web群集

首先測(cè)試負(fù)載均衡,在客戶端上打開http://192.168.1.10

下面再測(cè)試一下高可用,我們把第一臺(tái)服務(wù)器的網(wǎng)卡斷掉,模擬服務(wù)器出現(xiàn)故障,如果網(wǎng)頁(yè)依然可以訪問,說明群集的高可用沒有問題。

7) 配置haproxy日志

Haproxy的日志默認(rèn)是保存到系統(tǒng)的syslog中,查看起來不方便,所以我們?cè)谏a(chǎn)環(huán)境中可以將日志單獨(dú)存儲(chǔ)到不同的文件中,配置如下

首先修改配置文件,主要改下面的部分(這兩行的作用是將info和notice的日志分別記錄到不同的文件中

然后修改rsyslog配置,將haproxy相關(guān)的配置獨(dú)立定義到haproxy.conf,并放到/etc/rsyslog.d下,rsyslog啟動(dòng)時(shí)會(huì)自動(dòng)加載此目錄下所有的配置文件。

加入以下內(nèi)容

然后重新啟動(dòng)rsyslog服務(wù)

測(cè)試日志信息:

在客戶機(jī)訪問網(wǎng)站之后,可以使用tail -f /var/log/haproxy/haproxy-info.log即時(shí)查看日志

8)生產(chǎn)環(huán)境中需要對(duì)Haproxy進(jìn)行參數(shù)優(yōu)化,以滿足實(shí)際生產(chǎn)的要求

參數(shù)參數(shù)說明優(yōu)化建議
maxconn最大連接數(shù)推薦使用10240
daemon守護(hù)進(jìn)程模式Haproxy可以使用非進(jìn)程守護(hù)模式啟動(dòng),生產(chǎn)環(huán)境建議使用守護(hù)進(jìn)程模式啟動(dòng)
nbproc負(fù)載均衡的并發(fā)進(jìn)程數(shù)建議與服務(wù)器CPU核數(shù)相等或成為其2倍
retries重試次數(shù)發(fā)量大,設(shè)置為2或3次;服務(wù)器節(jié)點(diǎn)不多,可以設(shè)置為5或6次
option http-server-close主動(dòng)關(guān)閉http請(qǐng)求選項(xiàng)建議在生產(chǎn)環(huán)境中使用此選項(xiàng),避免由于timeout時(shí)間設(shè)置過長(zhǎng)導(dǎo)致http連接堆積
timeout http-keep-alive長(zhǎng)連接超時(shí)時(shí)間可以設(shè)置為10s
timeout http-requesthttp請(qǐng)求超時(shí)時(shí)間建議設(shè)置5-10s,增加http連接釋放速度
timeout client客戶端超時(shí)時(shí)間如果訪問量大,節(jié)點(diǎn)相應(yīng)慢,可以將此時(shí)間設(shè)置短一些,意見設(shè)置為1min左右即可

9)為了實(shí)現(xiàn)haproxy的高可用,我們可以配置keepalived。

思路:在以上實(shí)驗(yàn)原有的基礎(chǔ)上增加一臺(tái)Haproxy服務(wù)器,兩臺(tái)調(diào)度服務(wù)器做雙機(jī)熱備,

配置好了之后斷掉第一臺(tái)Haproxy網(wǎng)站依然可以訪問對(duì)了。

為兩臺(tái)Haproxy配置虛擬IP地址作為訪問地址:

訪問:

斷開一臺(tái),發(fā)現(xiàn)仍然可以訪問

使用ip addr show dev eth0命令,發(fā)現(xiàn)從Haproxy調(diào)度器已成為主調(diào)度器

謝謝觀看,真心的希望能幫到您。


本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)