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モードではどうすればよいですか?これは、負荷分散する必要のあるサービスの性質上重要です。
ありがとう!ヴィート
将来の参考までに、keepalivedはロードバランシングではなくフェイルオーバーのソリューションです(おそらくLVSを意味しますか?)。 HAProxyの透過プロキシモードは、元のIPを送信する特別な方法とは何の関係もありません。これは、標準のHTTPヘッダーを使用できる通常の非透過HTTPモードです。
私の意見では、元の質問に対する正解は次のとおりです。TPROXY対応のLinuxカーネルのHAProxyで透過プロキシサポートをコンパイルできます。これと適切なTPROXYサポートバージョン+同じマシン上のiptablesの構成により、実際に完全に透過的なTCPプロキシサポートが可能になります。つまり、バックエンドサーバーには特別な設定は必要ありません。
これは実際にはHAProxyの推奨セットアップではなく、どうしても必要な場合にのみ使用してください。
Haproxyには、私が今まで見たことがない、または何もしたくない、ある種の「トランスペアレント」モードがあるようです。それ以外の場合は、バックエンドサービスが元のIP( "PROXY blahblah")を送信するhaproxyの特別な方法について教えて、サービスから元のIPを引き出す必要があります。
なぜあなたはhaproxyに悩まされているのですか?キープアライブはすでに用意されており、適切な透過的な負荷分散も行います。
構成で(サーバーごとに)send-proxy
を使用すると、TCP=モードでも、受信サーバー側で元のソースIPが提供されます。これにはHAProxy 1.5以降が必要です。
HAProxy Documentation で Proxy Protocol に関する詳細情報を見つけることができます。
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
HAProxyをNATモードとして設定できます。これは、レイヤー4でTCPモードを使用しますが、IPを透過的にします。
一方、HAPorxyトランスペアレントモードはレイヤー7でHTTPモードを使用します。これは、HTTPモードにforwardfor
オプションがすでにあるため、問題になりません。