HAProxy基礎配置-haproxy的配置文件說明


        HAProxy基礎配置-haproxy的配置文件說明

                                   作者:尹正傑

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

 

 

 

一.HAProxy組成

1>.程序環境

  主程序:
    /usr/sbin/haproxy

  配置文件:
    /etc/haproxy/haproxy.cfg

  Unit file:
    /usr/lib/systemd/system/haproxy.service

2>.配置文件的配置段說明

  global(全局配置段):
    進程及安全配置相關的參數
    性能調整相關參數
    Debug參數

  proxies(代理配置段):     defaults:
      為frontend, backend, listen提供默認配置     frontend:
      前端,相當於nginx中的server {}     backend:
      后端,相當於nginx中的upstream {}     listen:
      同時擁有前端和后端配置

 

二.HAProxy的global配置參數

  chroot
    鎖定運行目錄

  deamon
    以守護進程運行

  stats socket
/var/lib/haproxy/haproxy.sockmode 600 level admin     指定socket文件路徑。
  user, group, uid, gid     運行haproxy的用戶身份,一般使用id為99的nobody用戶即可(說白了生產環境中haproxy一般並不用於web服務器,而是作為代理服務器,因此使用一個無權限登錄操作系統的用戶即可。)     具體案例可參考:https://www.cnblogs.com/yinzhengjie/p/12117113.html

  nbproc     開啟的haproxy進程數,與CPU保持一致
  nbthread     指定每個haproxy進程開啟的線程數,默認為每個進程只開啟一個線程。
    具體案例可參考:https://www.cnblogs.com/yinzhengjie/p/12121468.html
  cpu
-map     綁定haproxy進程至指定CPU,比如"cpu-map 1 0"表示將haproxy的第"1"個進程綁定到編號為"0"的CPU上(注意,cpu的核心編號是從0開始的),而"CPU-map 2 1"則表示將haproxy的第"2"個進程綁定到編號為"1"的CPU上。   maxconn     每個haproxy進程的最大並發連接數   maxsslconn     SSL每個haproxy進程ssl最大連接數   maxconnrate     每個進程每秒最大連接數   spread-checks     后端server狀態check隨機提前或延遲檢測后端服務器的百分比時間,默認為0,即不延遲也不提前。該參數一般情況下(后端服務器在10台以內)並不需要配置,如果后端服務器數量已經有成百上千的節點,建議2-5(即"20%-50%")之間,比如檢測后端服務器的間隔事件是10秒,則延遲或時間為2s-5s之間。
  pidfile     指定pid文件路徑,該值最好和啟動腳本的pid文件路徑指定的要一致,否則指定的pid文件並不生效而是以啟動腳本("/usr/lib/systemd/system/haproxy.service")指定的pid文件為准。   log
127.0.0.1 local3 info     定義全局的syslog服務器;最多可以定義兩個。
    具體案例可參考:https://www.cnblogs.com/yinzhengjie/p/12122239.html   博主推薦閱讀:     https:
//cbonte.github.io/haproxy-dconv/1.8/configuration.html#3

 

三.HAProxy的Proxies配置參數

  defaults [<name>] 
    默認配置項,針對以下的frontend、backend和lsiten生效,可以多個name。
    defaults常用的配置參數: option redispatch 當server Id對應的服務器掛掉后,強制定向到其他健康的服務器,生產環境推薦添加該參數進行調優。 option abortonclose 當服務器負載很高的時候,自動結束掉當前隊列處理比較久的鏈接,生產環境推薦添加該參數進行調優。 option http
