HAProxy介紹及配置文件詳解

一、HAProxy簡介

HAProxy是一個開源的、高性能的、基于TCP和HTTP應用的負載均衡軟件,借助HAProxy可快速、可靠地提供基于TCP和HTTP應用的負載均衡解決方案

二、HAProxy優點

1) 可靠性和穩定性非常好,可以與硬件的F5相媲美
2) 最高可以同時維護40000--50000個并發連接,單位時間內處理的最大請求數為20000個,最大數據處理能力可達10Gbps
3) 支持多于8種負載均衡算法 ,同時也支持session保持
4) 支持虛擬主機功能
5) 從HAProxy 1.3版本后開始支持連接拒絕、全透明代理等功能
6) HAProxy擁有一個功能強大的服務器狀態監控頁面
7) HAProxy擁有功能強大的ACL支持

三、HAProxy配置文件詳解

根據功能用途不同,其配置文件主要由五個部分組成,分別為global部分,defaults部分,frontend部分,backend部分,listen部分

1)global部分

用于設置全局配置參數,屬于進程級的配置,通常與操作系統配置相關

2) defaults部分

默認參數的配置部分。在些部分設置的參數,默認會自動引用到下面的frontend, backend和listen部分

3) frontend部分

用于設置接收用戶請求的前端虛擬節點。frontend可以根據ACL規則直接指定要使用的后端backend

4) backend部分

用于設置集群后端服務集群的配置,也就是用來添加一組真實服務器,以處理前端用戶的請求

5) listen部分

此部分是frontend和backend部分的結合體

配置項說明

1)global部分

globallog 127.0.0.1 local1 infomaxconn 4096user nobodygroup nobodydaemonnbproc 1pidfile /usr/local/haproxy/logs/haproxy.pid 

log

全局的日志配置,local0是日志設備,info表示日志級別。其中日志級別有err, warning, info, debug 4種。這個配置表示使用127.0.0.1上的rsyslog服務中的local0日志設備,記錄日志等級為info

maxconn

設置每個HAProxy進程可接受的最大并發連接數

nbproc

設置HAProxy啟動時可創建的進程數,此參數要求將HAProxy運行模式設置為daemon,默認只啟動一個進程;建議該值設置時小于CPU核數

daemon

設置HAProxy進程進入后臺運行,這是推薦的運行模式

user/group

設置啟動HAProxy進程的用戶和組

pidfile

指定HAProxy進程ID的存放位置

2) defaults部分

defaults mode httpretires 3timeout connect 10stimeout client 20stimeout server 30stimeout check 5s

mode

設置HAProxy實例默認的運行模式,有tcp, http, health三個可選值
tcp模式:
在此模式下,客戶端和服務器端間將建立一個全雙工的連接,不會對七層報文做任何檢查,為默認的模式;經常用于SSL, SSH, SMTP等應用
http模式
在此模式下,客戶端請求在轉發至后端服務器前將會被深度分析,所有不與RFC格式兼容的請求都會被拒絕
health模式
目前已經被廢除

retires

設置連接后端服務器的失敗重試次數,如果連接失敗的次數超過該數值,HAProxy會將對應的后端服務器標記為不可用

timeout connect

設置成功連接到一臺服務器的最長等待時間,默認單位是毫秒,但也可以使用其他時間單位作后綴

timeout client

設置連接客戶端發送數據時最長等待時間,默認單位是毫秒,但也可以使用其他時間單位作后綴

timeout server

設置服務器端回應客戶端數據發送的最長等待時間,默認單位是毫秒,但也可以使用其他時間單位作后綴

timeout check

設置對后端服務器的檢測超時時間,默認單位是毫秒,但也可以使用其他時間單位作后綴

3) frontend部分

frontend wwwbind *:80mode http option httplog option forwardforoption httpcloselog globaldefault_backend htmpool

通過frontend關鍵字定義了一個名為"www"的前端虛擬節點

bind

此選項用于定義一個或者幾個監聽的套接字,只能在frontend和listen中定義
格式如下:
bind [<address>:[port_range]] [interface]

option httplog

默認情況下,HAProxy日志是不記錄HTTP請求的,此選項的作用是啟用日志記錄HTTP請求

