使用Haproxy搭建Web群集的方法-創(chuàng)新互聯(lián)

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

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

Haproxy應(yīng)用分析

■LVS在企業(yè)應(yīng)用中抗負(fù)載能力很強(qiáng),但存在不足

創(chuàng)新互聯(lián)公司長(zhǎng)期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為呂梁企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),呂梁網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
LVS不支持正則處理,不能實(shí)現(xiàn)動(dòng)靜分離
對(duì)于大型網(wǎng)站,LVS的實(shí)施配置復(fù)雜,維護(hù)成本相對(duì)較高

■Haproxy是一款可提供高可用性、負(fù)載均衡、及基于TCP和HTTP應(yīng)用的代理的軟件

特別適用于負(fù)載特別大的Web站點(diǎn)
運(yùn)行在當(dāng)前的硬件上可支持?jǐn)?shù)以萬(wàn)計(jì)的并發(fā)連接連接請(qǐng)求

Haproxy 調(diào)度算法原理

Haproxy 支持多種調(diào)度算法,最常用的有三種:

●RR (Round Robin)
RR算法是最簡(jiǎn)單最常用的一-種算法,即輪詢調(diào)度

理解舉例
   有三個(gè)節(jié)點(diǎn)A、B、C,第一個(gè)用戶訪問(wèn)會(huì)被指派到節(jié)點(diǎn)A,第二個(gè)用
戶訪問(wèn)會(huì)被指派到節(jié)點(diǎn)B,第三個(gè)用戶訪問(wèn)會(huì)被指派到節(jié)點(diǎn)
   第四個(gè)用戶訪問(wèn)繼續(xù)指派到節(jié)點(diǎn)A,輪詢分配訪問(wèn)請(qǐng)求實(shí)現(xiàn)負(fù)載均衡效果
●LC (Least Connections)
LC算法即最小連接數(shù)算法,根據(jù)后端的節(jié)點(diǎn)連接數(shù)大小動(dòng)態(tài)分配前端請(qǐng)求

理解舉例
   有三個(gè)節(jié)點(diǎn)A、B、C,各節(jié)點(diǎn)的連接數(shù)分別為A:4、B:5、 C:6, 此時(shí)如果有第
一個(gè)用戶連接請(qǐng)求,會(huì)被指派到A上,連接數(shù)變?yōu)锳:5、B:5、 C:6
   第二個(gè)用戶請(qǐng)求會(huì)繼續(xù)分配到A上,連接數(shù)變?yōu)锳:6、B:5、 C:6; 再有新的請(qǐng)求會(huì)分配給B,每次將新的請(qǐng)求指派給連接數(shù)最小的客戶端
   由于實(shí)際情況下A、B、C的連接數(shù)會(huì)動(dòng)態(tài)釋放,很難會(huì)出現(xiàn)-樣連接數(shù)的情況
因此此算法相比較rr算法有很大改進(jìn),是目前用到比較多的-種算法
●SH (Source Hashing)
SH即基于來(lái)源訪問(wèn)調(diào)度算法,此算法用于一些有Session會(huì)話記錄在服務(wù)器端
的場(chǎng)景,可以基于來(lái)源的IP、Cookie等做集群調(diào)度

理解舉例
  有三個(gè)節(jié)點(diǎn)A、B、C,第一個(gè)用戶第一次訪問(wèn)被指派到了A,第二個(gè)用戶第一
次訪問(wèn)被指派到了B
  當(dāng)?shù)谝粋€(gè)用戶第二次訪問(wèn)時(shí)會(huì)被繼續(xù)指派到A,第二個(gè)用戶第二次訪問(wèn)時(shí)依舊
會(huì)被指派到B,只要負(fù)載均衡調(diào)度器不重啟,第一個(gè)用戶訪問(wèn)都會(huì)被指派到A,
第二個(gè)用戶訪向都會(huì)被指派到B,實(shí)現(xiàn)集群的調(diào)度
  此調(diào)度算法好處是實(shí)現(xiàn)會(huì)話保持,但某些IP訪問(wèn)量非常大時(shí)會(huì)引起負(fù)載不均衡
部分節(jié)點(diǎn)訪問(wèn)量超大,影響業(yè)務(wù)使用

Haproxy 配置文件詳解

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

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

