2012-05-14 8 views
2

テスト目的のために、slaveDelay = nでスレーブを設定することで、mongodbクラスタのレプリケーションラグをシミュレートしようとしています。それが判明すると、これは魔法のようにスレーブを隠してしまい、私のテストはそれにアクセスできなくなります。隠されていないmongodb遅延スレーブを設定するには?

mongodb documentation状態 「一般的に、我々はslaveOkayの読み込みに使用する遅延メンバーをたくないあなたも隠しされているかのようにこのように、slaveDelayを設定することも、アプリケーションからメンバーを隠す:真。」

「非定型」ユースケースを設定する方法はありますか?あるいは、さまざまなタイムラグを持つ異なるスレーブからの読み込みをシミュレートする良い方法がありますか?

私はTaggedReadPreferenceを使用して遅延スレーブに接続するためのテストコードを強制しようとしたが、これは明らかにJavaドライバは、二次見ることができないん

com.mongodb.MongoException: Could not find any valid secondaries with the supplied tags ('{ "delayed" : "true"}' 

もたらします。 「slaveDelay」設定を削除すると、正常に接続されます。

は、ここに私のクラスタ構成です:

rs.reconfig({ 
"_id" : "rs0", 
"version" : 4, 
"members" : [ 
    { "_id" : 0, 
     "host" : "localhost:27017", 
     "priority" : 0, 
     slaveDelay: 10, 
     tags: { delayed: "true" } 
    }, 
    { "_id" : 1, 
     "host" : "localhost:27018" 
    }, 
    { "_id" : 2, 
     "host" : "localhost:27019", 
     "arbiterOnly" : true 
    } 
] 
}) 

答えて

1

これは私の知る限り承知しているとことはできません。あなたの唯一のルートは、たとえば、プライマリと遅延のセカンダリ間の実際のネットワーク遅延をプロキシ経由でシミュレート/強制することです。このようなツールは多数あり、より正確なテストを行うことができます。

1

あなたが背後に落下することを強制するための時間のための二次的にはfsyncとロックできます

http://www.mongodb.org/display/DOCS/fsync+Command#fsyncCommand-v2.0Notes

あなたはロック解除後、それはすぐにまともなoplogと大きな挿入率あなたと、追いつくだろうが、遅延効果を繰り返しシミュレートすることができます。

あなたが選択した言語でW = 2相当品(REPLICAS_SAFEなど)を記述して使用している場合、第一、第二、仲裁人がいた場合は、 wtimeout(W = 2を使用する場合は例外をキャッチしてください)を設定しない限り、無期限にブロックされるセカンダリがロックされます。

関連する問題