您好,登錄后才能下訂單哦!
通過(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是目前比較流行的一種群集調(diào)度工具,同類群集調(diào)度工具還有很多,比如:LVS和Nginx。相比較而言:LVS性能最好,但是搭建相對(duì)復(fù)雜;Nginx的upstream模塊支持群集功能,但是對(duì)群集節(jié)點(diǎn)健康檢查功能并不強(qiáng),性能也不及Haproxy好。
通過(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)碼詳解
利用LVS、Haproxy、Nginx搭建群集最常用的調(diào)度算法有三種:
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ù)器性能都差不多,要工作都工作;
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),是目前用到最多的一種算法。
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ù)使用。
目前最常見(jiàn)的Web群集調(diào)度器分為軟件和硬件;軟件通常使用開(kāi)源的LVS、Haproxy、Nginx;硬件一般使用比較多的是F5,也有很多人使用國(guó)內(nèi)的一些產(chǎn)品。如梭子魚(yú)、綠盟等。
如圖:
Haproxy的安裝包網(wǎng)盤鏈接:https://pan.baidu.com/s/10masYgp7VSWuZu8ebZ-pfQ
提取碼:2l44
[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
[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ù)制到配置文件目錄
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ù)。
如圖:
以下修改的配置文件可以滿足正常需求,如果詳細(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
這里就不解釋具體都是什么意思了。
[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ǔ)的命令,這里就不解釋都是什么意思了
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é)束,感謝閱讀 ————————
免責(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)容。