haproxy 配置文件解析

HAProxy的算法有如下8種:

1. roundrobin,表示簡單的輪詢

2. static-rr,表示根據權重,

3. leastconn,表示最少連接者先處理,

4. source,表示根據請求源IP

5. uri,表示根據請求的URI

6. url_param,表示根據請求的URl參數'balance url_param' requires an URL parameter name

7. hdr(name),表示根據HTTP請求頭來鎖定每一次HTTP請求;

8. rdp-cookie(name),表示根據據cookie(name)來鎖定並哈希每一次TCP請求。




Haproxy相關啓動參數

# /usr/local/haproxy/sbin/haproxy –help

haproxy -f < 配置文件>

[-n 最大併發連接總數] [-N 每個偵聽的最大併發數] [-d] [-D] [-q] [-V] [-c] [-p ] [-s] [-l] [-dk]

[-ds] [-de] [-dp] [-db] [-m < 內存限制M>] [{-sf|-st} pidlist...]

-d 前臺,debug模式

-D daemon模式啓動

-q 安靜模式,不輸出信息

-V 詳細模式

-c對配置文件進行語法檢查

-s 顯示統計數據

-l 顯示詳細統計數據

-dk 不使用kqueue

-ds 不使用speculative epoll

-de 不使用epoll

-dp 不使用poll

-db 禁用後臺模式,程序跑在前臺

-sf 程序啓動後向pidlist裏的進程發送FINISH信號,這個參數放在命令行的最後

-st 程序啓動後向pidlist裏的進程發送TERMINATE信號,這個參數放在命令行的最後

:

# /usr/local/haproxy/sbin/haproxy -c  -f /usr/local/haproxy/etc/haproxy.cfg # haproxy 語法做檢查

# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg -sf `cat /var/run/haproxy.pid`# reload

# killall haproxy 或者 kill -9 `pidof haproxy`

. Haproxy 配置文件解說

# cat /usr/local/haproxy/etc/haproxy.cfg

####################全局配置信息#############參數是進程級的,通常和操作系統(OS)相關#########

global

      maxconn 20480                   #默認最大連接數

      log 127.0.0.1 local3            #[err warning info debug]

      chroot /usr/local/haproxy       #chroot運行的路徑

      uid 99                         #所屬運行的用戶uid

      gid 99                          #所屬運行的用戶組

      daemon                         #以後臺形式運行haproxy

      nbproc 1                       #進程數量(可以設置多個進程提高性能)

      pidfile /var/run/haproxy.pid    #haproxypid存放路徑,啓動進程的用戶必須有權限訪問此文件

      ulimit-n 65535                  #ulimit的數量限制

      #####################默認的全局設置##############這些參數可以被利用配置到frontendbackendlisten組件##

defaults

      log global

      mode http                       #所處理的類別 (#7http;4tcp  )

      maxconn 20480                  #最大連接數

      option httplog                  #日誌類別http日誌格式

      option httpclose                #每次請求完畢後主動關閉http通道

      option dontlognull              #不記錄健康檢查的日誌信息

      option forwardfor              #如果後端服務器需要獲得客戶端真實ip需要配置的參數,可以從Http Header中獲得客戶端ip  

      option redispatch              #serverId對應的服務器掛掉後,強制定向到其他健康的服務器  

      option abortonclose             #當服務器負載很高的時候,自動結束掉當前隊列處理比較久的連接

      stats refresh 30                #統計頁面刷新間隔

      retries 3                       #3次連接失敗就認爲服務不可用,也可以通過後面設置

      balance roundrobin              #默認的負載均衡的方式,輪詢方式

     #balance source                  #默認的負載均衡的方式,類似nginxip_hash,可以固定session

     #balance leastconn              #默認的負載均衡的方式,最小連接

      contimeout 5000                 #連接超時5s , 單位是ms

      clitimeout 50000                #客戶端超時

      srvtimeout 50000               #服務器超時

      timeout check 2000              #心跳檢測超時