global配置參數(shù)

●log 127.0.0.1 local0:配置日志記錄,配置日志記錄,ocal0為日
志設(shè)備,默認(rèn)存放到系統(tǒng)日志
●log 127.0.0.1 local1 notice: notice為 日志級(jí)別通常有24個(gè)級(jí)別
●maxconn4096:大連接數(shù)
●uid 99:用戶uid
●gid 99:用戶gid

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

●log global:定義日志為global配置中的日志定義
●mode http:模式為http
●option httplog:采用http日志格式記錄日志
●retries 3:檢查節(jié)點(diǎn)服務(wù)器失敗連續(xù)達(dá)到三次則認(rèn)為節(jié)點(diǎn)不可用
●maxconn 2000:大連接數(shù)
●contimeout 5000:連接超時(shí)時(shí)間
●clitimeout 50000:客戶端超時(shí)時(shí)間
●srtimeout 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ù)器
) Balance roundrobin: 負(fù)載均衡調(diào)度算法使用輪詢算法
●server inst1 192.168.114 .56:80 check inter 2000 fall3: 定義在
線節(jié)點(diǎn)
server inst2 192. 168.114.56:81 check inter 2000 fall 3 backup
:定義備份節(jié)點(diǎn)

Haproxy 日志管理

Haproxy的日志默認(rèn)是輸出到系統(tǒng)的syslog中,在生產(chǎn)
環(huán)境中一般單獨(dú)定義出來(lái)

定義的方法步驟

●修改Haproxy配置文件中關(guān)于日志配置的選項(xiàng),加入配置:
p log /dev/log local0 info
。log /dev/log local0 notice
●修改rsyslog配置,將Haproxy相關(guān)的配置獨(dú)立定義到
haproxy.conf,并放到etclrsyslog.d下
●保存配置文件并重啟rsyslog服務(wù),完成rsyslog配置

訪問(wèn)Haproxy集群測(cè)試網(wǎng)頁(yè)并測(cè)試日志信息

Haproxy優(yōu)化參數(shù)

隨著企業(yè)網(wǎng)站負(fù)載增加,haproxy參數(shù)優(yōu)化相當(dāng)重要

●maxconn:大連接數(shù),根據(jù)應(yīng)用實(shí)際情況進(jìn)行調(diào)整,推薦使用
10 240
●daemon:守護(hù)進(jìn)程模式, Haproxy可以使用非守護(hù)進(jìn)程模式啟
動(dòng),建議使用守護(hù)進(jìn)程模式啟動(dòng)
●nbproc:負(fù)載均衡的并發(fā)進(jìn)程數(shù),建議與當(dāng)前服務(wù)器CPU核數(shù)相
等或?yàn)槠?倍
●oretries:重試次數(shù),主要用于對(duì)集群節(jié)點(diǎn)的檢查,如果節(jié)點(diǎn)多,且并
發(fā)量大,設(shè)置為2次或3次
●option http-server-close:主動(dòng)關(guān)閉http請(qǐng)求選項(xiàng),建議在生產(chǎn)環(huán)
境中使用此選項(xiàng)
●timeout http-keep-alive:長(zhǎng)連接超時(shí)時(shí)間,設(shè)置長(zhǎng)連接超時(shí)時(shí)間
可以設(shè)置為10s
●timeout http-request: http請(qǐng)求超時(shí)時(shí)間,建議將此時(shí)間設(shè)置為5
~ 10s,增加http連接釋放速度
●timeout client:客戶端超時(shí)時(shí)間,如果訪問(wèn)量過(guò)大,節(jié)點(diǎn)響應(yīng)慢
可以將此時(shí)間設(shè)置短一些,建議設(shè)置為1min左右就可以了

案例演示

實(shí)驗(yàn)要求

1.一臺(tái) Haproxy調(diào)度服務(wù)器,兩臺(tái) Nginx 服務(wù)器,一臺(tái)windows7作為客戶端;
2.三臺(tái)服務(wù)器為CentOS 7.3的64位系統(tǒng);
3.所有主機(jī)網(wǎng)卡都設(shè)置成僅主機(jī)模式,綁定靜態(tài)地址;
4.客戶端可以通過(guò)訪問(wèn)調(diào)度服務(wù)器,訪問(wèn)到兩臺(tái)節(jié)點(diǎn)服務(wù)器,不需要訪問(wèn)真實(shí)服務(wù)器地址。

