Haproxy負載均衡/動靜分離(haproxy各選項詳細解釋)


在前端領域做負載均衡,動靜分離的程序有很多,比較常用的是nginx和Haproxy,今天就說一下

Haproxy在這兩方面的表現,文章參考很多網文寫成,再加上自己的實驗成果,文中所有解釋都經過實際環境驗證。

 

環境介紹:

Centos 6.5

Haproxy 1.7.9

前端 192.168.6.10

后端 192.168.6.20(web1)  192.168.6.21(web2)

圖片服務器 192.168.6.22(img01)

 

1.安裝Haproxy

wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.9.tar.gz tar -xvf haproxy-1.7.9.tar.gz mkdir /usr/local/haproxy cd haproxy-1.7.9 make TARGET=/usr/local/haproxy make install
 

2.編輯配置文件

vim /usr/local/haproxy/conf/haproxy.cfg

###########全局配置######### global log 192.168.6.11 local0 info #[日志輸出配置,info日志都記錄在遠程服務器,通過local6輸出,不需要ssh驗證機制] log 127.0.0.1 local0 notice #定義haproxy notice日志記錄在本機 此級別比較常用 #日志級別 #emerg 0 系統不可用 #alert 1 必須馬上采取行動的事件 #crit 2 關鍵的事件 #err 3 錯誤事件 #warning 4 警告事件 #notice 5 普通但重要的事件 #info 6 有用的信息 daemon #以后台形式運行harpoxy nbproc 1 #設置進程數量 pidfile /home/haproxy/haproxy/conf/haproxy.pid #haproxy 進程PID文件 ulimit-n 819200 #ulimit 的數量限制 maxconn 4096 #默認最大連接數,需考慮ulimit-n限制 #chroot /usr/share/haproxy #chroot運行路徑 uid 99 #運行haproxy 用戶 UID 99是nobody用戶 gid 99 #運行haproxy 用戶組gid #debug #haproxy 調試級別,建議只在開啟單進程的時候調試 #quiet ########默認配置############ defaults log global mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK option httplog #日志類別,采用httplog option dontlognull #不記錄健康檢查日志信息 retries 2 #兩次連接失敗就認為是服務器不可用,也可以通過后面設置 option forwardfor #如果后端服務器需要獲得客戶端真實ip需要配置的參數,可以從Http Header中獲得客戶端ip option httpclose #每次請求完畢后主動關閉http通道,haproxy不支持keep-alive,只能模擬這種模式的實現 #option redispatch #當serverId對應的服務器掛掉后,強制定向到其他健康的服務器,以后將不支持 option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接 maxconn 4096 #默認的最大連接數 timeout connect 5000ms #連接超時 timeout client 30000ms #客戶端超時 timeout server 30000ms #服務器超時 #timeout check 2000 #心跳檢測超時 #timeout http-keep-alive 10s #默認持久連接超時時間 #timeout http-request 10s #默認http請求超時時間 #timeoutqueue 1m #默認隊列超時時間 balance roundrobin #設置默認負載均衡方式,輪詢方式 #balance source #設置默認負載均衡方式,類似於nginx的ip_hash #balnace leastconn #設置默認負載均衡方式,最小連接數 ########統計頁面配置######## listen admin_stats bind 0.0.0.0:1080 #設置Frontend和Backend的組合體,監控組的名稱,按需要自定義名稱 mode http #http的7層模式 option httplog #采用http日志格式 #log 127.0.0.1 local0 err #錯誤日志記錄 maxconn 10 #默認的最大連接數 stats refresh 20s #統計頁面自動刷新時間 stats uri /666-stats #統計頁面url stats realm XingCloud\ Haproxy #統計頁面密碼框上提示文本 #stats realm Haproxy\ Statistics #統計頁面密碼框上提示文本 stats auth admin:admin123 #設置監控頁面的用戶和密碼:admin,可以設置多個用戶名 # stats auth Frank:Frank #設置監控頁面的用戶和密碼:Frank stats hide-version #隱藏統計頁面上HAProxy的版本信息 stats admin if TRUE #設置手工啟動/禁用,后端服務器(haproxy-1.4.9以后版本) ########設置haproxy 錯誤頁面##### #errorfile 403 /home/haproxy/haproxy/errorfiles/403.http #errorfile 500 /home/haproxy/haproxy/errorfiles/500.http #errorfile 502 /home/haproxy/haproxy/errorfiles/502.http errorfile 503 /home/haproxy/503.hh #文件名和后綴可隨便起,瀏覽器都可以正常顯示 #errorfile 504 /home/haproxy/haproxy/errorfiles/504.http #errorloc 404 /home/haproxy/404.htm errorloc 503 /home/haproxy/503.hh #后端有一台報錯,直接跳轉到此頁面 ########frontend前端配置############## bind *:80 #這里建議使用bind *:80的方式,要不然做集群高可用的時候有問題,vip切換到其他機器就不能訪問了。 acl webserver hdr(host) -i www.abc.com #acl后面是規則名稱,-i是要訪問的域名, acl url_static path_beg -i /upload/ acl url_static path_end -i .jpg .jpeg .gif .png .css .js .html use_backend imgserver if url_static #如果匹配靜態規則就跳轉到imgserver default_backend webserver #默認規則 #如果訪問www.abc.com這個域名就分發到下面的webserver 的作用域。 #如果訪問img.abc.com.cn就分發到imgserver這個作用域。 #use_backend webserver if web #設置了默認規則,這里可以不設置 #use_backend imgserver if img ########backend后端配置############## backend webserver #webserver作用域 cookie srv insert nocache #插入一個cookie,在下次用戶登錄時登錄到同樣的后端 balance roundrobin #banlance roundrobin 輪詢,balance source 保存session值,支持static-rr,leastconn,first,uri等參數 option httpchk GET /index.html #HTTP/1.0 #健康檢查 #檢測文件,如果分發到后台index.html訪問不到就不再分發給它 server web1 192.168.6.20:80 cookie web1 weight 5 check inter 2000 rise 2 fall 3 server web2 192.168.6.21:80 cookie web2 weight 3 check inter 2000 rise 2 fall 3 #cookie web1表示cookie名稱為web1,check inter 1500 是檢測心跳頻率 #rise 2是2次正確認為服務器可用,fall 3是3次失敗認為服務器不可用,weight代表權重 backend imgserver option httpchk /upload/ #檢測文件夾是否存在 balance roundrobin server img01 192.168.6.22:80 check inter 2000 fall 3
 

