Haproxy基本用法

基本內容簡介:

官網:
http://www.haproxy.org
http://www.haproxy.com
文檔:
https://cbonte.github.io/haproxy-dconv/

功能:
1 提供cookie的持久性,支持基於cookie進行調度
2 實現基於內容的交換,過載保護的高級流量管制
3 自動故障切換
4 以正則表達式爲基礎的控制運行時間
5 基於web頁面的報表及高級日誌記錄
6 支持http反向代理|動態程序反向代理|數據庫反向代理

安裝:
yum install -y haproxy

配置文件解析:

主配置文件:
/etc/haproxy/haproxy.cfg
相關應用程序:
/usr/bin/halog
/usr/bin/iprange
主程序:
/usr/sbin/haproxy
服務server:
/usr/lib/systemd/system/haproxy.service

配置文件解析:global

global --全局配置
進程及安全配置相關的參數
性能調整相關參數
Debug參數
進程及安全管理:
chroot --禁錮haproxy進程在固定目錄,降低安全風險
deamon --後臺運行
user --用戶
group --組
uid 
gid
nbproc [n] 要啓動的haproxy的進程數量,系統默認單進程,要求使用daemon模式
默認開啓單進程
建議配置的數量小於等於cpu數量!

ulimit-n [n] 每個haproxy進程可打開的最大文件數,系統會自動指定
不建議手動設置!

daemon 後端方式運行,建議使用!
-db --禁用
如何使用前臺模式:docker專用
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -db

log 定義全局的syslog服務器,最多可定義兩個
如何定義:
第一步:
在rsyslog配置文件中加入:
local2.*              /var/log/haproxy.log
第二步:開啓網絡日誌功能
$ModLoad imudp
$UDPServerRun 514
日誌功能其它設置:
log <address> [len [n]] 
address ---rsyslog服務器地址
len --記錄日誌長度 默認1024
max level --記錄最大級別
facility --記錄設施
min level --最小級別
log-format <格式定義> --參考官方文檔
日誌管理---捕獲信息

捕獲請求和相應報文中的cookie並記錄日誌
capture cookie <name> len <n>

捕獲請求報文中指定的首部並記錄日誌
capture request header <name> len <n>
示例:
capture request header X-Forwarded-For len 15

捕獲響應報文中指定的首部並記錄日誌
capture response header <name> len <n>
例子:
capture response header Content-length len 9
capture response header Location len 10

性能調整參數:
maxconn <n> -- 設置每個進程所能接受的最大併發連接
默認是--4000
maxconnrate <n> --設置每個進程每秒鐘所能建立的最大連接數
--屬於傳輸層
--一個連接可以發起多個會話
maxse***ate <n> --設置每個進程每秒鐘所能建立的最大會話數量
--屬於應用層
maxsslconn <n> --每進程支持ssl的最大連接數
spread-checks <0..50,in percent> --健康檢測延遲時長百分比,建議2-5之間

配置文件解析:proxies

defaults --爲frontend,backend,listen提供默認配置

backend --後端--相當於nginx中的upstream {}
--指定將連接請求轉發至後端服務器的相關設置

frontend --前端 --相當於nginx中的server()
--指定接收客戶端連接監聽套接字設置
相關配置參數:

bind --指定一個或多個前端監聽地址和端口
使用格式:frontend|listen
1 bind *:80,*:443 --*可以省略
2 172.20.23.36:80,172.20.23.36:443
3 /run/ssl-frontend.sock user root mode 600 accept-proxy

listen --同時擁有前端和後端-適用於一對一環境
--指定完整的前後端設置
proxy [名稱]:使用字母 數字- _ .:並區分字符大小寫

mode --默認模式---http

效果展示:
格式:
frontend [名稱]
    bind *:80  --指定打開端口/IP
    default_backend websrvs ---把服務反向代理到後端backend

backend [名稱]
   balance roundrobin 
   server [後端服務器名稱] 192.168.23.41:80 check --後端主機
   server [後端服務器名稱] 192.168.23.40:80 check
[後端服務器名稱] --可隨意自定義

具體使用:簡單配置

frontend web
    bind *:80  
    default_backend httpd

backend httpd
   balance roundrobin 
   server srv1 192.168.23.41:80 check 
   server srv2 192.168.23.40:80 check

[root@www13:37:55~]#for i in {1..10000};do curl 172.20.23.38; sleep 1; done
<h1>test RS2 server</h1>
<h1>test RS1 server</h1>

僅僅有一組時可以使用listen
使用格式:
listen httpd
        bind 172.20.23.36:80
        balance roundrobin 
        server srv1 192.168.23.41:80 check 
        server srv2 192.168.23.40:80 check

其它參數:
default_backend <backend> --用於frontend中
沒有use_backend匹配時,使用默認的backend,用於frontend中

default-server [param*]
爲backend中的各server設定默認選項
用於[defaults|listen|backend]
官網案例:
default-server inter 1000 weight 13

inter 1000 --設置多長時間健康檢測-單位毫秒
weight 13 --權重

server段配置:


