2011-10-27 10 views
2

は環境です:私が達成したい何複数のデータセンターにMongoDBをセットアップするには?ここ

[ Data Center 1 ] 
    [ load balancer, ip: 45.45.45.45] 
    [ Server 1-A, internal ip: 10.0.0.1, external ip: 200.0.0.1 ] 
    [ Server 1-B, internal ip: 10.0.0.2, external ip: 200.0.0.2 ] 
    [ Server 1-C, internal ip: 10.0.0.3, external ip: 200.0.0.3 ] 

[ Data Center 2 ] 
    [ load balancer, ip: 90.90.90.90] 
    [ Server 2-A, internal ip: 10.0.0.1, external ip: 201.0.0.1 ] 
    [ Server 2-B, internal ip: 10.0.0.2, external ip: 201.0.0.2 ] 
    [ Server 2-C, internal ip: 10.0.0.3, external ip: 201.0.0.3 ] 

[ Data Center 3 ] 
    [ load balancer, ip: 88.88.88.88] 
    [ Server 3-A, internal ip: 10.0.0.1, external ip: 221.0.0.1 ] 
    [ Server 3-B, internal ip: 10.0.0.2, external ip: 221.0.0.2 ] 
    [ Server 3-C, internal ip: 10.0.0.3, external ip: 221.0.0.3 ] 

は、各サーバが1台のMongoのサーバーをインストールすることで、唯一のデータセンター1台のサーバー(1-A、1-B、及び1- C)はプライマリにすることができます。データセンター2とデータセンター3のMongoDBサーバーはセカンダリのみです。アプリケーションは、Data Center 2と同じネットワーク上にあるため、Data Cetner 1に接続するよりも高速にアクセスできます。そのため、サーバーはレプリケートセットを使用しています。シャーディングはありません。

  1. がレプリケート・セットを設定し、私はデータセンター2と3からホストを指定するには、外部の実際のIPアドレスを使用する必要があります:

    ここに私の質問はありますか?例えば

    config = { _id: 'foo', members: [ 
             // data center 1 
             {_id: 0, host: '10.0.0.1:27017'}, 
             {_id: 1, host: '10.0.0.2:27017'}, 
             {_id: 2, host: '10.0.0.3:27017'}, 
             // data center 2 
             {_id: 3, host: '201.0.0.1:27017'}, 
             {_id: 4, host: '201.0.0.2:27017'}, 
             {_id: 5, host: '201.0.0.3:27017'}, 
             // data center 3 
             {_id: 6, host: '221.0.0.1:27017'}, 
             {_id: 7, host: '221.0.0.2:27017'}, 
             {_id: 8, host: '221.0.0.3:27017'} 
            ] 
         } 
    
  2. 2意志ロードバランサとファイアウォールの背後にあるデータセンター内のサーバーので、IPアドレスは、外の世界に爆発することができない場合があります。ロードバランサのIPアドレスを使用することはできますか?もしそうなら、それをどうやるの?

  3. データセンター2のサーバーを&にするには、priorty = 0を使用する必要があります。

  4. 他のアプリケーションがデータセンター2と3のMongoDBにどのように接続しているか(読み取り専用)?たとえば、アプリケーション(サーバー側のアプリケーション)はデータセンター2のネットワークにもあります。アプリケーションがDC2のMongoDBに接続するために使用するIPアドレスは何ですか?内部IPまたは外部IPを使用すべきですか?アプリケーションがDB内部ネットワークの外部にあり、DC2のMongoDBに接続してデータのみを読み込みたい場合は、ロードバランサIPまたは外部IPを使用する必要がありますか?

  5. DC2とDC3のサーバーでデータを読み取ることができるようにするため、slaveOkの設定方法を教えてください。私はそれをプライマリの "slaveOK"に設定すべきですか、それともDC2とDC3の各サーバーに設定する必要がありますか?

  6. DC1、DC2およびDC3がすべて個別の複製セットであるとします。例えばDC 1には唯一のプライマリとセカンダリがあります。 DC2には独自のプライマリとセカンダリのDC3があります。 DC1に変更(新しいレコードまたは更新)がある場合、DC2とDC3を簡単かつリアルタイムで更新する方法はありますか?

答えて

3
  1. に依存します。アプリケーションサーバーがアクセスできるホスト名/ IPである必要があります。 あなたのアプリケーションサーバが同じDC上で動作している場合、あなたのmongodプロセスは動作していて、それらは内部でなければなりません。他の設定には大きなセキュリティ上の問題があります。
  2. 技術的には、はい。各mongodプロセスを別のポートに割り当てます。しかし、ロードバランサでmongoのクエリを配布する必要があるのはなぜか分かりません。それは運転手があなたのためにするものであり、ドライバー以外のものに質問がどのRSメンバーに行くかを決めることに副作用があるかもしれません。
  3. 正しい。
  4. 内部IPを使用する方法です。アプリケーションサーバーは、ローカルメンバーのすべての内部IPでドライバーを初期化する必要があります(同じDC上のメンバーを参照してください)
  5. slaveOkにサーバーを設定しません。 SlaveOk機能はドライバの最後にあります。通常、接続ごとに設定されますが、大部分のドライバにはグローバルおよびクエリごとのフラグがあります。明らかに、このフラグが有効になっていなければ、セットアップは機能しません。
  6. いいえ、MongoDB atmにはマスターマスターレプリケーションはありません。
+0

ありがとうございます。2)理由は私が欲しいからではありません。私はそれに縛られているからです。外部リクエストは内部サーバーに直接アクセスすることはできません。マッピングを実行するには、ファイアウォールまたはロードバランサを通過する必要があります。 – murvinlai

+0

2)私はそれぞれの内部サーバー(ip1:27017、ip2:27018、ip3:27019)にポート27017,27018,27019を指しているかもしれません。 – murvinlai

+0

アドバイスをいただきありがとうございます。 :) – murvinlai

関連する問題