一.概述
HAProxy 是一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟件,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。
Haproxy是一個開源的高性能的反向代理或者說是負載均衡服務軟件之一,它支持雙機熱備、虛擬主機、基於TCP和HTTP應用代理等功能。其配置簡單,維護方便,而且擁有很好的對服務器節點的健康檢查功能(相當於keepalived健康檢查),當其代理的後端服務器出現故障時,Haproxy會自動的將該故障服務器摘除,當服務器的故障恢復後,Haproxy還會自動將該RS服務器加入進來提供服務。
Haproxy特別適用於那些高負載、訪問量很大。但又需要會話保持或七層應用代理的業務。Haproxy運行在普通的服務器硬件上,幾乎不需要進行更多的優化就可以支 持數以萬計的併發連接。並且它的運行模式使得它可以很簡單、安全的整合到各種網站的架構中,同時,haproxy的代理模式,可以使得應用服務器不會暴露到網絡中。
- haproxy和nginx的區別
-
Nginx特點
1.支持Http協議,工作在網絡7層
2.支持通過端口健康檢測
3.支持強大的正則匹配規則
4.支持WebSocket協議
5.支持Http Cache -
Haproxy特點
1.支持TCP與Http協議,工作在網絡4層和7層
2.支持Session共享、Cookies引導
3.支持通過URL健康檢測
4.支持8種負載均衡策略
5.支持心跳檢測 - HAProxy工作原理
HAProxy實現了一種事件驅動、單一進程模型,此模型支持非常大的併發連接數。多進程或多線程模型受內存限制、系統調度器限制以及無處不在的鎖限制,很少能處理數千併發鏈接。事件驅動模型因爲在有更好的資源和時間管理的用戶端(user-space)實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是爲什麼他們必須進行優化以及使每個CPU時間片(Cycle)做更多的工作。
- 負載均衡常用的調度算法
RR(Round Robin):算法是最簡單最常見的一種算法,即輪詢調度。
LC(Least Connections):算法即最小連接算法,根據後端的節點連接數大小動態分配前段請求。
SH(Source Hashing):SH基於來源訪問調度算法,此算法用於一些有Session會話記錄在服務器端的場景,可以基於來源IP,Cookie等做羣集調度
二.案例
-
- 編譯安裝Nginx1服務器
[root@localhost ~]# yum -y install pcre-devel zlib-devel
[root@localhost ~]# useradd -M -s / sbin/nologin nginx
[root@localhost ~]# tar xf nginx-1 .12.0. tar.gz
[root@localhost ~]# cd nginx-1.12.0
[root@localhost nginx-1.12.0]# ./configure --prefix=/usx/1oca1/nginx --user=nginx --group=nginx
[root@localhost nginx-1.12.0]# make && make install
默認安裝目錄: /usr/local/nginx
默認日誌: /usr/local/nginx/logs/
默認監聽: 80。
默認Web目錄: /usr/local/nginx/html
在客戶端訪問http://192.168.1.61/test. html測試,
(2)搭建Nginx2.
編譯安裝的步驟與Nginx1相同,不同之處在於建立測試頁面。
[ root@localhost html]# echo "Server 192.168.1.62" > test. html
在ke客戶端訪問http://192.168.162/test . html測試
- 2.編譯安裝Haproxy
[root@localhost ~]# yum -y install pcre-devel bzip2-deve1
[root@localhost ~]# tar xf haproxy-1.5.19. tar.gz
[root@localhost haproxy-1.5.19]# make TARGET=linux26 //64位系統
[root@localhost haproxy-1.5.19]# make install
- 3.Haproxy服務器配置
(1 )建立Haproxy的配置文件,
[root@localhost haproxy-1.5.19]# mkdir /etc/haproxy / /創建配置文件目錄
[root@localhost haproxy-1.5.19]# cp examples/haproxy . cfg /etc/haproxy/
//將haproxy.cfg文件複製到配置文件目錄
(2) Haproxy配置項介紹。
Haproxy配置文件通常分爲三個部分,即global. defaults 和listen。global 爲全局配置,defaults 爲默認配置,listen 爲應用組件配置。
global配置項通常有下面配置參數
global
log 127.0.0.1 local0 //配置日誌記錄, local0爲日誌設備,默認存放到系統日誌
log 127.0.0.1 locall notice //notice 爲日誌級別,通常有24個級別
maxconn 4096 //最大連接數
uid 99 //用戶uid
gid 99 //用戶gid
defaults配置項配置默認參數.
defaults
log global //定義日誌爲global配置中的日誌定義
mode http //模式爲http
option httplog //採用http日誌格式記錄日誌
retries 3 //當服務器負載很高時,自動結束當前隊列處理比較久的連接
maxconn 2000 //最大連接數
cont imeout 5000 //客戶端超時時間
cont imeout 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 //定義備份節點
(3) 根據目前的羣集設計,將haproxy, cfg配置文件的內容修改如下。
global
log 127 .0.0.1 loca10
1og 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
uid 99
gid 99
da emon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webcluster 0.0.0.0:80 .
option httpchk GET / index . html
balance
roundrobin .
serve r
instl 192.168.1.61 :80 check inter 2000 fall 3
serve r
inst2 192.168.1.62:80 check inter 2000 fall 3
- 4.創建自啓動腳本
[root@localhost haproxy]# cp ~/haproxy-1.5. 19/examp1es/haproxy . init /etc/init
d/haproxy
[root@localhost haproxy]# ln -s /usx/1ocal/ sbin/haproxy /usr/ sbin/haproxy
[root@localhost haproxy]# chmod +x /etc/init. d/haproxy
[root@localhost haproxy]# chkconfig --add /etc/init. d/haproxy
[root@localhost haproxy]# /etc/init. d/haproxy start
Starting haproxy (via systemctl) :
[確定]
[root@localhost haproxy]# systemctl stop firewalld
- 5. 測試Web羣集
通過上面的步驟,已經搭建完成Haproxy的Web羣集,接下來需要驗證羣集是否工作正常。一
個羣集一般需要具備兩個特性,第- -個是高性能,第二個是高可用。
1)測試高性能
在客戶端使用瀏覽器打開http://192.168.1 60/test .html,瀏覽器顯示信息如圖所示。
再次打開一個新的瀏覽器頁面訪問http://192.168.1. 60/test.html.瀏覽器顯示信息如圖所示