server <name> <address>:<port> [參數]
相關參數:
weight [n] --權重默認爲1
maxconn [n] --當前後端server的最大併發連接數
backlog [n] --當server的連接數達到上限後的排隊等待隊列長度
backup --設定當前server爲準備服務器sorry server
具體設置:
frontend web
    bind 172.20.23.36:80  
    default_backend httpd

backend httpd
   balance roundrobin 
   server srv1 192.168.23.41:80 check 
   server srv2 192.168.23.40:80 check
   server sorryserver 127.0.0.1:8080 check backup --道歉服務器
道歉服務:
server sorryserver 127.0.0.1 check backup

check:對當前server做健康狀態檢測,只用於四層檢測
addr:檢測時使用IP地址
port:針對此端口進行檢測
inter <n>:檢測之間的時間間隔 默認爲2000毫秒
rise <n>:連續多少次檢測結果爲成功才標記位可用-默認爲2次
fall <n>:連續多少次檢測結果爲失敗才標記不可用-默認爲3次

tcp檢測--傳輸層
ping檢測--網絡層
url檢測--應用層
定義應用層檢測方法:
httpchk|smtpchk|mysql-check|ssl-hello-chk|pgsql-check

disabled:標記爲不可用

on-error--後端服務器故障時行動策略
-fastinter --加速檢測速率
-fail-check --連續做健康檢測
-sudden-death
-mark-down --直接標記爲down

redir <prefix> 將發往此server的所有GET和HEAD類的請求重定向至
指定URL
具體用法:
frontend web
    bind 172.20.23.36:80  
    default_backend httpd

backend httpd
   balance roundrobin 
   server srv1 192.168.23.41:80 check 
   server srv2 192.168.23.40:80 check redir http://172.20.23.36:8080

測試需要:
for i in {1..1000};do curl -L  http://172.20.23.36 ; sleep 0.5 ; done

基於cookie會話綁定:

cookie <value> 爲當前server指定cookie值 實現基於cookie的會話黏性
首次請求後,服務器會在響應報文中添加cookie給客戶端
再次請求時,客戶端的請求報文會帶有cookie

<name>:cookie名稱 用於實現持久連接
rewrite --重寫
insert --插入
prefix --前綴
nocache --當客戶端和haproxy之間有緩存時 不緩存cookie
indirect 

格式:
cookie <name> [rewrite|insert|prefix] [indirect] [nocache] [postonly]
[preserve] [httponly] [secure] [domain <domain>]* [maxidle <idle>] [maxlife <life>]

具體實現:
frontend web
    bind 172.20.23.36:80
    default_backend httpd

backend httpd
    cookie web insert nocache
    server srv1 192.168.23.41:80 check cookie rs1
    server srv2 192.168.23.40:80 check cookie rs2
    server sorryserver 127.0.0.1:8080 check backup

在curl命令中添加cookie值
curl -b  web=rs1 172.20.23.36

haproxy統計接口啓用相關的參數:web頁面

啓用統計頁 基於默認的參數啓動 stats page
stats enable 
隱藏版本
stats hide-version 
設置自動刷新時間間隔:
stats refresh <n>
自定義stats page uri 默認值/haproxy?stats
stats uri <xxx>
認證時的realm 示例 stats realm  HAProxy\ Statistics
stats realm <xx>
認證時的賬號和密碼-可使用多次 默認-no authenticcation
stats auth <user>:<passwd>
啓用stats page中的管理功能
stats admin {if|unless} <cond>
具體用法1:
stats admin if TRUE|LOCALHOST
具體管理指令:
Set state to MAINT --維護模式
Set state to DRAIN --逐漸排乾淨用戶
Set state to READY --恢復正常
kill Session --殺死所有會話

頁面基本介紹:
Hide 'DOWN' servers --隱藏宕機後端主機
Refresh now --刷新

綜合應用:
listen status
    bind 192.168.23.36:80 --綁定內網網卡
    stats enable          --啓用統計頁
    stats hide-version    --隱藏版本
    stats refresh 30      --刷新時間間隔   
    stats uri /test       --自定義訪問uri
    stats realm  please\ show\ your\ password --提示語句
    stats auth tom:[密碼] --賬號密碼
    stats admin if TRUE   --頁面啓用管理功能

Queue--隊列
Cur--當前
Max-曾經最大峯值
Limit--限制值
Session rate--會話速率
Session--會話數量
Bytes--接收發送量
Denied--拒絕訪問
Errors--錯誤訪問
Warning ---警告信息
Server--後端服務器相關信息

工作模式:mode

工作模式:mode
模式類型:
tcp --基於layer4實現代理-可代理mysql|pgsql|ssl等協議
https時使用此模式--默認模式
具體實現:
listen ssh
    bind :22222
    balance roundrobin
    mode tcp
    server ssh1 192.168.23.40:22 check
    server ssh2 192.168.23.41:22 check

http --僅當代理協議爲http時使用--centos中haproxt實際的模式模式

health --工作爲健康狀態檢查的響應模式-當連接請求到達時迴應"OK"
後即斷開連接--較少使用!

基於四層調度mariadb
listen mysql
    bind *:3306
    balance roundrobin
    mode tcp
    server ssh1 192.168.23.36:3306 check
    server ssh2 192.168.23.37:3306 check
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章