1. 程式人生 > >haproxy+tomcat部署配置

haproxy+tomcat部署配置

安裝
1、下載haproxy1.6.3 for windows_64.zip,haproxy官網不提供windows版本,大多是用cygwin工具編譯原始碼生成
2、解壓即可
配置
global   # 全域性引數的設定
log 127.0.0.1 local0 info
# log語法:log <address_1>[max_level_1] # 全域性的日誌配置,使用log關鍵字,指定使用127.0.0.1上的syslog服務中的local0日誌裝置,記錄日誌等級為info的日誌
user haproxy
group haproxy
# 設定執行haproxy的使用者和組,也可使用uid,gid關鍵字替代之
daemon
# 以守護程序的方式執行
nbproc 16
# 設定haproxy啟動時的程序數,根據官方文件的解釋,我將其理解為:該值的設定應該和伺服器的CPU核心數一致,即常見的2顆8核心CPU的伺服器,即共有16核心,則可以將其值設定為:<=16 ,建立多個程序數,可以減少每個程序的任務佇列,但是過多的程序數也可能會導致程序的崩潰。這裡我設定為16
maxconn 4096
# 定義每個haproxy程序的最大連線數 ,由於每個連線包括一個客戶端和一個伺服器端,所以單個程序的TCP會話最大數目將是該值的兩倍。
#ulimit -n 65536
# 設定最大開啟的檔案描述符數,在1.4的官方文件中提示,該值會自動計算,所以不建議進行設定
pidfile /var/run/haproxy.pid
# 定義haproxy的pid 
defaults # 預設部分的定義
mode http
# mode語法:mode {http|tcp|health} 。http是七層模式,tcp是四層模式,health是健康檢測,返回OK
log 127.0.0.1 local3 err
# 使用127.0.0.1上的syslog服務的local3裝置記錄錯誤資訊
retries 3
# 定義連線後端伺服器的失敗重連次數,連線失敗次數超過此值後將會將對應後端伺服器標記為不可用
option httplog
# 啟用日誌記錄HTTP請求,預設haproxy日誌記錄是不記錄HTTP請求的,只記錄“時間[Jan 5 13:23:46] 日誌伺服器[127.0.0.1] 例項名已經pid[haproxy[25218]] 資訊[Proxy http_80_in stopped.]”,日誌格式很簡單。
option redispatch
# 當使用了cookie時,haproxy將會將其請求的後端伺服器的serverID插入到cookie中,以保證會話的SESSION永續性;而此時,如果後端的伺服器宕掉了,但是客戶端的cookie是不會重新整理的,如果設定此引數,將會將客戶的請求強制定向到另外一個後端server上,以保證服務的正常。
option abortonclose
# 當伺服器負載很高的時候,自動結束掉當前佇列處理比較久的連結
option dontlognull
# 啟用該項,日誌中將不會記錄空連線。所謂空連線就是在上游的負載均衡器或者監控系統為了探測該服務是否存活可用時,需要定期的連線或者獲取某一固定的元件或頁面,或者探測掃描埠是否在監聽或開放等動作被稱為空連線;官方文件中標註,如果該服務上游沒有其他的負載均衡器的話,建議不要使用該引數,因為網際網路上的惡意掃描或其他動作就不會被記錄下來
option httpclose
# 這個引數我是這樣理解的:使用該引數,每處理完一個request時,haproxy都會去檢查http頭中的Connection的值,如果該值不是close,haproxy將會將其刪除,如果該值為空將會新增為:Connection: close。使每個客戶端和伺服器端在完成一次傳輸後都會主動關閉TCP連線。與該引數類似的另外一個引數是“option forceclose”,該引數的作用是強制關閉對外的服務通道,因為有的伺服器端收到Connection: close時,也不會自動關閉TCP連線,如果客戶端也不關閉,連線就會一直處於開啟,直到超時。
contimeout 5000
# 設定成功連線到一臺伺服器的最長等待時間,預設單位是毫秒,新版本的haproxy使用timeout connect替代,該引數向後相容
clitimeout 3000
# 設定連線客戶端傳送資料時的成功連線最長等待時間,預設單位是毫秒,新版本haproxy使用timeout client替代。該引數向後相容
srvtimeout 3000
# 設定伺服器端迴應客戶度資料傳送的最長等待時間,預設單位是毫秒,新版本haproxy使用timeout server替代。該引數向後相容

