Próbuję replikować ruch, który otrzymuje jeden konkretny serwer Nginx na dwa serwery. Celem nie jest zrównoważenie obciążenia, ale odtworzenie tego samego wejścia na wszystkich serwerach nginx.
Przykład: Nginx otrzymuje HTTP POST. Chcę wysłać ten sam test POST na inne serwery.
** AKTUALIZACJA **
Sytuacja jest łatwa i niezłożona. Muszę tylko ponownie wysłać dane POST (lub GET lub dowolne dane żądania) na inny adres IP serwera (to także działa instancja nginx). Po prostu to.
UŻYTKOWNIK -> DANE POST -> INSTANCJA NGINX ---- REDIRECT ---> SERWER 1 I SERWER 2
Odpowiedzi:
Byłem w stanie powielać się przy użyciu stanu aktywności.
Teraz wysyła dane do dwóch serwerów.
Jeśli twój upstream nie obsługuje fastcgi (zdarzyło się w moim przypadku), zamień na proxy_pass.
źródło
Nie wierzę, że możesz to zrobić sam z nginx; szybkie przejrzenie odpowiednich fragmentów dokumentacji nginx (dyrektywy upstream i proxy) nie sugeruje, że możesz. Jak zauważono w komentarzach, psuje to również HTTP, ponieważ nie ma jasności co do tego, który z dwóch tylnych serwerów zareaguje.
Jedną z możliwości jest użycie czegoś takiego jak lakier i powtórzenie na drugim tylnym serwerze za pomocą varnishreplay:
https://www.varnish-cache.org/docs/2.1/reference/varnishreplay.html
Nie korzystałem z niego, więc nie wiem, czy możesz sprawić, by odtwarzał ruch prawie jednocześnie z pierwszym serwerem tylnym.
źródło
To, czego chcesz użyć, to coś w rodzaju EM-Proxy [1]. Z łatwością obsługuje dzielenie żądań HTTP na dowolną liczbę serwerów. Prawidłowo obsługuje również zwracanie danych tylko z serwera na żywo i blokowanie innych, aby użytkownik nie otrzymał wielu odpowiedzi.
[1] https://github.com/igrigorik/em-proxy/
źródło
Używaj pamięci centralnej jak serwera NFS, a każdy węzeł sieciowy Nginx montuje udział NFS (na poziomie pliku). Lub użyj systemu plików klastra, takiego jak OCFS2, a każdy węzeł sieciowy instaluje jednostkę LUN / partycję (na poziomie bloku).
źródło