haproxy-tcpモードで元の/リモートIPを渡す


8

perpraクラスターのロードバランシングとIPフェイルオーバーのためにkeepalivedでhaproxyをセットアップしました。それがうまく機能するので、別のサービス/デーモンに同じlb /フェイルオーバーを使用したいと思います。

私はこのようにhaproxyを設定しました:

listen my_service 0.0.0.0:4567
    mode tcp
    balance leastconn
    option tcpka
    contimeout      500000
    clitimeout      500000
    srvtimeout      500000

    server host1 xxx.xxx.xxx.xx1:4567 check port 4567 inter 5000 rise 3 fall 3
    server host2 xxx.xxx.xxx.xx2:4567 check port 4567 inter 5000 rise 3 fall 3

ロードバランシングは正常に機能しますが、サービスはクライアントの実際のIPではなくロードバランサーのIPを認識します。httpモードでは、リモートIPに沿ってhaproxyを渡すのは非常に簡単ですが、tcpモードではどうすればよいですか?これは、負荷分散する必要のあるサービスの性質上重要です。

ありがとう!ヴィート


ここにhaproxy 1.6.6cbonte.github.io/haproxy-dconv/…の完全なドキュメントがあります

回答:


3

将来の参考までに、keepalivedはロードバランシングではなくフェイルオーバーのソリューションです(おそらくLVSを意味しますか?)。HAProxyの透過プロキシモードは、元のIPを送信する特別な方法とは何の関係もありません。これは、標準のHTTPヘッダーを使用できる通常の非透過HTTPモードです。

私の意見では、元の質問に対する正しい回答は次のとおりです。TPROXY対応のLinuxカーネルのHAProxyで透過プロキシサポートをコンパイルできます。これと適切なTPROXYサポートバージョン+同じマシン上のiptablesの構成により、実際に完全に透過的なTCPプロキシサポートが可能になります。つまり、バックエンドサーバーには特別な構成は必要ありません。

これは実際にはHAProxyの推奨セットアップではなく、どうしても必要な場合にのみ使用してください。


2

haproxyには、私が今まで見たことがない、または何もしたくない、ある種の「透過的な」モードがあるようです。それ以外の場合は、バックエンドサービスが元のIP( "PROXY blahblah")を送信するhaproxyの特別な方法について教えて、サービスから元のIPを引き出す必要があります。

なぜあなたはhaproxyに悩まされているのですか?キープアライブはすでに実行されており、適切な透過的なロードバランシングも行われます。


こんにちは、返信ありがとうございました:)私は 'tproxy'サポートについていくつか読んでいます、これはあなたが何を意味したのでしょうか?また、私はこれのために直接keepalivedを使用した負荷分散を検討していませんでした。keepalivedはクライアントの元のIPを渡しますか?
Vito Botta 2012

はい。keepalivedはプロキシではなくロードバランサであるため、元のIPをそのまま保持します。
ウォンブル

2

使い方send-proxy(サーバごと)設定にすることも、TCPモードでは、あなたのrecievingサーバ側で元のソース-IPを提供します。これにはHAProxy 1.5以降が必要です。

プロキシプロトコルの詳細については、HAProxyのドキュメントをご覧ください。

listen my_service 0.0.0.0:4567
mode tcp
balance leastconn
option tcpka
contimeout      500000
clitimeout      500000
srvtimeout      500000

server host1 xxx.xxx.xxx.xx1:4567 send-proxy check port 4567 inter 5000 rise 3 fall 3
server host2 xxx.xxx.xxx.xx2:4567 send-proxy check port 4567 inter 5000 rise 3 fall 3

HI Nils、解決策に感謝しますが、send-proxyを入力すると、dbがダウンします(haproxyがホストを検出できません)
neobie '

DBでも同じことが起こりました。解決策はありますか?
Peeyush、2015年

2

HAProxyをNATモードとして設定することもできます。これにより、レイヤ4で引き続きTCPモードが使用されますが、IPは透過的になります。

HAProxyレイヤー4ロードバランシングNATモード


一方、HAPorxyトランスペアレントモードはレイヤー7でHTTPモードを使用します。これはforwardfor、HTTPモードにオプションがすでにあるため、問題になりません。

HAProxyレイヤー7ロードバランシング透過プロキシモード


-4

この構成でうまくいきました。ソースIPは$ _SERVER ['HTTP_X_FORWARDED_FOR']で取得できます。

グローバル
        [.....通常のもの....]   
        ssl-server-verifyなし

フロントエンドメイン*:5000
        bind *:443 ssl crt /etc/ssl/mycert_with_private_key.pem
        モードhttp
        オプションforwardfor
        reqadd X-Forwarded-Proto:\ https
        default_backend https_server

バックエンドhttps_server
        モードhttp
        バランスの最小
        オプションtcpka
        スティックテーブル型IPサイズ200k有効期限30m
        サーバーsrv04 192.168.1.10:443 sslチェック
        サーバーsrv05 192.168.1.11:443 sslチェック

2
この答えは当てはまりません。接続はHTTPではありません。
ロングネック、2015年

あなたはhttps接続がtcpモードでなければならないことを示唆していますか?
Pedro Sayago、2015

いいえ、質問はtcpを使用していると言っています。あなたの答えはhttp / sにのみ適用されます。
ロングネック2015

さて、幸運を祈ります。TCPモード転送IPでhaproxyに関連するドキュメントは見つかりませんでした。リクエストが処理されるレイヤーはこの情報を渡すことができないかもしれません。
Pedro Sayago、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.