2011-08-30 3 views
23

하나의 시스템 (포트)과 두 개의 다른 시스템 (포트)으로 트래픽을 전송 (복제)해야합니다. TCP 세션도 처리해야합니다.프록시를 사용하여 TCP 트래픽 이중화

beginnig에서 나는 em-proxy을 사용했으나 오버 헤드는 꽤 크다. (CPU의 50 % 이상을 차지한다). 그런 다음 haproxy을 설치했으며 트래픽을 리디렉션 할 수있었습니다 (중복되지 않음). 오버 헤드는 합리적입니다 (5 % 미만). 특정 주소에서 수신 -
: 포트와 당신이 두 개의 서로 다른 시스템에 보내 찾을 어떤 : 포트 그 중 하나의 답변을 폐기

문제는 그 다음 haproxy 설정 파일에 말할 수없는 것입니다.

Em-proxy 코드는 매우 간단하지만 EventMachine은 오버 헤드를 많이 생성합니다.

haproxy 코드를 파고 변경 (트래픽 복제)하기 전에 알고 싶습니다. 거기에 비슷한 것이 있습니까?

감사합니다.

+0

어떻게 그 일을 마쳤습니까? – Marenz

+0

+1, 어떻게 해결 했습니까? –

+0

시도해 볼 수 있습니다. https://lyft.github.io/envoy/ –

답변

8

iptables 실험은 어떻습니까? ROUTE target? 두 번째 컴퓨터가 동일한 서브넷에있을 필요 것 것

iptables -A PREROUTING -t mangle -p tcp --dport 80 -j ROUTE --gw 1.2.3.4 --tee 
iptables -A POSTROUTING -t mangle -p tcp --sport 80 -j ROUTE --gw 1.2.3.4 --tee

: 당신이 할 것

http://www.netfilter.org/projects/patch-o-matic/pom-external.html#pom-external-ROUTE

같은 뭔가 트래픽을 미러링 :이 미러링 트래픽에 대한 "티"옵션이 대상 IP 주소에서 수신 대기 (또는 ARPS에 응답하지 않음)하거나 무차별 적으로 수신 대기해야합니다.

20

나는이 목적으로 만 프록시를 만들었습니다.

https://github.com/chrislusf/teeproxy

사용

./teeProxy -l :8888 -a localhost:9000 -b localhost:9001 

티 - 프록시는 리버스 프록시입니다. 들어오는 각 요청에 대해 요청을 복제하여 2 개의 서버로 전달합니다. 서버 a의 결과는 평소대로 반환되지만 서버 b의 결과는 무시됩니다.

tee-proxy는 GET, POST 및 기타 HTTP 메소드를 모두 처리합니다.

+0

이 저장소는 더 이상 존재하지 않습니다. –

+5

Repo의 이름이 다음과 같이 변경되었습니다 : https://github.com/chrislusf/teeproxy –

+0

우분투를 사용하는 경우 repo를 복제하는 사람들에게 단지주의하십시오.'apt-get install gccgo-go' 그리고'go teeproxy.go build go' – rsilva4

관련 문제