option forwardfor

此選項的作用是保證后端服務器可記錄客戶端真實的IP

option httpclose

此選項表示客戶端和服務端完成一次連接請求后,HAProxy將主動關閉此TCP連接。這是對性能非常有幫助的一個參數

log global

表示使用global段中定義的日志格式

default_backend htmpool

此選項用于指定后端默認的服務器池

4) backend部分

backend htmpoolmode http option redispatchoption abortonclosebalance roundrobincookie SERVERIDoption httpchk GET /index.php server web1 10.1.1.1:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3server web2 10.1.1.2:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3

backend用于定義一個名稱為htmpool的后端服務器組,根據需要可以定義多個

option redispatch

此參數用于cookie保持的環境中。在默認情況下,HAProxy會將其請求的后端服務器的serverID插入cookie中,以保證會話的session持久性。而如果后端服務器出現故障,客戶端的cookie是不會刷新的,這就會造成無法訪問。此時,如果設置了此參數,就會將客戶的請求強制定向到另外一臺健康的后端服務器上,以保證服務正常

option abortonclose

此參數可以在服務器負載很高的情況下,自動結束當前隊列中處理時間比較長的連接

balance roundrobin

指定負載均衡算法

HAProxy支持的負載均衡算法:

roundrobin
基于權重進行輪叫調度的算法

static-rr
基于權重進行輪叫調度的算法,不過此算法為靜態算法,在運行時調整其服務器權重不會生效

source
基于請求源IP的算法。此算法先對請求的源IP進行HASH運算,然后將結果與后端服務器的權重總數相除后轉發至某臺匹配的后端服務器。這種方式可以使同一個客戶端IP的請求始終轉發到某特定的后端服務器

leastconn
此算法會將新的連接請求轉發到具有最少連接數目的后端服務器。在會話時間較長的場景中推薦使用此算法 ,例如數據庫負載均衡

uri
此算法會對部分或整個URI進行HASH運算,再經過與服務器的總權重相除,最后轉發到某臺匹配的后端服務器上

uri_param
此算法會根據URL路徑中的參數進行轉發,這樣可保證在后端真實服務器數據不變時,同一個用戶的請求始終分發到同一臺機器上

hdr
此算法根據HTTP頭進行轉發,如果指定的HTTP頭名稱不存在,則使用roundrobin算法 進行策略轉發

cookie SERVERID

表示允許向cookie插入SERVERID,每臺服務器的SERVERID可在下面的server關鍵字中使用cookie關鍵字定義

option httpchk

此選項表示啟用HTTP的服務狀態檢測功能
格式如下:
option httpchk <method> <uri> <version>

method

表示HTTP請求的方式,常用的有OPTIONS,HEAD, GET幾種方式。一般的健康檢查可以采用HEAD方式進行,而不是采用GET方式,這是因為HEAD方式沒有數據返回,僅檢查響應報文的狀態碼是不是200.因此相對于GET, HEAD的方式更簡單、更快

uri

表示要檢測的URL地址

version

指定心跳檢測時的HTTP的版本號

server web1 10.1.1.1:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3

server用于定義多臺后端真實服務器,不能用于frontend和listen段

格式如下:

server <name> <address>:[port] [param*]

name

為后端真實服務器指定一個內部名稱,隨便定義一個即可

address:port

指定后端服務器的IP地址及端口

param*參數

常用的參數:
check 表示啟用對此后端服務器執行健康狀態檢查
inter 設置健康狀態檢查的時間間隔,單位是毫秒
rise 檢查多少次認為服務器可用
fall 檢查多少次認為服務器不可用
weight 設置服務器的權重,默認為1, 最大為256。 設置為0表示不參與負載均衡
backup 設置備份服務器,用于所有后端服務器全部不可用時
cookie 為指定的后端服務器設置cookie值,此處指定的值將在請求入站時被檢查,第一次為此值挑選的后端服務器將在后續的請求中一直被選中,其目的在于實現持久連接的功能

5) listen部分

listen admin_statusbind 0.0.0.0:9188mode http log 127.0.0.1 local0 errstats refresh 30sstats uri /haproxy-status                           stats realm Welcome login stats auth admin:admin stats hide-version stats admin if TRUE