使用Haproxy搭建Web群集的方法

主機(jī)角色 IP地址
Haproxy服務(wù)器192.168.100.210
Nginx服務(wù)器1192.168.100.201
Nginx服務(wù)器2192.168.100.202
windows7客戶端192.168.100.50

第一步:搭建 Haproxy調(diào)度服務(wù)器

1.使用yum安裝編譯工具

[root@haproxy ~]# yum install bzip2-devel pcre-devel gcc gcc-c++ make -y

2.修改網(wǎng)卡為僅主機(jī)模式,并綁定靜態(tài)地址

[root@haproxy ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
#將dhcp替換為static
BOOTPROTO=static

#在末行追加IP地址\子網(wǎng)掩碼\網(wǎng)關(guān)
IPADDR=192.168.100.210
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@haproxy ~]# service network restart 
Restarting network (via systemctl):                        [  確定  ]

3.遠(yuǎn)程共享并掛載haproxy源碼包到本地服務(wù)器

[root@haproxy ~]# smbclient -L /192.168.100.1
    Sharename       Type      Comment
    ---------       ----      -------
    haproxy         Disk      
    LNMP            Disk      

4.解壓haproxy源碼包并編譯

[root@haproxy ~]# cd /mnt

#解壓haproxy源碼包到.opt目錄
[root@haproxy mnt]# tar zxvf haproxy-1.5.19.tar.gz -C /opt
[root@haproxy mnt]# cd /opt
[root@haproxy opt]# ls
haproxy-1.5.19  rh

#切換至haproxy目錄
[root@haproxy opt]# cd haproxy-1.5.19/

#查看系統(tǒng)版本號(hào)3100
[root@haproxy haproxy-1.5.19]# uname -a
Linux haproxy 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

#編譯haproxy
[root@haproxy haproxy-1.5.19]# make TARGET=linux3100

#編譯安裝
[root@haproxy haproxy-1.5.19]# make install

5.修改haproxy.cfg配置文件,并開(kāi)啟服務(wù)

#創(chuàng)建haproxy文件目錄
[root@haproxy haproxy-1.5.19]# mkdir /etc/haproxy

