haproxy配置


 

第一節

HAProxy 是一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟件  類似於nginx功能

官方網站:http://cbonte.github.io/haproxy-dconv/

HAproxy服務器ip:192.168.1.102(這里若隱藏后端服務器的ip,這需要設定兩個ip,一個公網,一個私網)

后端服務器:192.168.1.104      192.168.1.105

再 后端服務器安裝http服務

yum   install   http  -y

設定一個網站:

# vim /var/www/html/index.html

   <h1>server 1 </h1>

systemctl start httpd.service     啟動服務

2  在haproxy 端設置

安裝haproxy

yum install haproxy –y

rpm  -ql   haproxy     查看安裝后產生的一些目錄文件

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

  1  全局配置段 global  (設置自己的特性) 

    進程及安全配置

              性能參數配置

  2 代理配置段  proxy   幾段配置段有

           default: 提供默認配置

           frented: 對前端服務器的配置

           backend: 對后端服務器的配置

           listen:設定兩者是一一對應的,這段同時擁有前端和后端的配置

日志:它本身沒有日志功能,日志需要rsyslog日志服務來配合

日志設定:  log         127.0.0.1 local2      指定本地日志服務器local2

這需要在rsyslog配置文件中做配置

vim   /etc/rsyslog.conf

     $ModLoad imudp

     $UDPServerRun 514                 基於udp

local2.*                                                /var/log/boot.log

重啟日志服務器:systemctl restart rsyslog.service

 haproxy配置文件:

(:.,$s@^[^#]@#&@g )

啟動服務:systemctl start haproxy.service

curl http://192.168.1.102     訪問測試

負載均衡:

backend websrvs

        balance roundrobin                                   輪詢

        server srv1 192.168.1.104:80 check

        server srv2 192.168.1.105:80 check

重啟服務: # systemctl restart haproxy.service

訪問: curl  http://192.168.1.102

在global 設置參數

      1 chroot: 與安全相關

      2  ca-base  若基於ssh回話的ca認證相關

      3 cpu-wap  cpu綁定類似於nginx的worker進程與cpu的綁定

      4 log  指定日志

      5 maxconn  最大單進程並發連接數

      6 maxconnrate  速率

      7 noepoll   不使用epoll機制

第二節參數配置

1 bind  :用於來指定監聽的地址和端口  配置在frontend 和listen段之中

監聽在80端口

bind  :443    ssl    crt   /etc/haproxy/site.pem

2 balance 用於后端服務器的調度算法

幾種調度算法有:

        1) roundrobin    輪詢是動態的,指這種算法支持權重的運行時調度,

            同時支持man啟動(man啟動是指,當在后端輪詢的服務器中,再添加一個服務器,他會慢           慢的將前兩台服務器上的請求慢慢移到這台上,不會一下子一堆的請求,否則容易將服務器瞬        間壓死)

         2) static-rr  是靜態輪詢調度,不支持權重運行時調度, 不支持man啟動

         3)leastconn最小連接 加權最小連接,計算后端服務器連接數時,要先除以它的權重得到的最小數將處理下一次請求

         4)first :請求會先請求第一台,把第一台服務器請求滿了,才會請求第二台

         5)source  原地址哈希

3  hash-type     哈希類型有兩種

      1 取模法 : 是指將后端服務器按照權重虛擬為多個節點,當請求的哈希值對應第幾個節點,就對應做映射

      缺點:一但服務器的位置發生變動,它會影響全局的取模結果

      2 一致性哈希:服務器變動只會影響局部

4 uri :是指不管前端的那個客戶端請求,只要訪問相同的uri就分發給同一台服務器上

5 uri_param   基於paraneter 綁定,將同一個key的值發往到同一個服務器上

6 hdr (<name>)將http首部的名稱做哈希計算,將相同的發往相同的服務器上

      如 hdr(cookie)  是基於cookie做綁定

舉例:

1 基於first

backend websrvs

        balance first

        server srv1 192.168.1.104:80 check   maxconn  3

        server srv2 192.168.1.105:80 check

壓測:ab  -c  10   -n  10000   http://192.168.1.102

for    I   in  {1..10} ; do   curl   http://192.168.1.102; done

用 uri

backend websrvs

        balance  uri

        server srv1 192.168.1.104:80 check

        server srv2 192.168.1.105:80 check

        hash-type   consistent

 

7 compression  壓縮

      compression  algo   gzip       壓縮算法

      compression  algo   deflate

      compression    type   <text/html>     只對那些類型做壓縮

 

 

8 server 用於backend  后端中指定后端主機,后面可以跟相應的參數

  1) backup  指備用

      2)check  健康檢測 默認是向服務器對應端口做健康檢查

           檢查的方法有:

                 addr:檢測使用ip地址

                 port:針對端口檢測

                 inter  <delay>  連續兩次的檢測之間的時間間隔默認為2000ms

                 rise  <count> 連續檢測多少次,結果成功則服務器標記ok 默認2次

      fall  <count> 連續檢測多次,結果為失敗,則標記不可用默認3次

 

 

option   httpchk     對http主頁進行檢測

option  httpchk  OPTIONS  *  HTTP/1.1 \r\nHost:\  www

查看日志:

tail  -f   /var/log/httpd/access.log

9 maxconn  最大並發連接數

10 maxqueue 隊列,:若一個服務器最大請求是3000 ,當有3500是將多的500暫存於隊列中