listen部分用于配置HAProxy監控頁面相關的參數

stats refresh 30s

設置HAProxy監控統計頁面自動刷新的時間

stats uri /haproxy-status

設置HAProxy監控頁面訪問的URI路徑

stats realm Welcome login

設置登錄監控頁面時,密碼框上的提示信息

stats auth admin:admin

設置登錄監控頁面的用戶名,密碼。用戶密碼用冒號隔開,可以設置多個,每行一個

stats hide-version

設置在監控頁面上隱藏HAProxy的版本號

status admin if TRUE

設置此選項,可在監控頁面上啟用、禁用后端服務器,僅在1.4.9版本以后生效

轉載于:https://blog.51cto.com/12244079/2125384

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254407.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

unbutu安裝搜狗輸入法【轉載】

安裝支持庫 sudo apt-get install fcitx libssh2-1 如果安裝過程中出現錯誤失敗&#xff0c;運行apt-get -f install 查看支持庫是否安裝成功 dpkg -l | grep fcitx dpkg -l | grep libssh 下載搜狗輸入法 wget "http://pinyin.sogou.com/linux/download.php?flinux&…

深入理解halcon相機標定

目錄相機標定簡介深度說明1、相機標定參數介紹2、標定板詳細介紹問題1&#xff1a;halcon是否只能使用halcon專用的標定板&#xff1f;問題2&#xff1a;halcon標定板如何生成&#xff1f;問題3&#xff1a;halcon標定板如何擺放&#xff0c;拍照數量有無限制&#xff1f;標定步…

halcon模板匹配干擾邊緣消除辦法(最硬核方式)

目錄halcon手繪形狀匹配模板手繪形狀匹配模板主要算子解析draw_nurbs 繪制平滑曲線參數解釋create_shape_model_xld 使用XLD輪廓創建模板參數解釋實例演示與解析實例代碼展示與解析運行過程與處理展示讀入圖像繪制模板使用繪制的XLD創建模板查找模板博主寫作不容易&#xff0c;…

往文件中寫數據--增量

有的功能需要打印日志文件&#xff0c;但是日志文件太多不方便查看&#xff0c;我就把信息輸出到一個TXT文件中了。 下面就是我將要說的&#xff0c;往文件中寫數據&#xff08;增量&#xff09;&#xff0c;代碼很簡單&#xff0c;也可以放在你的代碼中運行一下&#xff1a; /…

SQL Server 數據庫查找重復記錄的幾種方法

http://www.hanyu123.cn/html/c61/6790.html 一、查某一列&#xff08;或多列&#xff09;的重復值。&#xff08;只可以查出重復記錄的值&#xff0c;不能查出整個記錄的信息&#xff09; 例如:查找stuid&#xff0c;stuname重復的記錄&#xff1a; select stuid&#xff0c;s…

xvid 數據編碼和解碼

由于視頻開發的需求&#xff0c;封裝xvid c調用接口&#xff0c;使之優雅易用 我已經對pc camera視頻流(RGB)進行嘗試&#xff0c;編碼之后傳輸到遠程主機進行解碼回放&#xff0c;效果不錯 具體的xvid的參數可以進一步優化&#xff0c;這里只是提供簡單的范例 1. xvid 解碼 …

第一個PowerShell腳本——PowerShell三分鐘(九)

前面把基礎知識講了一遍&#xff0c;現在我們開始寫一個最初級的腳本寫腳本的工具有很多&#xff0c;有文本文檔&#xff0c;有PowerShell ISE&#xff0c;PowerShell Studio等&#xff0c;這里選用系統自帶的PowerShell ISE這里大家依然要記得以管理員身份運行&#xff0c;否則…

C#精準定時

文章目錄簡介StopWatch類例子1&#xff0c;用作延時例子2&#xff0c;用作算法耗時評估博主寫作不容易&#xff0c;孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 簡介 我們在自動化上位機編寫過程中&#xff0c;上位機的定時應用在很多地方。對于工業上位機程序設計起…

聯合體(union)和結構體(struct)的區別