#: 時間的設置,單位爲毫秒ms

1ms = 1/1000 second

1m = 60s = 60000 ms

1h = 60m = 3600s

1d = 24h = 1440m = 86400s = 864000000ms

      ####################監控頁面的設置#######################

listen admin_status                    #FrontendBackend的組合體,監控組的名稱,按需自定義名稱

       bind :65532             #監聽端口

       mode http                     #http7層模式

       log 127.0.0.1 local3 err       #錯誤日誌記錄

       stats refresh 5s              #每隔5秒自動刷新監控頁面

       stats uri /admin?stats         #監控頁面的url

       stats realm Haproxy\ Statistics #監控頁面的提示信息

       stats auth yangcan:yangcan     #監控頁面的用戶和密碼yangcan,可以設置多個用戶名

#stats auth admin:admin       #監控頁面的用戶和密碼admin

       stats hide-version             #隱藏統計頁面上的HAproxy版本信息  

       stats admin if TRUE          #手工啓用/禁用,後端服務器(haproxy-1.4.9以後版本)

      #######################網站監測listen配置#####################

      ###########此用法主要是監控haproxy後端服務器的監控狀態############

listen site_status

      bind :1081                    #監聽端口

      mode http                           #http7層模式

      log 127.0.0.1 local3 err             #[err warning info debug]

      monitor-uri /site_status             #網站健康檢測URL,用來檢測HAProxy管理的網站是否可以用,正常返回200,不正常返回503

      acl site_dead nbsrv(server_web) lt 2 #定義網站down時的策略當掛在負載均衡上的指定backend的中有效機器數小於2臺時返回true

      acl site_dead nbsrv(server_blog) lt 2

      acl site_dead nbsrv(server_bbs)  lt 2  

      monitor fail if site_dead            #當滿足策略的時候返回503,網上文檔說的是500,實際測試爲503

      monitor-net 10.0.0.103/24           #來自10.0.0.103的日誌信息不會被記錄和轉發

      monitor-net 10.0.0.25/24

      ########frontend配置############

      #####注意,frontend配置裏面可以定義多個acl進行匹配操作########

frontend http_80_in

      bind :80      #監聽端口,即haproxy提供web服務的端口,和lvsvip端口類似

      mode http            #http7層模式

      log global           #應用全局的日誌配置

      option httplog       #啓用httplog

      option httpclose     #每次請求完畢後主動關閉http通道,HA-Proxy不支持keep-alive模式

      option forwardfor    #如果後端服務器需要獲得客戶端的真實IP需要配置次參數,將可以從Http Header中獲得客戶端IP

errorfile 403 /etc/haproxy/errorfiles/403.http

errorfile 500 /etc/haproxy/errorfiles/500.http

errorfile 502 /etc/haproxy/errorfiles/502.http

errorfile 503 /etc/haproxy/errorfiles/503.http

errorfile 504 /etc/haproxy/errorfiles/504.http

      #################HAProxy的日誌記錄內容設置###################

      capture request  header Host           len 40

      capture request  header Content-Length len 10

      capture request  header Referer        len 200

      capture response header Server        len 40

      capture response header Content-Length len 10

      capture response header Cache-Control  len 8

      ########acl策略配置#############

      acl baby_web hdr_reg(host) -i ^(blog80.baby.local |station80.baby.local)$    

#如果請求的域名滿足正則表達式中的2個域名返回true -i是忽略大小寫,主要用於redirectwww80.baby.local;

      acl baby_blog hdr_dom(host) -i www80.baby.local

#如果請求的域名滿足www80.baby.local 返回true -i是忽略大小寫

      #acl baby    hdr(host) -i baby.local

#如果請求的域名滿足baby.local 返回true -i是忽略大小寫

      #acl file_req url_sub -i  killall=

