Como replicar dados nginx para dois servidores?

7

Estou tentando replicar o tráfego que um servidor nginx específico recebe em dois servidores. O objetivo não é balancear a carga, mas reproduzir a mesma entrada em todos os servidores nginx.

Um exemplo: o Nginx recebe um HTTP POST. Eu quero enviar este mesmo POST para outros servidores.

** ATUALIZAÇÃO **

A situação é fácil e não complexa. Eu só preciso reenviar os dados do POST (ou GET ou qualquer dado do pedido) para outro IP do servidor (ele também está executando uma instância nginx). Apenas isso.

USER - > POST DATA - > NGINX INSTANCE ---- REDIRECIONAR --- > SERVIDOR 1 E SERVIDOR 2

    
por Bernard Bay 01.08.2012 / 21:21

4 respostas

5

Eu consegui replicar usando o estado 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;
}

Agora ele envia dados para dois servidores.

Se o seu upstream não suporta fastcgi (aconteceu no meu caso), substitua por proxy_pass.

link

    
por 07.08.2014 / 21:11
4

Eu não acredito que você possa fazer isso com o nginx sozinho; um rápido exame dos bits relevantes da documentação do nginx (diretivas upstream e proxy) não sugere que você possa. Como observado nos comentários, isso também interrompe o HTTP, já que não há clareza sobre qual dos dois servidores traseiros responderá.

Uma alternativa é usar algo como verniz e fazer um replay no segundo servidor posterior usando varnishreplay:

link

Eu não o usei, então não sei se você pode reproduzir o tráfego quase simultaneamente com o primeiro servidor posterior.

    
por 01.08.2012 / 22:13
3

O que você deseja usar é algo como o EM-Proxy [1]. Ele lida facilmente com solicitações http em qualquer número de servidores. Ele também lida corretamente com os dados que retornam apenas do servidor ativo e bloqueia os outros para que o usuário não receba várias respostas.

[1] link

    
por 08.08.2012 / 19:30
2

Use o armazenamento central como um servidor NFS e cada nó da web nginx monta o compartilhamento NFS (nível de arquivo). Ou use um sistema de arquivos de cluster como o OCFS2 e cada nó da web monta o LUN / partição (nível de bloco).

    
por 01.08.2012 / 21:32

Tags