1. 聯合說明和聯合變量定義 聯合也是一種新的數據類型, 它是一種特殊形式的變量。 聯合說明和聯合變量定義與結構十分相似。其形式為: union 聯合名{ 數據類型 成員名; 數據類型 成員名; ... } 聯合變量名; 聯合表示幾個變量公用一個內存位置, 在不同的時間保存不同…

MVC架構簡介及其測試策略

最近在WEB端測試工作中陷入了瓶頸&#xff0c;單純的手動功能測試在沒有成熟的代碼規范之前還是很容易坑的&#xff0c;WEB自動化測試一時半會還沒有什么進展&#xff0c;所以決定先學習一下網站用的MVC架構&#xff0c;跟著教程寫了一個小網站&#xff0c;大概也找到了WEB測試…

prototype與_proto_

1、prototype與_proto_ ①prototype&#xff1a;是函數才有的屬性&#xff0c;這個屬性是一個指針。當一個構造函數被創建時&#xff0c;該構造函數會自動生成一個prototype指針&#xff0c;該指針指向構造函數的原型。這個原型會有其他實例共享的一些屬性和方法。 ②_proto_&a…

Halcon求取矩形頂點坐標

文章目錄簡介Halcon源碼博主寫作不容易&#xff0c;孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 簡介 我們在使用Halcon畫矩形時&#xff0c;并不能得到矩形四角頂點坐標。但是我們可以通過數學計算得到矩形定點坐標的位置。 我們在計算過程中需要知道矩形的長軸與短…

kafka常用的shell命令

kafka常用shell命令&#xff1a; ------------------------------------ 1、創建topic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 2、查看創建的topic bin/kafka-topics.sh --list --zookeeper localhost:…

python+pycharm+Django報錯

報錯&#xff1a; Unhandled exception in thread started by <function wrapper at 0x2d7e410>Traceback (most recent call last):File "/root/virtual_dir/wxwebapp_court_nositepkg/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, i…

C++多線程實例(_beginThreadex創建多線程)

C多線程&#xff08;二&#xff09;(_beginThreadex創建多線程) C/C Runtime 多線程函數一 簡單實例&#xff08;來自codeprojct&#xff1a;http://www.codeproject.com/useritems/MultithreadingTutorial.asp&#xff09; 主線程創建2個線程t1和t2&#xff0c;創建時2個線程…

halcon求取區域頂點

文章目錄簡介Halcon源代碼處理效果博主寫作不容易&#xff0c;孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 簡介 使用halcon求取頂點的方法。 Halcon源代碼 read_image (Image1, 1.png)points_foerstner (Image1, 1, 2, 3, 200, 0.3, gauss, false, RowJunctions, …

從excel表中生成批量SQL,將數據錄入到數據庫中

excel表格中有許多數據&#xff0c;需要將數據導入數據庫中&#xff0c;又不能一個一個手工錄入&#xff0c;可以生成SQL&#xff0c;來批量操作。1.首先在第二行的H列&#xff0c;插入函數&#xff1a;CONCATENATE("INSERT INTO book (bookid, title, volume, author, u…

HDU-5895 Mathematician QSC

題目大意&#xff1a; 已知f[0] 0, f[1] 1, f[i] f[i-1] * 2 f[i-2]&#xff0c;且g[n] g[n-1] f[n] * f[n]&#xff0c;現在給出n&#xff0c;y&#xff0c;x&#xff0c;s&#xff0c;問你x^(g[n*y]) mod (s 1)的值為多少。 解題思路&#xff1a; 首先可以得到的是g[n…

C#的兩種類據類型:值類型和引用類型

目錄什么是值類型&#xff0c;什么是引用類型概念&#xff1a;值類型和引用類型區別什么是值類型&#xff0c;什么是引用類型 概念&#xff1a; 值類型直接存儲其值&#xff0c;而引用類型存儲對其值的引用。部署&#xff1a;托管堆上部署了所有引用類型。 引用類型&#xf…

ring0 ring3 kernel driver

intel cpu的權限訪問控制&#xff1a;ring0 ~ ring5. window、linux操作系統都只用了ring0&#xff0c;ring3&#xff0c;對應內核態和用戶態. 驅動程序工作在內核態&#xff0c;沒有main函數入口&#xff0c;而應用程序工作在用戶態。轉載于:https://www.cnblogs.com/yiii/p/6…