HAproxy簡介
關於HAproxy這個東西對於互聯網企業來說絕對不陌生,一個在負載均衡上可以和專業硬件相比都不遜色的一款軟件。HAproxy是一個使用C語言便攜的自由及開放源代碼軟件,其提供高性能,負載均衡,以及基於TCP和HTTP的應用程序代理。相比較Nginx來言,HAproxy更專註反向代理,因此他可以支持更多的選項更精細的控制更多的健康監測機制和負載均衡算法。
HAproxy特別適用哪些負載特別大的web站點,這些站點通常又需要會話保持或七層處理。HAproxy運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以簡單的整合進你當前的架構中,同時可以保護你的web服務器不被暴露到網絡上。
至於它的特點那就多了:
1.出色的可靠性和穩定性
2.支持拒絕連接,防止DOS攻擊
3.支持長連接,短連接和日誌功能
4.路由HTTP請求到後端服務器,基於cookie作為會話綁定;同時支持通過制定的url來檢測後端real server的狀態
5.支持強大的ACL,靈活的路由配置,能實現動靜分離
6.可支持四層和七層負載
7,擁有功能強大的後端服務器狀態監測web頁面,可以實時了解設備的運行狀態,還可實現設備的上下線。
8.支持多種負載均衡調度算法,並且支持session保持
這麽強大的軟件是不是很想要0.0 他的主要安裝方式就是yum源安裝和源碼安裝 #有點區別那就是yum安裝不易出錯比較簡單,而編譯安裝則對自己的需求來安裝,更適合自己。
關於配置文件
他的配置文件所在/etc/haproxy/haproxy.cfg
在他的配置文件內主要有那麽兩個大部分global settings(全局設置)和proxies(對代理的設定)。
global settings:定義關於進程管理和性能的參數
daemon:讓haproxy以守護進程的方式工作於後臺,其等同於“-D”選項的功能
gid:已制定的GID運行haproxy #默認haproxy
group:組名,不過gid使用組號
uid:已指定UID運行
user:使用用戶名
log:定義全局的syslog服務器 #比如log 127.0.0.1 local2(需要在/etc/rsyslog/日誌服務內定義local2)
stats:可開啟一個unix socket管理接口
maxconn:最大打開文件數量
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats
proxies:proxies又分為四個段default frontend backend listen這四個段
default段參數解讀:
defaults mode http #模式為http log global #全局日誌 option httplog #啟用記錄http請求日誌,默認不啟用 option dontlognull #日誌不記錄空連接 option http-server-close #長連接 option forwardfor except 127.0.0.0/8 #添加forwardfor日指標記 option redispatch #某臺服務器宕機,強制定向到其他健康服務器 retries 3 #三次連接失敗認為不可用 timeout http-request 10s #請求超時 timeout queue 1m #隊列超時 timeout connect 10s #連接超時 timeout client 1m #客戶端超時 timeout server 1m #服務器超時 timeout http-keep-alive 10s timeout check 10s #檢測超時 maxconn 3000 #能接受的最大並發連接數
關於frontend相關配置:#監聽套接字可以接受客戶端請求並且建立連接
具體格式如下 frontend webserver #frontend為代碼要求 weserver為自己定義的名字 bind *:80 # bind綁定端口,後面為IP:端口號(監聽端口) default_backend webserver #默認的backend,下面的bacend來調用
關於backend的相關配置和舉例:backend段用於定義後端real server,代理請求給後端服務器。
調度算法:
roundrobin:基於權重進行輪叫,在服務器的處理時間保持均勻分布時,這是最平衡、最公平的算法。此算法是動態的,這表示其權重可以在運行時進行調整,不過,在設計上,每個後端服務器僅能最多接受4128個連接;
static-rr:基於權重進行輪叫,與roundrobin類似,但是為靜態方法,在運行時調整其服務器權重不會生效;不過,其在後端服務器連接數上沒有限制;
leastconn:新的連接請求被派發至具有最少連接數目的後端服務器;在有著較長時間會話的場景中推薦使用此算法,如LDAP、SQL等,其並不太適用於較短會話的應用層協議
first:根據服務器在列表中的位置,自上而下進行調度;前面服務器的連接數達到上限,新請求才會分配給下一臺服務;
source:根據原地址hash可以使客戶端一直定向到某個客戶端
backend webserver #backend代碼格式 webserver則為上面frontend定義的 balance roundrobin #調度算法 server app1 172.17.200.78:80 check # 後端服務 check檢查(可以不加) server app2 172.17.200.79:80 check #格式為 server address [:port][param]
param的簡單參數(可以定義多個,check僅為其中的一個)
backup:為備用的服務器加上此選項之後則其他機器全部宕機之後該服務器啟動# !註意,全部宕機
check:後面跟參數檢查inter檢查健康狀態間隔默認毫秒,rise離線到正常的檢測次數,fall正常到不可用的檢查次數 # inter 3000 rise 2 fall 2
cookie:指定server設定cookie值,用來指定連接 #連到某臺server則一直保持連接該服務器
weight:權重 默認為1
Listen可以說是把frontend和backend結合起來但不建議這樣使用,現在可以用來建立一個健康監測頁面的listen段。
listen stats #定義一個統計報告服務 mode http #基於http協議 bind 0.0.0.0:1080 #監聽1080端口 stats enable #開啟統計報告服務 stats hide-version #隱藏統計報告版本信息 stats uri /haproxyadmin?stats #統計報告訪問url stats realm Haproxy\ Statistics #頁面登陸信息 stats auth admin:admin #驗證賬號信息 stats admin if TRUE #驗證模式
接下來借用一個keepalived來配合HAproxy做一個簡單的負載均衡:
keepalived配置如下,具體就不說怎麽做了!!!就是用來IP地址訪問和實現高可用的,地址轉移,不細說了。就說一點這裏面設置了一個172.17.200.100的IP來讓外界訪問。而這個地址可以轉移!
! Configuration File for keepalived global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP interface eth2 virtual_router_id 76 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 9000 } virtual_ipaddress { 172.17.200.100 } }
HAproxy配置如下:
frontend webserver bind *:80 default_backend webserver #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- backend static balance roundrobin server static 127.0.0.1:4331 check #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- backend webserver balance roundrobin server app1 172.17.200.78:80 check server app2 172.17.200.79:80 check
定義frontend端口和名稱,下面backend來調用即可,這裏調用三個兩個real server。這就差不多了 0.0可以訪問一下嘗試了。
記得訪問172.17.200.100
本文出自 “mlon客” 博客,請務必保留此出處http://13154101.blog.51cto.com/13144101/1980903
HAproxy簡介