Estoy tratando de replicar el tráfico que recibe un servidor nginx específico en dos servidores. El objetivo no es equilibrar la carga, sino reproducir la misma entrada en todos los servidores nginx.
Un ejemplo: Nginx recibe una POST HTTP. Quiero enviar esta misma POST a otros servidores.
** ACTUALIZACIÓN **
La situación es fácil y no compleja. Solo necesito reenviar los datos POST (o GET o cualquier solicitud de datos) a otro IP del servidor (también ejecuta una instancia nginx). Solo esto.
USUARIO -> DATOS POSTALES -> NGINX INSTANCE ---- REDIRECT ---> SERVIDOR 1 Y SERVIDOR 2
Respuestas:
Pude replicar usando el estado post_action.
Ahora envía datos a dos servidores.
Si su upstream no admite fastcgi (sucedió en mi caso), reemplace con proxy_pass.
fuente
No creo que puedas hacer esto con nginx solo; una lectura rápida de los bits relevantes de la documentación de nginx (directivas ascendentes y proxy) no sugiere que pueda hacerlo. Como se señaló en los comentarios, esto también rompe HTTP, ya que no hay claridad sobre cuál de los dos servidores posteriores responderá.
Una alternativa es usar algo como barniz y hacer una repetición en el segundo servidor posterior usando varnishreplay:
https://www.varnish-cache.org/docs/2.1/reference/varnishreplay.html
No lo he usado, así que no sé si puede hacer que reproduzca el tráfico casi simultáneamente con el primer servidor posterior.
fuente
Lo que quiere usar es algo así como EM-Proxy [1]. Maneja fácilmente la división de solicitudes http en cualquier número de servidores. También maneja correctamente los datos devueltos solo desde el servidor en vivo y bloquea los demás para que el usuario no obtenga múltiples respuestas.
[1] https://github.com/igrigorik/em-proxy/
fuente
Utilice el almacenamiento central como un servidor NFS y cada nodo web nginx monta el recurso compartido NFS (nivel de archivo). O use un sistema de archivos de clúster como OCFS2 y cada nodo web monta el LUN / partición (nivel de bloque).
fuente