HAProxy Windows版本的編譯及其在CORS中的應用


一.HAProxy簡介

  HAProxy提供高可用性 、負載均衡以及基於TCP和HTTP應用的代理,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。 HAProxy運行在當前的硬件上,完全可以支持數以萬計 的並發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。

  HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的並發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千並發連接。事件驅動模型因為在有更好的資源和時間管理的用戶端(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是為什么他們必須進行優化以使每個CPU時間片(Cycle)做更多的工作。下圖展示了HAProxy的負載均衡應用模型:

  

 

 

二.應用可行性

  出於HAProxy的眾多優點,將其應用於CORS(連續運行衛星定位服務綜合系統)運維工作可有效提高現有的最大負載能力、減少硬件資源的浪費、保障系統的可用性及穩定性。具體地,可以從以下幾個方面闡述:

  1.基於TCP代理在基准站數據流分發流程中充當代理服務器的功能;

  2.基於TCP代理在用戶接入及數據播發流程中起到負載均衡均衡器的作用;

  對於用戶數量多,並發性高的CORS,使用HAProxy將對外服務端口的請求對應至控制中心內部網絡的多個相同功能的應用程序(如IGate/TNC等)的服務端   HAProxy可以通過多種方式(IP、cookie、session)保持tcp鏈接的親緣性,確保數據交互的正確性。通過多種負載均衡算法,內部的服務程序分擔總體的服務壓力,當某個程序down掉了,HAProxy能夠自動將相關的tcp鏈接分發至其它服務程序。HAProxy實現了8種負載均衡算法: 

  • roundrobin,表示簡單的輪詢
  • static-rr,表示根據權重,可根據服務器性能賦權
  • leastconn,表示最少連接者先處理
  • source,表示根據請求源IP
  • uri,表示根據請求的URI
  • url_param,表示根據請求的URl參數'balance url_param' requires an URL parameter name
  • hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求
  • rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求

  3.基於tcp代理實現內部網絡的防火牆的NAT功能。

 

三.HAProxy的安裝與配置

  此文編寫HAProxy最新穩定版本的下載地址為:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.25.tar.gz。

  1.Linux下HAProxy的安裝

  • tar zcvf haproxy-1.4.25.tar.gz 
  • cd haproxy-1.4.25
  • make TARGET=linux28 PREFIX=/usr/local/haprpxy
  • make install PREFIX=/usr/local/haproxy
  • cd /usr/local/haproxy
  • vim haproxy.cfg  編輯配置文件,后面統一闡述配置的相關細節
  • /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg    使用剛才的配置文件啟動HAProxy

  2. Windows下HAProxy的編譯與安裝

  • 下載cygwin安裝工具,文章編寫時其64位下載地址為:https://cygwin.com/setup-x86_64.exe。運行程序,程序截圖如下:
  • 安裝gcc,狀態為Keep的是本機已安裝的,如未安裝請勾選Bin列的復選框
  • 安裝make工具。
  • 將下載的HAProxy源碼包復制到:C:\cygwin64\home,並解壓到該目錄,
  • 使用Cywin64 Terminal命令行工具進入HAProxy目錄:
  • make TARGET=cygwin
  • make install   這樣haproxy.exe就編譯好了,將haproxy.exe和cygwin1.dll拷貝出來以供使用。
  • 運行方式與Linux環境下一致。

  3.HAProxy配置文件解析

  ########默認配置############
defaults
mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
retries 2 #兩次連接失敗就認為是服務器不可用,也可以通過后面設置
option redispatch #當serverId對應的服務器掛掉后,強制定向到其他健康的服務器
option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接
maxconn 4096 #默認的最大連接數
timeout connect 5000ms #連接超時
timeout client 30000ms #客戶端超時
timeout server 30000ms #服務器超時
#timeout check 2000 #=心跳檢測超時
log 127.0.0.1 local0 err #[err warning info debug]


########統計頁面配置########
listen admin_stats
bind 0.0.0.0:1080 #監聽端口
mode http #http的7層模式
option httplog #采用http日志格式
#log 127.0.0.1 local0 err
maxconn 10
stats refresh 30s #統計頁面自動刷新時間
stats uri /stats #統計頁面url
stats realm XingCloud\ Haproxy #統計頁面密碼框上提示文本
stats auth admin:admin #統計頁面用戶名和密碼設置
stats hide-version #隱藏統計頁面上HAProxy的版本信息


########test1配置#################
listen test1
bind 0.0.0.0:90
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 10.18.138.201:80
server s2 10.18.102.190:80
server s3 10.18.102.189:80
server s4 10.18.102.188:80
server s5 10.18.102.187:80
########frontend配置##############


########test2配置#################
listen test2
bind 0.0.0.0:91
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 10.18.138.130:80 weight 1
server s2 10.18.138.201:8080 weight 6
########frontend配置##############

  4.實例測試

  為了測試運行效果我們使用最簡單的配置做一個簡單的tcp代理:

##########全局配置#########
global
daemon
nbproc 1
pidfile /var/run/haproxy.pid


########默認配置############
defaults
mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
retries 2 #兩次連接失敗就認為是服務器不可用,也可以通過后面設置
option redispatch #當serverId對應的服務器掛掉后,強制定向到其他健康的服務器
option abortonclose #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接
maxconn 4096 #默認的最大連接數
timeout connect 5000ms #連接超時
timeout client 30000ms #客戶端超時
timeout server 30000ms #服務器超時
#timeout check 2000 #=心跳檢測超時
log 127.0.0.1 local0 err #[err warning info debug]


########統計頁面配置########
listen admin_stats
bind 0.0.0.0:1080 #監聽端口
mode http #http的7層模式
option httplog #采用http日志格式
#log 127.0.0.1 local0 err
maxconn 10
stats refresh 30s #統計頁面自動刷新時間
stats uri /stats #統計頁面url
stats realm XingCloud\ Haproxy #統計頁面密碼框上提示文本
stats auth admin:admin #統計頁面用戶名和密碼設置
stats hide-version #隱藏統計頁面上HAProxy的版本信息


########test1配置#################
listen test1
bind 0.0.0.0:81
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 192.168.1.200:8000

server s1 192.168.1.201:8001

server s1 192.168.1.202:8002
########frontend配置##############


########test2配置#################
listen test2
bind 0.0.0.0:91
mode tcp
#maxconn 4086
#log 127.0.0.1 local0 debug
server s1 192.168.1.100:9000

server s1 192.168.1.101:9001

server s1 192.168.1.102:9002
########frontend配置##############

    

 


免責聲明!

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



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