nginx 데이터를 두 서버에 복제하는 방법은 무엇입니까?


14

특정 nginx 서버가 수신 하는 트래픽 을 두 서버 로 복제하려고 합니다. 목표는로드 밸런스가 아니라 모든 nginx 서버에서 동일한 입력을 재생하는 것입니다.

예 : Nginx는 HTTP POST를받습니다. 이 동일한 POST를 다른 서버로 보내려고합니다.

** 업데이트 **

상황은 쉽고 복잡하지 않습니다. POST 데이터 (또는 GET 또는 요청 데이터)를 다른 서버 IP (nginx 인스턴스도 실행)로 다시 보내면됩니다. 그냥.

USER-> POST DATA-> NGINX INSTANCE ---- REDIRECT ---> 서버 1과 서버 2


1
아키텍처를 확장 할 수 있습니까? 다른 두 서버는 무엇입니까? 공유 DB, 공유 파일 시스템 등이 있습니까? POST는 DB, 파일 시스템에 무엇을 쓰나요? 실제로, 클러스터 된 파일 시스템 및 데이터베이스 인스턴스로는 수행 할 수없는 것을 달성하려고 무엇입니까?
cjc

나는 당신이 묻는 것보다 더 정확하게 반영하기 위해 당신에게 질문을 표명했습니다.
gWaldo

1
이러한 유형의 행동은 때때로 A / B 테스트에 사용됩니다
gWaldo

2
즉, 당신은 파괴하고 HTTP, 갈 수있는 방법이 아니다 w3.org/Protocols/rfc2616/rfc2616.html
다니엘 프라 타 알메이다

이전에 이런 유형의 질문을 보았습니다. 보고 싶은 것이 "http replay"로 검색 될 수 있다고 생각합니다.
gWaldo

답변:


10

post_action 상태를 사용하여 복제 할 수있었습니다.

upstream main_upstream {
least_conn;
server 192.168.9.10:80;
keepalive 1024;
}

server {
listen 80;
server_name _;
client_body_buffer_size 1512k;
client_max_body_size 10m;

location /1/ {
fastcgi_pass main_upstream;
post_action @replayevent ;

}
# Send the post_action request to a FastCGI backend for logging.
location @replayevent {
fastcgi_pass 192.168.9.14:80;
}

이제 두 서버에 데이터를 보냅니다.

업스트림에서 fastcgi를 지원하지 않으면 (필자의 경우) proxy_pass로 바꾸십시오.


4

나는 당신이 그 자체로 nginx로 이것을 할 수 있다고 생각하지 않습니다. nginx 문서의 관련 비트 (업스트림 및 프록시 지시문)에 대한 빠른 설명은 당신이 할 수 있다고 제안하지 않습니다. 주석에서 언급했듯이 두 후면 서버 중 어느 서버가 응답할지 명확하지 않기 때문에 HTTP도 중단됩니다.

한 가지 대안은 니스와 같은 것을 사용하고 varnishreplay를 사용하여 두 번째 후면 서버로 재생하는 것입니다.

https://www.varnish-cache.org/docs/2.1/reference/varnishreplay.html

나는 그것을 사용하지 않았으므로 첫 번째 후면 서버와 거의 동시에 트래픽을 재생할 수 있는지 알 수 없습니다.


3

사용하고 싶은 것은 EM-Proxy [1]과 같습니다. 여러 서버에서 http 요청을 쉽게 처리 할 수 ​​있습니다. 또한 라이브 서버에서만 데이터를 반환하고 다른 서버는 차단하여 사용자가 여러 응답을받지 않도록 올바르게 처리합니다.

[1] https://github.com/igrigorik/em-proxy/


2

NFS 서버와 같은 중앙 저장소를 사용하면 각 nginx 웹 노드는 NFS 공유 (파일 수준)를 마운트합니다. 또는 OCFS2와 같은 클러스터 파일 시스템을 사용하면 각 웹 노드가 LUN / 파티션 (블록 수준)을 마운트합니다.


POST 요청은 반드시 파일 시스템에 내용을 쓰지 않아도됩니다. OP 아키텍처에 대한 설명이 필요합니다.
cjc

@cjc, True, 나는 줄 사이를 읽고 있었다 ...
HTTP500
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.