#復(fù)制模板文件到haproxy目錄
[root@haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/

#修改haproxy.cfg文件
[root@haproxy haproxy-1.5.19]# vim /etc/haproxy/haproxy.cfg
#注釋chroot和redispatch條目,防止啟動(dò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

#刪除原有的所有l(wèi)isten條目,添加一下條目
listen webcluster 0.0.0.0:80
       option httpchk GET /test.html
       balance roundrobin
       server inst1 192.168.100.201:80 check inter 2000 fall 3
       server inst2 192.168.100.202:80 check inter 2000 fall 3

#復(fù)制haproxy啟動(dòng)腳本到系統(tǒng)啟動(dòng)進(jìn)程中
[root@haproxy haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy

#授予腳本執(zhí)行權(quán)限
[root@haproxy haproxy-1.5.19]# chmod +x /etc/init.d/haproxy

#添加腳本到service管理?xiàng)l目中
[root@haproxy haproxy-1.5.19]# chkconfig --add haproxy 

#建立腳本命令軟鏈接
[root@haproxy haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

#啟動(dòng)服務(wù)
[root@haproxy haproxy-1.5.19]# service haproxy start
Starting haproxy (via systemctl):                          [  確定  ]

#關(guān)閉防火墻和安全功能
[root@Haproxy haproxy-1.5.19]# systemctl stop firewalld.service 
[root@Haproxy haproxy-1.5.19]# setenforce 0

第二步:搭建Nginx服務(wù)器

1.兩臺(tái)Nginx服務(wù)器都要使用yum安裝編譯工具

[root@haproxy ~]# yum install zlib-devel pcre-devel gcc gcc-c++ make -y

2.修改網(wǎng)卡為僅主機(jī)模式,并綁定靜態(tài)地址

[root@nginx1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
#將dhcp替換為static
BOOTPROTO=static

#在末行追加IP地址\子網(wǎng)掩碼\網(wǎng)關(guān)
IPADDR=192.168.100.201
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@nginx1 ~]# service network restart 
Restarting network (via systemctl):                        [  確定  ]

[root@nginx2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
#將dhcp替換為static
BOOTPROTO=static

#在末行追加IP地址\子網(wǎng)掩碼\網(wǎng)關(guān)
IPADDR=192.168.100.202
NETMASK=255.255.255.0
GATEWAY=192.168.100.1

[root@nginx2 ~]# service network restart 
Restarting network (via systemctl):                        [  確定  ]

3.遠(yuǎn)程共享掛載Nginx源碼包到本地服務(wù)器

[root@nginx1 ~]# mount.cifs //192.168.100.1/LNMP /mnt
Password for root@//192.168.100.1/LNMP:

4.解壓源碼包并創(chuàng)建管理用戶

[root@nginx1 ~]# cd /mnt

#解壓Nginx源碼包到/opt目錄
root@nginx1 mnt]# tar zxvf nginx-1.12.0.tar.gz -C /opt

#創(chuàng)建Nginx管理用戶
root@nginx1 mnt]# cd /opt
[root@nginx1 opt]# useradd -M -s /sbin/nologin nginx

5.配置Nginx

[root@nginx1 opt]# cd nginx-1.12.0/
[root@nginx1 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx

6.編譯安裝

[root@nginx1 nginx-1.12.0]# make && make install

7.創(chuàng)建測(cè)試網(wǎng)頁(yè)

[root@nginx1 nginx-1.12.0]# cd /usr/local/nginx/html/
[root@nginx1 html]# echo "this is kgc web" >test.html

[root@nginx2 nginx-1.12.0]# cd /usr/local/nginx/html/
[root@nginx2 html]# echo "this is accp web" >test.html

8.創(chuàng)建Nginx命令軟鏈接到系統(tǒng)

[root@nginx1 html]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/

9.關(guān)閉防火墻和安全功能,啟動(dòng)服務(wù)

[root@nginx1 html]# systemctl stop firewalld.service 
[root@nginx1 html]# setenforce 0
[root@nginx1 html]# nginx

10.使用客戶端訪問(wèn)網(wǎng)頁(yè),在瀏覽器中輸入192.168.100.210/test/html進(jìn)行訪問(wèn)使用Haproxy搭建Web群集的方法
使用Haproxy搭建Web群集的方法
使用Haproxy搭建Web群集的方法

由此論證使用Haproxy搭建Web群集采用輪詢機(jī)制


配置haproxy日志

#重啟haproxy 服務(wù)
[root@haproxy etc]# service haproxy restart 
Restarting haproxy (via systemctl):                        [  確定  ]

#創(chuàng)建
[root@haproxy haproxy-1.5.19]# touch /etc/rsyslog.d/haproxy.conf
[root@haproxy haproxy-1.5.19]# vim /etc/rsyslog.d/haproxy.conf

#定義haproxy信息日志
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~

#定義haproxy通知日志
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~

#重啟日志服務(wù)
[root@haproxy etc]# systemctl restart rsyslog.service

#切換到日志目錄下查看haproxy日志文件
[root@haproxy etc]# cd /var/log/haproxy/
[root@haproxy haproxy]# ls
haproxy-info.log

#查看日志文件
[root@haproxy haproxy]# cat haproxy-info.log
Nov 30 16: 53: 30 Haproxy haproxy[119165]: 192.168.100.50: 49191 [ 30/Nov/2019:16: 53: 30.100
webcluster. webcluster/inst2 168/0/1/0/169 200 252 - - --- 1/1/0/1/0 0/0 "GET /test.h
tml HTTP/1.1"
Nov 30 16: 53:42 Haproxy haproxy[119165]: 192.168.100.50: 49191[ 30/Nov/2019: 16:53: 42.290 :
webcluster. webcluster/inst1 159/0/0/0/159 200 253 - - ---- 1/1/0/1/0 0/0 "GET /test.h
tml HTTP/1.1 "

謝謝閱讀!!!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞標(biāo)題:使用Haproxy搭建Web群集的方法-創(chuàng)新互聯(lián)
URL地址:http://bm7419.com/article2/cechic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、小程序開(kāi)發(fā)移動(dòng)網(wǎng)站建設(shè)、虛擬主機(jī)、Google、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化