happroxy的設定檔詳解

來源:互聯網
上載者:User

 

 

 

 

1. HAProxy的安裝

  在“http://haproxy.1wt.eu/#down”下載HAProxy的源碼包。這裡以1.3.20版本,安裝在目錄/home/admin/haproxy為例

解壓下載的源碼包

  tar -xzvf haproxy-1.3.20.tar.gz

2.編譯安裝

  進入解壓後的源碼目錄

  make TARGET=linux26 PREFIX=/home/admin/haproxy install

  (注意,TARGET後面根據本機作業系統核心版本來填寫,PREFIX是要安裝到的目錄)

  安裝完成後會在安裝目錄下產生doc ,sbin ,share三個檔案夾。解壓的源碼檔案也可以刪除掉。

3.建立設定檔

在安裝目錄下建立設定檔目錄

mkdir conf

在新建立的目錄下建立設定檔

vi haproxy.cfg

在建立的haproxy.cfg檔案中填入

 

 

  1. #/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg -st `cat /var/run/haproxy.pid` 
  2.        ####################全域配置資訊######################## 
  3.        #######參數是進程級的,通常和作業系統(OS)相關######### 
  4. global 
  5.        maxconn 20480                   #預設最大串連數 
  6.        log 127.0.0.1 local3            #[err warning info debug] 
  7.        chroot /var/haproxy             #chroot啟動並執行路徑 
  8.        uid 99                          #所屬啟動並執行使用者uid 
  9.        gid 99                          #所屬啟動並執行使用者組 
  10.        daemon                          #以後台形式運行haproxy 
  11.        nbproc 1                        #進程數量(可以設定多個進程提高效能) 
  12.        pidfile /var/run/haproxy.pid    #haproxy的pid存放路徑,啟動進程的使用者必須有許可權訪問此檔案 
  13.        ulimit-n 65535                  #ulimit的數量限制 
  14.        #####################預設的全域設定###################### 
  15.        ##這些參數可以被利用配置到frontend,backend,listen組件## 
  16. defaults 
  17.        log global 
  18.        mode http                       #所處理的類別 (#7層 http;4層tcp  ) 
  19.     maxconn 20480                   #最大串連數 
  20.        option httplog                  #日誌類別http日誌格式 
  21.        option httpclose                #每次請求完畢後主動關閉http通道 
  22.        option dontlognull              #不記錄健全狀態檢查的日誌資訊 
  23.        option forwardfor               #如果後端伺服器需要獲得用戶端真實ip需要配置的參數,可以從Http Header中獲得用戶端ip  
  24.        option redispatch               #serverId對應的伺服器掛掉後,強制定向到其他健康的伺服器  
  25.        option abortonclose             #當伺服器負載很高的時候,自動結束掉當前隊列處理比較久的串連 
  26.        stats refresh 30                #統計頁面重新整理間隔 
  27.        retries 3                       #3次串連失敗就認為服務不可用,也可以通過後面設定 
  28.        balance roundrobin              #預設的負載平衡的方式,輪詢方式 
  29.       #balance source                  #預設的負載平衡的方式,類似nginx的ip_hash 
  30.       #balance leastconn               #預設的負載平衡的方式,最小串連 
  31.        contimeout 5000                 #連線逾時 
  32.        clitimeout 50000                #用戶端逾時 
  33.        srvtimeout 50000                #伺服器逾時 
  34.        timeout check 2000              #心跳檢測逾時 
  35.  
  36.        ####################監控頁面的設定####################### 
  37. listen admin_status                    #Frontend和Backend的組合體,監控組的名稱,按需自訂名稱 
  38.         bind 0.0.0.0:65532             #監聽連接埠 
  39.         mode http                      #http的7層模式 
  40.         log 127.0.0.1 local3 err       #錯誤記錄檔記錄 
  41.         stats refresh 5s               #每隔5秒自動重新整理監控頁面 
  42.         stats uri /admin?stats         #監控頁面的url 
  43.         stats realm itnihao itnihao   #監控頁面的提示資訊 
  44.         stats auth admin:admin         #監控頁面的使用者和密碼admin,可以設定多個使用者名稱 
  45.         stats auth admin1:admin1       #監控頁面的使用者和密碼admin1 
  46.         stats hide-version             #隱藏統計頁面上的HAproxy版本資訊  
  47.         stats admin if TRUE            #手工啟用/禁用,後端伺服器(haproxy-1.4.9以後版本) 
  48.  
  49.  
  50.        errorfile 403 /etc/haproxy/errorfiles/403.http 
  51.        errorfile 500 /etc/haproxy/errorfiles/500.http 
  52.        errorfile 502 /etc/haproxy/errorfiles/502.http 
  53.        errorfile 503 /etc/haproxy/errorfiles/503.http 
  54.        errorfile 504 /etc/haproxy/errorfiles/504.http 
  55.  
  56.        #################HAProxy的日誌記錄內容設定################### 
  57.        capture request  header Host           len 40 
  58.        capture request  header Content-Length len 10 
  59.        capture request  header Referer        len 200 
  60.        capture response header Server         len 40 
  61.        capture response header Content-Length len 10 
  62.        capture response header Cache-Control  len 8 
  63.      
  64.        #######################網站監測listen配置##################### 
  65.        ###########此用法主要是監控haproxy後端伺服器的監控狀態############ 
  66. listen site_status 
  67.        bind 0.0.0.0:1081                    #監聽連接埠 
  68.        mode http                            #http的7層模式 
  69.        log 127.0.0.1 local3 err             #[err warning info debug] 
  70.        monitor-uri /site_status             #網站健康檢測URL,用來檢測HAProxy管理的網站是否可以用,正常返回200,不正常返回503 
  71.        acl site_dead nbsrv(server_web) lt 2 #定義網站down時的策略當掛在負載平衡上的指定backend的中有效機器數小於1台時返回true 
  72.        acl site_dead nbsrv(server_blog) lt 2 
  73.        acl site_dead nbsrv(server_bbs)  lt 2  
  74.        monitor fail if site_dead            #當滿足策略的時候返回503,網上文檔說的是500,實際測試為503 
  75.        monitor-net 192.168.16.2/32          #來自192.168.16.2的日誌資訊不會被記錄和轉寄 
  76.        monitor-net 192.168.16.3/32 
  77.  
  78.        ########frontend配置############ 
  79.        #####注意,frontend配置裡面可以定義多個acl進行匹配操作######## 
  80. frontend http_80_in 
  81.        bind 0.0.0.0:80      #監聽連接埠,即haproxy提供web服務的連接埠,和lvs的vip連接埠類似 
  82.        mode http            #http的7層模式 
  83.        log global           #應用全域的日誌配置 
  84.        option httplog       #啟用http的log 
  85.        option httpclose     #每次請求完畢後主動關閉http通道,HA-Proxy不支援keep-alive模式 
  86.        option forwardfor    #如果後端伺服器需要獲得用戶端的真實IP需要配置次參數,將可以從Http Header中獲得用戶端IP 
  87.        ########acl策略配置############# 
  88.        acl itnihao_web hdr_reg(host) -i ^(www.itnihao.cn|ww1.itnihao.cn)$    
  89.        #如果請求的網域名稱滿足Regex中的2個網域名稱返回true -i是忽略大小寫 
  90.        acl itnihao_blog hdr_dom(host) -i blog.itnihao.cn 
  91.        #如果請求的網域名稱滿足www.itnihao.cn返回true -i是忽略大小寫 
  92.        #acl itnihao    hdr(host) -i itnihao.cn 
  93.        #如果請求的網域名稱滿足itnihao.cn返回true -i是忽略大小寫 
  94.        #acl file_req url_sub -i  killall= 
  95.        #在請求url中包含killall=,則此控制策略返回true,否則為false 
  96.        #acl dir_req url_dir -i allow 
  97.        #在請求url中存在allow作為部分地址路徑,則此控制策略返回true,否則返回false 
  98.        #acl missing_cl hdr_cnt(Content-length) eq 0 
  99.        #當請求的header中Content-length等於0時返回true 
  100.  
  101.        ########acl策略匹配相應############# 
  102.        #block if missing_cl 
  103.        #當請求中header中Content-length等於0阻止請求返回403 
  104.        #block if !file_req || dir_req 
  105.        #block表示阻止請求,返回403錯誤,當前表示如果不滿足策略file_req,或者滿足策略dir_req,則阻止請求 
  106.        use_backend  server_web  if itnihao_web 
  107.        #當滿足itnihao_web的策略時使用server_web的backend 
  108.        use_backend  server_blog if itnihao_blog 
  109.        #當滿足itnihao_blog的策略時使用server_blog的backend 
  110.        #redirect prefix http://blog.itniaho.cn code 301 if itnihao 
  111.        #當訪問itnihao.cn的時候,用http的301挑轉到http://192.168.16.3 
  112.        default_backend server_bbs 
  113.        #以上都不滿足的時候使用預設server_bbs的backend 
  114.  
  115.  
  116.  
  117.  
  118.        ##########backend的設定############## 
  119.        #下面我將設定三組伺服器 server_web,server_blog,server_bbs
  120. ###########################backend server_web############################# 
  121. backend server_web 
  122.        mode http            #http的7層模式 
  123.        balance roundrobin   #負載平衡的方式,roundrobin平均方式 
  124.        cookie SERVERID      #允許插入serverid到cookie中,serverid後面可以定義 
  125.        option httpchk GET /index.html #心跳檢測的檔案 
  126.        server web1 192.168.16.2:80 cookie web1 check inter 1500 rise 3 fall 3 weight 1  
  127.        #伺服器定義,cookie 1表示serverid為web1,check inter 1500是檢測心跳頻率rise 3是3次正確認為伺服器可用, 
  128.        #fall 3是3次失敗認為伺服器不可用,weight代表權重 
  129.        server web2 192.168.16.3:80 cookie web2 check inter 1500 rise 3 fall 3 weight 2 
  130.        #伺服器定義,cookie 1表示serverid為web2,check inter 1500是檢測心跳頻率rise 3是3次正確認為伺服器可用, 
  131.        #fall 3是3次失敗認為伺服器不可用,weight代表權重 
  132.  
  133. ###################################backend server_blog############################################### 
  134. backend server_blog 
  135.        mode http            #http的7層模式 
  136.        balance roundrobin   #負載平衡的方式,roundrobin平均方式 
  137.        cookie SERVERID      #允許插入serverid到cookie中,serverid後面可以定義 
  138.        option httpchk GET /index.html #心跳檢測的檔案 
  139.        server blog1 192.168.16.2:80 cookie blog1 check inter 1500 rise 3 fall 3 weight 1  
  140.        #伺服器定義,cookie 1表示serverid為web1,check inter 1500是檢測心跳頻率rise 3是3次正確認為伺服器可用,fall 3是3次失敗認為伺服器不可用,weight代表權重 
  141.        server blog2 192.168.16.3:80 cookie blog2 check inter 1500 rise 3 fall 3 weight 2 
  142.         #伺服器定義,cookie 1表示serverid為web2,check inter 1500是檢測心跳頻率rise 3是3次正確認為伺服器可用,fall 3是3次失敗認為伺服器不可用,weight代表權重 
  143.  
  144. ###################################backend server_bbs############################################### 
  145.  
  146. backend server_bbs 
  147.        mode http            #http的7層模式 
  148.        balance roundrobin   #負載平衡的方式,roundrobin平均方式 
  149.        cookie SERVERID      #允許插入serverid到cookie中,serverid後面可以定義 
  150.        option httpchk GET /index.html #心跳檢測的檔案 
  151.        server bbs1 192.168.16.2:80 cookie bbs1 check inter 1500 rise 3 fall 3 weight 1  
  152.        #伺服器定義,cookie 1表示serverid為web1,check inter 1500是檢測心跳頻率rise 3是3次正確認為伺服器可用,fall 3是3次失敗認為伺服器不可用,weight代表權重 
  153.        server bbs2 192.168.16.3:80 cookie bbs2 check inter 1500 rise 3 fall 3 weight 2 
  154.         #伺服器定義,cookie 1表示serverid為web2,check inter 1500是檢測心跳頻率rise 3是3次正確認為伺服器可用,fall 3是3次失敗認為伺服器不可用,weight代表權重 

以上為基本的設定檔,下面會對這個配置一一說明和應用。

 

 

haproxy 的啟動
/usr/local/haproxy/sbin/haproxy –f /usr/local/haproxy/haproxy.cfg

Haproxy的重啟
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/haproxy.pid` (不要換行)

Haproxy的停止
Killall -9 haproxy

啟動參數
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訊號,這個參數放在命令列的最後

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.