listen status # 定義一個名為status的部分
bind 0.0.0.0:1080
# 定義監聽的套接字
mode http
# 定義為HTTP模式
log global
# 繼承global中log的定義
stats refresh 30s
# stats是haproxy的一個統計頁面的套接字,該引數設定統計頁面的重新整理間隔為30s
stats uri /admin?stats
# 設定統計頁面的uri為/admin?stats
stats realm Private lands
# 設定統計頁面認證時的提示內容
stats auth admin:password
# 設定統計頁面認證的使用者和密碼,如果要設定多個,另起一行寫入即可
stats hide-version
# 隱藏統計頁面上的haproxy版本資訊

frontend http_80_in # 定義一個名為http_80_in的前端部分
bind 0.0.0.0:80
# http_80_in定義前端部分監聽的套接字
mode http
# 定義為HTTP模式
log global
# 繼承global中log的定義
option forwardfor
# 啟用X-Forwarded-For,在requests頭部插入客戶端IP傳送給後端的server,使後端server獲取到客戶端的真實IP
acl static_down nbsrv(static_server) lt 1
# 定義一個名叫static_down的acl,當backend static_sever中存活機器數小於1時會被匹配到
acl php_web url_reg /*.php$
#acl php_web path_end .php
# 定義一個名叫php_web的acl,當請求的url末尾是以.php結尾的,將會被匹配到,上面兩種寫法任選其一
acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$
#acl static_web path_end .gif .png .jpg .css .js .jpeg
# 定義一個名叫static_web的acl,當請求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif結尾的,將會被匹配到,上面兩種寫法任選其一
use_backend php_server if static_down
# 如果滿足策略static_down時,就將請求交予backend php_server
use_backend php_server if php_web
# 如果滿足策略php_web時,就將請求交予backend php_server
use_backend static_server if static_web
# 如果滿足策略static_web時,就將請求交予backend static_server

backend php_server #定義一個名為php_server的後端部分
mode http
# 設定為http模式
balance source
#'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請求
# 設定haproxy的排程演算法為源地址hash
cookie SERVERID
# 允許向cookie插入SERVERID,每臺伺服器的SERVERID可在下面使用cookie關鍵字定義
option httpchk GET /test/index.php
# 開啟對後端伺服器的健康檢測,通過GET /test/index.php來判斷後端伺服器的健康情況
server php_server_1 10.12.25.68:80 cookie 1 check inter 2000 rise 3 fall 3 weight 2
server php_server_2 10.12.25.72:80 cookie 2 check inter 2000 rise 3 fall 3 weight 1
server php_server_bak 10.12.25.79:80 cookie 3 check inter 1500 rise 3 fall 3 backup
# server語法:server [:port] [param*] # 使用server關鍵字來設定後端伺服器;為後端伺服器所設定的內部名稱[php_server_1],該名稱將會呈現在日誌或警報中、後端伺服器的IP地址,支援埠對映[10.12.25.68:80]、指定該伺服器的SERVERID為1[cookie 1]、接受健康監測[check]、監測的間隔時長,單位毫秒[inter 2000]、監測正常多少次後被認為後端伺服器是可用的[rise 3]、監測失敗多少次後被認為後端伺服器是不可用的[fall 3]、分發的權重[weight 2]、最為備份用的後端伺服器,當正常的伺服器全部都宕機後,才會啟用備份伺服器[backup]

backend static_server
mode http
option httpchk GET /test/index.html
server static_server_1 10.12.25.83:80 cookie 3 check inter 2000 rise 3 fall 3


方案1、listen配置叢集服務(不區分前後端)
listen eform_server1
#監聽埠
bind    0.0.0.0:8001
#模式
mode    http
#負載方式(輪詢、隨機、權重等等)
balance roundrobin  
#Tomcat server地址
server eform1 127.0.0.1:7000 check inter 2s
server eform2 127.0.0.1:7010 check inter 2s
方案2、frontend(前端)和backend(後端)配置叢集服務,好處是可以在前端對地址
進行攔截,根據url規則判斷請求哪個後端叢集服務。
frontend http_8000
mode http
maxconn 10000
bind 0.0.0.0:8000
option httpclose
option forwardfor
#判斷以/eform訪問應用
acl is_eform path_beg -i /eform 
#判斷如果是is_eform,使用efrom_server後端服務
use_backend eform_server if is_eform 


backend eform_server
balance     roundrobin #負載模式,具體檢視文件
mode http
option httpclose
cookie SERVERID
server eform1 127.0.0.1:7000 check inter 2s
server eform2 127.0.0.1:7010 check inter 2s

常用命令
啟動:haproxy.exe -f haproxy.cfg -d
其中-d為視窗執行,-D為後臺執行