nginxデータを2つのサーバーに複製する方法は?


14

1つの特定のnginxサーバーが受信するトラフィックを2つのサーバーに複製しようとしています。目標は、負荷分散ではなく、すべてのnginxサーバーで同じ入力を再生することです。

例:NginxはHTTP POSTを受信します。これと同じPOSTを他のサーバーに送信したい。

**更新**

状況は簡単で複雑ではありません。POSTデータ(またはGETまたは任意の要求データ)を別のサーバーIP(nginxインスタンスも実行している)に再送信するだけです。それだけ。

ユーザー->データのポスト-> NGINXインスタンス----リダイレクト--->サーバー1とサーバー2


1
アーキテクチャを拡張できますか?他の2つのサーバーは何ですか?共有DB、共有ファイルシステムなどはありますか?POSTはDB、ファイルシステム、何に書き込みますか?実際、クラスター化されたファイルシステムやデータベースインスタンスでは実行できないことを達成しようとしていますか?
cjc 2012

私はあなたが尋ねているように見えるものをより正確に反映するようにあなたの質問を言い換えました。
gWaldo 2012

1
このタイプの動作は、A / Bテストで使用されることがあります
gWaldo

2
それは行く方法ではありません、あなたはHTTPを壊しています、w3.org
ダニエルプラタアルメイダ

この種の質問は以前に聞いたことがあります。調べたいものが「http replay」として検索できると思います。
gWaldo 2012

回答:


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;
}

これで、2つのサーバーにデータが送信されます。

アップストリームがfastcgiをサポートしていない場合(私の場合は問題)、proxy_passに置き換えます。


4

nginxだけでこれができるとは思いません。nginxドキュメンテーションの関連ビット(アップストリームおよびプロキシディレクティブ)をざっと見ただけでは、そうすることはできません。コメントに記載されているように、2つの背面サーバーのどちらが応答するかが明確でないため、これはHTTPにも影響します。

代替手段の1つは、varnishのようなものを使用し、varnishreplayを使用して2番目のリアサーバーに対して再生を行うことです。

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

私はそれを使用していないので、最初のリアサーバーとほぼ同時にトラフィックを再生できるかどうかはわかりません。


3

使用したいのはEM-Proxy [1]のようなものです。任意の数のサーバー間でのhttp要求の分割を簡単に処理します。また、ライブサーバーからのみデータを返し、他のユーザーをブロックするため、ユーザーは複数の応答を取得しません。

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


2

NFSサーバーのような中央ストレージを使用し、各nginx WebノードがNFS共有(ファイルレベル)をマウントします。または、OCFS2などのクラスターファイルシステムを使用し、各WebノードがLUN /パーティション(ブロックレベル)をマウントします。


POSTリクエストは必ずしもファイルシステムに物事を書き込むわけではありません。OPのアーキテクチャを明確にする必要があります。
cjc 2012

@ cjc、True、私は行の間を読んでいました...
HTTP500
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.