11 minconn  最小連接,當設定了最小連接,他的最大連接是動態計算得出的

12 no-error  : 在后端服務器故障時的策略

              fastinter :快速探測

              fail-check: 故障檢測

              sudden-death: 告知故障

               mark-down:標記為不可用

13 no-mark-down: 標記為不可用的操作

      shutdown-sessions: 將之前的該服務器上的所有請求切斷

 14 no-mark-up: 當服務器標記為可用是操作

 

15 redir :重定向 訪問時轉接到百度

 

16  weight  權重

 

第三節統計接口啟用相關參數

 stats  enable    啟用統計頁

訪問http://192.168.1.102/haproxy?stats

stats值設定:

      stats   uri  : /haproxy?stats

      stats  realm :  haproxy    認證提示信息

      stats  auth : no  authentication

      stats  scope:  no  restriction

      stats  admin     條件設定

 

mode 定義haproxy的工作模式

      tcp:基於layer4實現代理代理mysql,ssh,ssl等協議

      http:僅當http協議代理用

      health: 工作健康狀態的響應模式,當連接請求到達時回應ok后即斷開連接

如:定義一個ssh協議的調度

ssh root@192.168.1.102 -P 22322

會話綁定機制:會話綁定幾種方法

  

session  sticky:

      1) hash : 

           source  ip   原地址hash

           cookie  基於cookie的綁定

           uri  基於uri,相同的uri 訪問相同的服務器

       2) 會話集群

      3)會話服務器 memcached     redis

haproxy 基於cookie的會話綁定,定義在backend   listen  段中

鍵值對:在請求報文的cookie中插入建 在后對找到cookis對應的值進行綁定

  rewrite:重寫cookie

        insert: 插入值

errorfile :自定義錯誤頁面只能針對響應碼為(200 ,400,403,408 ,500,502 ,503 ,504)

如:errorfile  400  /etc/haproxy/errorfiles/400@badreq.http    本地一個路徑

errorloc   :基於uri 定義  可以定義在frontend   backend   listen

如: errorloc  403  http://www.magedu.com/error_pagrs/403.html

reqadd   向請求報文中添加首部

      reqadd  x-proxy-By:\   haproxy

rspadd 向響應報文中添加首部

      rspadd  x-proxy-By:\   haproxy

reqdel    向請求報文中刪除

rspdel   響應報文中刪除

      rspdel   ^server:  .*       刪除以server開頭的所有的

第四節參數配置

連接超時時長設定:

      timeout   client  <timeout>: 客戶端的超時時間,這指tcp的連接

       timeout   server  <timeout>:服務端的超時時長

      timeout  http-keep-alive  <timeout> :持久連接的持久時長

      timeout   http-request  <timeout> 請求報文的連接時長,

      timeout  connect <>     創建鏈接的超時時長,連接后端

      timeout   client-fin  <> : 面向客戶端半關閉連接的超時時長

      timeout   server-fin  <> : 面向服務端半關閉連接的超時時長

 

訪問控制匹配后操作:

use_backend   <backend> [if | unless] <condtion>當符合條件使用指定的backen  

block : 拒絕某些連接請求

1 基於7層的http訪問控制

http-request  {allow | deny} [ {if | unless } <condition>]

2 基於4層的訪問控制

tcp-request  connection  {accept | reject } [ {if |unless } <condition>]

如:

      acl   invalid_src  src   172.168.1.104           定義一個acl

      blocl   if    invalid_src              將acl的定義拒絕

      errorfile    403  /etc/fstab        給它一個錯誤頁

 

如:ssh的訪問控制:

listen  ssh

      bind  :22022

      balance   leastconn

      acl  incalid_src  src  192.168.1.104

      tcp-request  connection  reject   if  incalid_src

      mode  tcp

      server   sshsrvs1   192.168.1.104:22  check

      server   sshsrvs2   192.168.1.105:22  check

 

acl 控制定義

acl  <name>  <criterion> [flags] [operation] [<value>]

    criterion: 檢查內容條件:

                dst: ip   目標ip

                dst-conn  目標 主機上套接字連接數

                dst_port   目標端口

                src:ip     源ip地址

                src_port    源端口

    flags:

              -i:忽略大小寫

             -n 禁止ip地址反解

             -u : acl名不能重復

  operation: 

             eq    ge   gt  le   lt

        value :

             boolean:布爾值

             ip address / network  :  ip地址

             string   : 字符串

             integer or  interger  range   整數 或整數范圍

如:

      acl   allowstats  src  192.168.1.104

      http-request  allow   if  allowstats

      acl   all   src 0.0.0.0/0.0.0.0

      http-request   deny   if   all

path 基於path的匹配

    path   /imgs/logos/logo.jpg             精確匹配這個路徑

         path_beg   /imgs        以imgs 開頭的都匹配

        path_end    .jpg          以jpg結尾的都匹配

        path_sub      logos         子串匹配

        path_dir    logos/logo.jpg          子路徑匹配

        path_req   ^/imgs/.*               以正則匹配模式匹配

        path_len                       字符串長度匹配

如   acl   statis  path_end  .jpg   .png

  http-request  allow  if  statis

url  的配置與path類似但它包含的信息更多

hdr  匹配報文的某個首部

如:  acl   bad.browsers   hdr_reg  (user-agent)   .*curl.*  當首部包含curl  以curl名訪問拒絕

         block   if   bad.browers

 

haproxy   example  config    配置文檔實例

 


免責聲明!

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



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