3.增加Haproxy日志存放位置

Haproxy日志默認是存放在/var/log/message,但是message里信息較多,建議分離出自己想要的部分到別的日志文件中

①vim /etc/sysconfig/rsyslog

SYSLOGD_OPTIONS="-r -m 0 -c 2"
 

②vim /etc/rsyslog.conf

去掉以下兩行的注釋:

$ModLoad imudp $UDPServerRun 514
 

添加一行:

local5.*      /var/log/haproxy/haproxy.log  #級別為5的日志存放位置,各級文件夾必須存在
 

③重啟rsyslog

service rsyslog restart
 

完成后Message和haproxy.log中會同時存在日志,因級別不同,顯示內容也就會不同

4.啟動Haproxy

cd /usr/local/haproxy/

./sbin/haproxy -f conf/haproxy.cfg

觀察日志 tail /var/log/message

3737334403e87d9ebbaaa7c2cc58e902.png-wh_

出現以上提示為啟動成功

4bb408bbfa1e2918cc991336e0c64da7.png-wh_

出現以上提示為后端其中一台服務器連接失敗

5.訪問http://192.168.6.10/666-stats,輸入用戶名密碼后出現如下界面:

fb842f52ad83270e125d00fedbb19ef5.png-wh_

3個服務器連接正常,可以提供服務!

注:附一張緩存插入成功的截圖,僅供參考,圖片是360極速瀏覽器的截圖

abe727b94a2564a117bfd3b51562c053.png-wh_

原文:https://blog.51cto.com/forall/1974621


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM