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

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

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

** 업데이트 **

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

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



답변

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로 바꾸십시오.


답변

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

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

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

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


답변

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

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


답변

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


답변