Estou tentando replicar o tráfego que um servidor nginx específico recebe para 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. Quero enviar esse 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 de solicitação) para outro IP do servidor (também executando uma instância do nginx). Só isso.
USUÁRIO -> DADOS POST -> INSTÂNCIA NGINX ---- REDIRECIONAR ---> SERVIDOR 1 E SERVIDOR 2
Respostas:
Consegui replicar usando o estado post_action.
Agora ele envia dados para dois servidores.
Se o seu upstream não suportar fastcgi (aconteceu no meu caso), substitua por proxy_pass.
fonte
Não acredito que você possa fazer isso com o nginx por si só; uma rápida leitura dos bits relevantes da documentação do nginx (diretivas upstream e proxy) não sugere que você possa. Conforme observado nos comentários, isso também quebra o HTTP, pois não há clareza sobre qual dos dois servidores traseiros responderá.
Uma alternativa é usar algo como verniz e fazer uma repetição para o segundo servidor traseiro usando varnishreplay:
https://www.varnish-cache.org/docs/2.1/reference/varnishreplay.html
Eu não o usei, então não sei se é possível reproduzir o tráfego quase simultaneamente com o primeiro servidor traseiro.
fonte
O que você deseja usar é algo como EM-Proxy [1]. Ele lida facilmente com a divisão de solicitações HTTP em qualquer número de servidores. Ele também lida corretamente com o retorno de dados apenas do servidor ativo e o bloqueio dos outros, para que o usuário não obtenha várias respostas.
[1] https://github.com/igrigorik/em-proxy/
fonte
Use o armazenamento central como um servidor NFS e cada nó da web nginx monta o compartilhamento NFS (no nível do arquivo). Ou use um sistema de arquivos em cluster como OCFS2 e cada nó da Web monta a partição LUN / (nível de bloco).
fonte