2015-08-28 45 views
0

我無法清楚地理解Haproxy如何在http模式下執行健康檢查。haproxy http負載平衡和狀態處理

如果第一個返回錯誤狀態代碼(例如503),我需要重新發送http請求到另一個服務器(後端服務器列表中的下一個)。 我需要Haproxy的以下行爲: 1)我收到一些HTTP請求 2)我把它發送到第一臺服務器 3)如果我得到503(或其他錯誤代碼),這個HTTP請求必須發送到下一個服務器 4)如果它返回200代碼,此tcp會話的下一個http請求去第一臺服務器

我知道它很容易在nginx中實現(使用proxy_next_upstream,我想)。但我需要使用Haproxy,因爲我需要連接的軟件在第4層上工作,而且我無法更改它,因此需要將http消息組保留在同一個tcp會話中。我可以讓他們在haproxy的同一會話中,但不能在nginx中。

我知道httpchk觀察,但他們不是我所需要的。 第一個允許我發送一些http請求,而不是我收到的http請求(我需要分析http流量來決定我將回答的http狀態)。 第二個標記我的服務器已死,不再發送消息,但我需要通過分析此消息。 我確實需要像nginx這樣的行爲,但能夠在tcp會話中擁有http消息。 可能有一些不錯的方法來實現它ACL

任何人都可以請給我一個詳細的解釋haproxy如何在http模式下處理負載均衡或爲我的問題提供一些解決方案?

UPDATE: 例如,當我試圖做它與觀察,我使用的配置:

global 
log 127.0.0.1 local0 
maxconn 10000 
user haproxy 
group haproxy 
daemon 

defaults 
log global 
option dontlognull 
retries 3 
maxconn 10000 
contimeout 10000 
clitimeout 50000 
srvtimeout 50000 

listen zti 127.0.0.1:1111 
mode http 
balance roundrobin 
server zti_1 127.0.0.1:4444 check observe layer7 error-limit 1 on-error mark-down 
server zti_2 127.0.0.1:5555 check observe layer7 error-limit 1 on-error mark-down 

感謝, 梅德

+0

請發表您的配置, –

+0

@Tan康達其實,我還是沒寫的不錯的配置,因爲我不知道如何實現它。但是,我在我的帖子後面添加了配置,當嘗試按照「觀察」的方式做我想要的配置時 – RedRus

回答

0

可以使用option httpchk

當指定「選項httpchk」時,一個完整的HTTP請求發送 一旦建立TCP連接,並響應2XX和3XX是 認爲是有效的,而其他所有的人表示服務器故障, 包括缺乏任何迴應。

listen zti 127.0.0.1:1111 
mode  http 
balance  roundrobin 
option  httpchk HEAD/HTTP/1.0 
server  zti_1 127.0.0.1:4444 check inter 5s rise 1 fall 2 
server  zti_2 127.0.0.1:5555 check inter 5s rise 1 fall 2 

來源:https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#option%20httpchk

+0

我已經在我的文章中提到過httpchk。什麼信息將由httpchk發送?我需要發送特定的消息。我需要重新發送收到的消息haproxy – RedRus

+0

httpchk將返回HTTP狀態,非2xx和3xx將發送請求到下一個可用的服務器。 –