-keep-alive 開啟會話保持,如"option http-keep-alive 60"則表示會話保持時間為60s。 option forwardfor 開啟IP透傳,無法自定義"forwardfor"這個變量,而在nginx中式可以自定義的,生產環境中推薦添加該擦承諾書進行調優。 mode 指定默認工作類型,比如"mode http"表示默認基於http協議工作,"mode tcp"則表示默認基於tcp協議工作。 timeout connect 轉發客戶端請求到后端server的最長連接時間(TCP之前),如"timeout connect 60s"則表示客戶端請求到haproxy服務器之后,由haproxy將請求轉發到后端服務器,若超過60s(即1分鍾)后端服務器依舊沒有響應客戶端則超時(說白了就是客戶端和后端服務器建立連接的超時時間)。 timeout server 轉發客戶端請求到后端服務端的超時超時時長(TCP之后),如"timeout server 600s"則表示客戶端請求到haproxy服務器之后,由haproxy將請求轉發到后端的服務器,若后端服務器(比如數據庫查詢操作)在600s(10分鍾)內依舊沒有響應則超時(說白了就是客戶端已經和后端服務器建立連接后,定義執行查詢或寫入操作的超時時間)。 timeout client 600s 與客戶端的最長空閑時間,表示客戶端和服務器端已經建立連接,若在指定的規定的時間內發起了新的請求則無需重新建立連接,直接使用上一次的連接即可。 timeout http-keep-alive 120s session會話保持超時時間,范圍內會轉發到相同的后端服務器。 timeout check 5s 對后端服務器的檢測超時時間。   frontend <name>     前端servername,類似於Nginx的一個虛擬主機server。 bind: 指定HAProxy的監聽地址,可以是IPV4或IPV6,可以同時監聽多個IP或端口,可同時用於listen字段中 語法為:"bind [<address>]:<port_range> [, ...] [param*]",如"bind 172.30.1.102:80,172.30.1.102:8080,172.30.1.102:8081" mode http/tcp 指定負載協議類型 use_backend backend_name 調用的后端服務器組名稱(即使用backend關鍵字定義的后端服務器組)   backend <name>     后端服務器組,等於nginx的upstream mode http/tcp 指定負載協議類型 option 配置選項,option后面加httpchk,smtpchk, mysql-check, pgsql-check,ssl-hello-chk方法,可用於實現更多應用層檢測功能。 server         定義后端realserver         后端服務器狀態監測及相關配置如下所示:           check             對指定real進行健康狀態檢查,默認不開啟           addr IP             可指定的健康狀態監測IP           port num             指定的健康狀態監測端口,比如LA/NMP架構中,咱們可以指定檢測PHP的9000端口。           inter num             健康狀態檢查間隔時間,默認2000 ms           fall num             后端服務器失效檢查次數,默認為3           rise num             后端服務器從下線恢復檢查次數,默認為2           weight             默認為1,最大值為256,0表示不參與負載均衡           backup             將后端服務器標記為備份狀態,即當其它可用節點都掛掉后該節點才會被啟用。           disabled             將后端服務器標記為不可用狀態,即手動將某個后台節點下線。           redirect prefix http://node101.yinzhengjie.org.cn             將請求臨時重定向至其它URL,只適用於http模式           maxconn <maxconn>             當前后端server的最大並發連接數,若並發數沒有超過規定的最大值時則當前節點響應用戶請求(說白了就是未達到最大並發連接數時所有用戶請求的連接數它一個節點來處理),若超過則需要其它節點來一起響應用戶請求(說白了就是達到最大並發連接數時它和別的節點一起來處理用戶請求的連接數)。           backlog <backlog>             當server的連接數達到上限后的后援隊列長度   listen <name>     將frontend和backend合並在一起配置。
    可參考案例
:https://www.cnblogs.com/yinzhengjie/p/12114195.html

  溫馨提示:
    以上的name字段只能使用"-","_",".",和":"進行分割字符,並且嚴格區分大小寫,例如:"Web_80""web_80"是完全不同的兩組服務器。
  
  博主推薦閱讀:
    https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#4

 

四.模擬生產環境中官網配置

1>.試驗環境角色分配

node101.yinzhengjie.org.cn:
    Nginx服務器

node102.yinzhengjie.org.cn:
    HAProxy服務器

2>.搭建Nginx服務器

博主推薦閱讀:
  https://www.cnblogs.com/yinzhengjie/p/12052401.html

3>.HAProxy服務器配置

[root@node102.yinzhengjie.org.cn ~]# cat /etc/haproxy/haproxy.cfg 
global
maxconn 100000
chroot /yinzhengjie/softwares/haproxy
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
user haproxy
group haproxy
daemon
nbproc 4
cpu-map 1 0
cpu-map 2 1
cpu-map 3 2
cpu-map 4 3
nbthread 2
pidfile /yinzhengjie/softwares/haproxy/haproxy.pid
log 127.0.0.1 local5 info

defaults
option http-keep-alive
option  forwardfor
option redispatch
option abortonclose
maxconn 100000
mode http
timeout connect 300000ms
timeout client  300000ms
timeout server  300000ms

listen stats
 mode http
 bind 0.0.0.0:9999
 stats enable
 log global
 stats uri     /haproxy-status
 stats auth    haadmin:q1w2e3r4ys

#官網80端口訪問入口
listen WEB_PORT_80
    bind 172.30.1.102:80
    mode http
    server web01 172.30.1.101:80 check inter 3000 fall 3 rise 5

#官網443端口訪問入口
listen WEB_PORT_443
    bind 172.30.1.102:443
    mode tcp
    server web01 172.30.1.101:443 check inter 3s fall 3 rise 5
[root@node102.yinzhengjie.org.cn ~]# 
[root@node102.yinzhengjie.org.cn ~]# systemctl restart haproxy
[root@node102.yinzhengjie.org.cn ~]# 
[root@node102.yinzhengjie.org.cn ~]# ss -ntl
State       Recv-Q Send-Q            Local Address:Port                           Peer Address:Port              
LISTEN      0      128                           *:9999                                      *:*                  
LISTEN      0      128                172.30.1.102:80                                        *:*                  
LISTEN      0      128                           *:22                                        *:*                  
LISTEN      0      128                172.30.1.102:443                                       *:*                  
LISTEN      0      128                          :::22                                       :::*                  
[root@node102.yinzhengjie.org.cn ~]# 
[root@node102.yinzhengjie.org.cn ~]# 

4>.瀏覽器訪問"http://node102.yinzhengjie.org.cn/",可用訪問到nginx的數據則說明haproxy配置生效啦~

5>.瀏覽器訪問"https://node102.yinzhengjie.org.cn/",可用訪問到nginx的數據則說明haproxy配置生效啦~

 


免責聲明!

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



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