2017-10-12 69 views
0

組所以我在努力尋找正確的配置爲我HAProxy的:HAProxy的堅守後端服務器

我有一個由兩個物理主機,每個具有3名工人提供的Ruby on Rails Web應用程序。兩臺主機各有一個數據庫,兩個數據庫實時同步。

我想讓會話堅持到同一個主機,所以請求仍然在每個主機中的3個工作者之間進行負載平衡。

目標是避免來自同一客戶端的兩個連續請求被髮送到不同的主機。

我的配置是這樣的:

frontend web_front 
    bind *:4100 
    default_backend web_back 


backend web_back 
    cookie SERVERID insert indirect nocache 
    balance roundrobin 

    server host_1_web_1 129.168.0.1:3000 maxconn 1 check cookie SRV_1 
    server host_1_web_2 129.168.0.1:3001 maxconn 1 check cookie SRV_1 
    server host_1_web_3 129.168.0.1:3002 maxconn 1 check cookie SRV_1 

    server host_2_web_1 129.168.0.2:3000 maxconn 1 check cookie SRV_2 
    server host_2_web_2 129.168.0.2:3001 maxconn 1 check cookie SRV_2 
    server host_2_web_3 129.168.0.2:3002 maxconn 1 check cookie SRV_2 

正如你所看到的,我已經設置每個主機相同的值的餅乾,跳躍的請求將仍然正確加載翻過工人平衡,但現在只有每個主機的第一名工作人員似乎正在收到請求。

有沒有辦法解決這個問題?也許使用粘性表?使用會話持久性
2.工人負載均衡沒有會話持久性
1.服務器負載均衡:

回答

1

如果我理解正確,你的要求,你希望兩個不同級別的負載均衡。

一個解決方案是在服務器端監聽HAProxy連接並在工作人員之間進行負載平衡。
但你仍然可以通過使用虛擬後端與HAProxy的做到這一點:

frontend web_front 
    bind *:4100 
    default_backend web_back 

backend web_back 
    cookie SERVERID insert indirect nocache 
    balance roundrobin 
    server server1 127.0.0.1:3001 cookie SRV_1 
    server server2 127.0.0.1:3002 cookie SRV_2 

listen lt_srv1 
    bind 127.0.0.1:3001 
    server host_1_web_1 129.168.0.1:3000 check 
    server host_1_web_2 129.168.0.1:3001 check 
    server host_1_web_3 129.168.0.1:3002 check 

listen lt_srv2 
    bind 127.0.0.1:3002 
    server host_2_web_1 129.168.0.2:3000 check 
    server host_2_web_2 129.168.0.2:3001 check 
    server host_2_web_3 129.168.0.2:3002 check 
+0

是的,但通過設置不同的值,每個客戶端會堅持到同一臺服務器。我希望在主機內的每個3臺服務器之間進行負載平衡。 – ste26054

+0

好吧,我現在得到你想要的,我正在編輯我的答案。 – MoEmEn

+0

謝謝,它工作完美! – ste26054