#在請求url中包含killall=,則此控制策略返回true,否則爲false

      #acl dir_req url_dir -i allow

#在請求url中存在allow作爲部分地址路徑,則此控制策略返回true,否則返回false

      #acl missing_cl hdr_cnt(Content-length) eq 0

#當請求的headerContent-length等於0時返回true

      ########acl策略匹配相應#############

#block if missing_cl

#當請求中headerContent-length等於0阻止請求返回403

#block if !file_req || dir_req

#block表示阻止請求,返回403錯誤,當前表示如果不滿足策略file_req,或者滿足策略dir_req,則阻止請求

      redirect prefix http://www80.baby.local code 301 if baby

#當訪問itnihao.cn的時候,用http301挑轉到http://10.0.0.103

      reqisetbe       ^[^\]*\/(img|css)/      server_web

      reqisetbe       ^[^\]*\/bbs/            server_blog

# reqisetbe 關鍵字定義,根據定義的關鍵字選擇backend

      use_backend  server_web  if baby_web

#當滿足baby_web的策略時使用server_webbackend

      use_backend  server_blog if baby_log

#當滿足baby_log的策略時使用server_blogbackend

      default_backend server_bbs

#以上都不滿足的時候使用默認server_bbsbackend

# : redirect reqisetbe 需要放置在 use_backend 之前

      ##########backend的設置##############

  #下面我將設置三組服務器 server_webserver_blogserver_bbs

###########################backend server_web#############################

backend server_web

      mode http            #http7層模式

      balance roundrobin   #負載均衡的方式,roundrobin平均方式

      cookie SERVERID      #允許插入serveridcookie中,serverid後面可以定義

      option httpchk GET /index.html #心跳檢測的文件

      server web1 10.0.0.25:80 cookie web1 check inter 1500 rise 3 fall 3 weight 1  

#服務器定義,cookie 1表示serveridweb1check inter 1500是檢測心跳頻率rise 33次正確認爲服務器可用,

#fall 33次失敗認爲服務器不可用,weight代表權重

      server web2 10.0.0.103:80 cookie web2 check inter 1500 rise 3 fall 3 weight 2

#服務器定義,cookie 1表示serveridweb2check inter 1500是檢測心跳頻率rise 33次正確認爲服務器可用,

#fall 33次失敗認爲服務器不可用,weight代表權重

###################################backend server_blog###############################################

backend server_blog

      mode http  

      balance roundrobin

      cookie SERVERID

      option httpchk GET /index.html

      server blog1 10.0.0.25:80 cookie blog1 check inter 1500 rise 3 fall 3 weight 1  

      server blog2 10.0.0.103:80 cookie blog2 check inter 1500 rise 3 fall 3 weight 2

###################################backend server_bbs###############################################

backend server_bbs

      mode http    

      balance roundrobin

      cookie SERVERID  

      option httpchk GET /index.html

      server bbs1 10.0.0.25:80 cookie bbs1 check inter 1500 rise 3 fall 3 weight 1  

      server bbs2 10.0.0.103:80 cookie bbs2 check inter 1500 rise 3 fall 3 weight 2

################################### 虛擬主機的配置支持###############################################

listen blog80.baby.local0.0.0.0:80

      mode http    

      balance roundrobin

      cookie SERVERID  

      option httpchk GET /index.html

      server bbs1 10.0.0.25:80 cookie bbs1 check inter 1500 rise 3 fall 3 weight 1  

      server bbs2 10.0.0.103:80 cookie bbs2 check inter 1500 rise 3 fall 3 weight 2

listen bbs.baby.local0.0.0.0:80

      mode http    

      balance roundrobin

      cookie SERVERID  

      option httpchk GET /index.html

      server bbs1 10.0.0.25:80 cookie bbs1 check inter 1500 rise 3 fall 3 weight 1  

      server bbs2 10.0.0.103:80 cookie bbs2 check inter 1500 rise 3 fall 3 weight 2


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章