haproxy-TCP 모드에서 원본 / 원격 IP 전달


8

percona 클러스터의로드 밸런싱 및 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 모드에서는 haproxy가 원격 IP를 통과하는 것이 매우 쉽지만 tcp 모드에서 어떻게해야합니까? 이것은로드 밸런싱에 필요한 서비스의 특성으로 인해 중요합니다.

감사! 비토


다음은 haproxy 1.6.6의 전체 문서입니다. cbonte.github.io/haproxy-dconv/…

답변:


3

나중에 참조하기 위해 keepalived는 장애 조치를위한로드 밸런싱을위한 솔루션입니다 (LVS를 의미 할 수 있습니까?). HAProxy의 투명 프록시 모드는 원래 IP를 전송하는 특별한 방법과 아무 관련이 없습니다. 표준 HTTP 헤더를 사용할 수있는 일반 비 투명 HTTP 모드입니다.

제 생각에는 원래 질문에 정확하게 대답합니다. TPROXY 지원 Linux 커널에서 HAProxy의 투명한 프록시 지원을 컴파일 할 수 있습니다. 동일한 머신에서 iptables의 버전 + 구성을 지원하는 적절한 TPROXY와 함께 실제로 완전히 투명한 tcp 프록시 지원이 가능합니다. 이는 백엔드 서버에 특별한 구성이 필요하지 않음을 의미합니다.

이것은 실제로 HAProxy에 권장되는 설정이 아니며 꼭 필요한 경우에만 사용해야합니다.


2

내가 보지 못하거나 어떤 것도 해보고 싶지 않은 haproxy에는 일종의 "투명"모드가 있습니다. 그렇지 않으면, 백엔드 서비스가 haproxy의 원래 IP ( "PROXY blahblah")를 전송하는 특별한 방법에 대해 가르치고 서비스가 원래 IP를 가져 오도록해야합니다.

그래도 왜 haproxy로 귀찮게합니까? 당신은 이미 자리를 지키고 있으며, 투명한 투명한로드 밸런싱도 수행합니다.


안녕하세요, 귀하의 답장을 보내 주셔서 감사합니다 :) 'tproxy'지원에 대한 내용을 읽고 있습니다. 또한 keepalived를 사용하여 직접로드 밸런싱을 고려하지 않았습니다. keepalived는 클라이언트의 원래 IP를 통과합니까?
Vito Botta

예, keepalived는 프록시가 아닌로드 밸런서이므로 원래 IP를 그대로 유지합니다.
womble

2

사용 send-proxy(서버 당) 구성에 심지어 TCP 모드에서, 당신에게 잡 서버 측에서 원래의 소스 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


-4

이 구성은 저에게 효과적이었습니다. 소스 IP는 $ _SERVER [ 'HTTP_X_FORWARDED_FOR']에서 검색 할 수 있습니다.

글로벌
        [..... 평소 물건 ....]   
        SSL- 서버-확인 없음

프론트 엔드 메인 * : 5000
        바인드 * : 443 ssl crt /etc/ssl/mycert_with_private_key.pem
        모드 http
        전달 옵션
        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가 아닙니다.
longneck

https 연결이 tcp 모드에 있어야한다고 제안하고 있습니까?
Pedro Sayago

아니요, 질문에 tcp가 사용되며 귀하의 답변은 http / s에만 적용됩니다.
longneck

좋아, 행운을 빕니다 .tcp 모드 전달 IP에서 haproxy와 관련된 문서를 찾지 못했습니다. 요청이 처리되는 계층이이 정보를 전달하지 못할 수 있습니다.
Pedro Sayago
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.