कैसे दो सर्वरों के लिए nginx डेटा को दोहराने के लिए?


14

मैं ट्रैफ़िक को दोहराने की कोशिश कर रहा हूं जो एक विशिष्ट नगनेक्स सर्वर दो सर्वरों को प्राप्त करता है। लक्ष्य लोड-बैलेंस करना नहीं है, लेकिन सभी नगनेक्स सर्वर पर एक ही इनपुट को फिर से खेलना है।

एक उदाहरण: Nginx एक HTTP POST प्राप्त करता है। मैं इसी POST को अन्य सर्वरों को भेजना चाहता हूं।

** अपडेट करें **

स्थिति आसान और गैर-जटिल है। मुझे बस POST डेटा (या GET या किसी भी अनुरोध डेटा) को किसी अन्य सर्वर IP (यह भी एक नगीन इंस्टेंस चल रहा है) को फिर से भेजने की आवश्यकता है। अभी यह।

USER -> POST DATA -> NGINX INSTANCE ---- REDIRECT ---> SERVER 1 और SERVER 2


1
क्या आप अपनी वास्तुकला पर विस्तार कर सकते हैं? अन्य दो सर्वर क्या हैं? क्या एक साझा डीबी, साझा फाइलसिस्टम, आदि है? क्या POST फाइल सिस्टम को DB को लिखता है, क्या? वास्तव में, आप क्या पूरा करने की कोशिश कर रहे हैं जो क्लस्टर्ड फाइल सिस्टम और डेटाबेस इंस्टेंस के साथ नहीं किया जा सकता है?
cjc

मैंने आपको और अधिक सटीक रूप से प्रतिबिंबित करने के लिए सवाल पूछा है कि आप क्या पूछ रहे हैं।
gWaldo

1
इस प्रकार के व्यवहार का उपयोग कभी-कभी ए / बी परीक्षण
gWaldo

2
यह जाने का रास्ता नहीं है, आप http, w3.org/Protocols/rfc2616/rfc2616.html
डैनियल प्रता अल्मेडा

मैंने इस प्रकार की बात पहले देखी है। मुझे लगता है कि आप जिस चीज़ को देखना चाहते हैं उसे "http replay" के रूप में खोजा जा सकता है।
20

जवाबों:


10

मैं 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;
}

अब यह डेटा दो सर्वरों को भेजता है।

यदि आपका अपस्ट्रीम फास्टैगी (मेरे मामले में हुआ) का समर्थन नहीं करता है, तो प्रॉक्सी_पास के साथ बदलें।


4

मुझे विश्वास नहीं है कि आप इसे अपने द्वारा nginx के साथ कर सकते हैं; nginx प्रलेखन (अपस्ट्रीम और प्रॉक्सी निर्देशों) के प्रासंगिक बिट्स का एक त्वरित अवलोकन आपको सुझाव नहीं दे सकता है। जैसा कि टिप्पणियों में उल्लेख किया गया है, यह भी HTTP को तोड़ता है, क्योंकि दो रियर सर्वरों में से कौन सा जवाब देगा, इस पर कोई स्पष्टता नहीं है।

एक विकल्प यह है कि वार्निश की तरह कुछ का उपयोग करें और वार्निश का उपयोग करके दूसरे रियर सर्वर पर फिर से खेलना करें:

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

मैंने इसका उपयोग नहीं किया है, इसलिए मुझे नहीं पता कि क्या आप इसे पहले रियर सर्वर के साथ लगभग एक साथ ट्रैफ़िक को फिर से बना सकते हैं।


3

आप जो उपयोग करना चाहते हैं, वह ईएम-प्रॉक्सी [1] जैसा है। यह आसानी से किसी भी सर्वर पर http अनुरोधों को विभाजित करने का काम करता है। यह केवल लाइव सर्वर से डेटा लौटाने और अन्य को अवरुद्ध करने के लिए सही ढंग से संभालता है ताकि उपयोगकर्ता को कई प्रतिक्रियाएं न मिलें।

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


2

एक NFS सर्वर की तरह केंद्रीय भंडारण का उपयोग करें और प्रत्येक nginx वेब नोड NFS शेयर (फ़ाइल-स्तर) को मापता है। या OCFS2 जैसे क्लस्टर फ़ाइल सिस्टम का उपयोग करें और प्रत्येक वेब नोड LUN / पार्टीशन (ब्लॉक-लेवल) को मापता है।


POST अनुरोध आवश्यक रूप से फाइल सिस्टम में चीजें नहीं लिखता है। हमें ओपी की वास्तुकला पर स्पष्टीकरण की आवश्यकता है।
cjc

@cjc, यह सच है, मैं लाइनों के बीच पढ़ रहा था ...
HTTP500
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.