您好,登錄后才能下訂單哦!
通過博文:Nginx+Tomcat實現負載均衡群集實例,可跟做!!!
LVS負載均衡群集詳解
已經能夠使用Nginx、LVS做負載均衡群集,它們各自都具有各自的特點,今天,我們認識一款比較流行的群集調度工具——Haproxy。
Haproxy是目前比較流行的一種群集調度工具,同類群集調度工具還有很多,比如:LVS和Nginx。相比較而言:LVS性能最好,但是搭建相對復雜;Nginx的upstream模塊支持群集功能,但是對群集節點健康檢查功能并不強,性能也不及Haproxy好。
通過URL訪問網站使用的協議是HTTP協議,此類請求一般稱為HTTP請求。
HTTP請求的方式分為GET方式和POST方式,二者的區別:
- GET方式:內容少(一般不可以超過8kB)、不安全,內容直接附加在URL上;
- POST方式:內容多、安全;
當使用瀏覽器訪問某一個URL,會根據請求URL返回狀態碼,通常正常是的狀態碼是:2 X X、3 XX(比如201、301),如果出現異常就會返回4 X X、5 XX(比如401、501)。
HTTP請求返回狀態碼詳情,可以參考博文:HTTP請求返回狀態碼詳解
利用LVS、Haproxy、Nginx搭建群集最常用的調度算法有三種:
RR(Round Robin):RR算法是最簡單,也最容易理解,即輪詢調度。此算法還有一種加權輪詢,即根據每個節點的權重輪詢分配訪問請求。
此算法主要用于節點服務器性能都差不多,要工作都工作;
LC(Least Connections):即最小連接數算法,根據后端的節點連接數大小動態分配前端請求。能保證將新的請求分配給連接數最少的客戶端。由于實際情況中,各個節點的連接數對動態釋放,很難出現一樣連接數的情況,因此此算法想比較RR算法有很大的改進,是目前用到最多的一種算法。
SH(Source Hashing):即基于來源訪問調度算法,此算法用于一些有Session會話記錄在服務器端的場景,可以基于來源的IP、Cookie等做群集調度。此算法的好處就是實現會話保持,但某些IP訪問量非常大時會引起負載不均衡,部分節點訪問量大,影響業務使用。
目前最常見的Web群集調度器分為軟件和硬件;軟件通常使用開源的LVS、Haproxy、Nginx;硬件一般使用比較多的是F5,也有很多人使用國內的一些產品。如梭子魚、綠盟等。
如圖:
Haproxy的安裝包網盤鏈接:https://pan.baidu.com/s/10masYgp7VSWuZu8ebZ-pfQ
提取碼:2l44
[root@localhost ~]# yum -y install pcre-devel bzip2-devel
//安裝依賴包,讓Haproxy服務支持正則表達式、解壓
[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系統
//正常解壓即可,但是這個軟件不需要配置。
[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文件復制到配置文件目錄
Haproxy 配置文件通常分為三個部分:
- global(全局配置);
- defaults(默認配置);
- listen(應用組件配置)
global(全局配置)通常有以下配置參數:
global
log 127.0.0.1 local #配置日志記錄,local0為日志設備,默認存放到系統日志
log 127.0.0.1 local1 notice #notice為日志級別,通常有24個級別
#log loghost local0 info
maxconn 4096 #最大連接數
chroot /usr/share/haproxy #該服務自設置的根目錄,一般需將此行注釋掉
uid 99 #用戶UID
gid 99 #用戶GID
daemon #守護進程模式
defaults(默認配置)一般會被應用組件繼承,如果在應用組件中沒有特別聲明,將安裝默認配置參數設置,常見的參數有:
defaults
log global #定義日志為global配置中的日志定義
mode http #模式為http
option httplog #采用http日志格式記錄日志
option dontlognull
retries 3 #檢查節點服務器失敗次數,連續達到三次失敗,則認為節點不可用
redispatch #當服務器負載很高時,自動結束當前隊列處理比較久的連接
maxconn 2000 #最大連接數
contimeout 5000 #連接超時時間
clitimeout 50000 #客戶端超時時間
srvtimeout 50000 #服務器超時時間
listen(配置項)一般配置應用模塊參數:
listen appli4-backup 0.0.0.0:10004 #定義一個名為appli4-backup的應用
option httpchk /index.html #檢查服務器的index.html文件
option persist #強制將請求發送到已經down掉的服務器,一般禁用此選項。
balance roundrobin #負載均衡調度算法使用輪詢算法
server inst1 192.168.114.56:80 check inter 2000 fall 3 #定義在線節點
server inst2 192.168.114.56:81 check inter 2000 fall 3 backup #定義備份節點
#注意:在以上定義備份節點的參數中,
#“check inter 2000”表示haproxy服務器和節點之間的一個心跳頻率,
#“fall 3”表示連續三次檢測不到心跳頻率則認為該節點失效。
#節點配置后帶有“ backup”表示該節點只是個備份節點,只有主節點失效該節點才會上。
#去除backup,表示為主節點,和其他主節點共同提供服務。
如圖:
以下修改的配置文件可以滿足正常需求,如果詳細閱讀以上配置項的意思,可以自行添加需求。
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): [ 確定 ]
//都是很基礎的命令,這里就不解釋都是什么意思了
Haproxy的日志默認輸出到系統的syslog中,查看起來非常不方便,為了更好的管理Haproxy的日志信息,我們在聲場環境中一般單獨定義出來。方法如下:
[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
global
log /dev/log local0 info
log /dev/log local0 notice
//添加兩行內容,把原本關于日志的信息注釋掉
[root@localhost ~]# systemctl restart haproxy
//重啟服務
[root@localhost ~]# vim /etc/rsyslog.d/haproxy.conf
//定義Haproxy服務的日志文件存放的位置,添加如下內容:
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
//重啟日志服務
當客戶端訪問時,就可以利用以下命令查看Haproxy服務的日志文件
[root@localhost ~]# tail -f /var/log/haproxy/haproxy-info.log
———————— 本文至此結束,感謝閱讀 ————————
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。