複数のデータセンターに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サーバーをインストールし、Data Center 1サーバー(1-A、1-B、および1-C)のみがプライマリになることが許可されていることです。データセンター2とデータセンター3のMongoDBサーバーはセカンダリのみです。アプリケーションは、Data Center 2と同じネットワーク上にあるため、Data Cetner 1に接続するよりも高速にアクセスできます。そのため、サーバーはレプリケートセットを使用しています。シャーディングはありません。

ここに私の質問があります:

  1. When setting up the replicate set, do I need to use external real IP address to specify the host from Data Center 2 and 3? e.g.

    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. Because the servers in Data Center 2 will behind load balancer and firewall, the IP address may not be able to explode to outside world. Is it possible to use the load balancer IP address? if so, how to do it?

  3. I should use priorty=0 to make servers in Data Center 2 & Data Center 3 never be primary, right?

  4. How other application connect to the MongoDB in Data Center 2 and 3 (for read data only)? Let say, the application (a server side app) is also in Data Center 2 network. What IP address should the application use to connect to the MongoDB in DC2? Should I use the internal IP or external IP? If an application is outside of the DB internal network and would like to connect to MongoDB in DC2 to read data only, should I use the load balancer IP or external IP?

  5. Because I want Servers in DC2 and DC3 able to allow read data, how to set slaveOk? Should I set it in the primary "slaveOK", or should I set it in each server in DC2 and DC3?

  6. One step further, let say DC1, DC2 and DC3 are all individual replicate set. e.g. DC 1 has its only primary and secondary. DC2 has its own primary and secondary, so far DC3. Is there an easy and real-time way to update DC2 and DC3 when there is change (new record or update) in DC1?

3

1 答え

  1. 依存します。アプリケーションサーバーができるホスト名/ IPである必要があります アクセス。あなたのアプリケーションサーバが同じDC上で動作している場合、あなたのmongodプロセスは動作していて、それらは内部でなければなりません。その他の設定には大きなセキュリティ問題があります。
  2. 技術的には、はい。各mongodプロセスを別のポートに割り当てます。しかし、ロードバランサでmongoのクエリを配布する必要があるのはなぜか分かりません。これはドライバーがあなたのためにやることであり、ドライバー以外のものにクエリを送るRSメンバーを決定させることに副作用があるかもしれません。
  3. 修正する。
  4. 内部IPを使用する方法です。アプリケーションサーバーは、ローカルメンバーのすべての内部IPでドライバを初期化する必要があります(同じDC上のメンバーを参照してください)。
  5. サーバをslaveOkに設定しません。 SlaveOk機能はドライバの最後にあります。通常、接続ごとに設定されますが、大部分のドライバにはグローバルおよびクエリごとのフラグがあります。明らかに、このフラグが有効になっていなければ、設定は機能しません。
  6. いいえ。 MongoDB atmにはマスターマスターレプリケーションはありません。
3
追加された
ありがとう.. 2)理由は私が欲しいからではありません。私はそれに縛られているからです。外部リクエストは内部サーバーに直接アクセスすることはできません。マッピングを実行するには、ファイアウォールまたはロードバランサを通過する必要があります。
追加された 著者 murvinlai,
2)私はポート27017,27018,27019が各内部サーバー(ip1:27017、ip2:27018、ip3:27019)を指している可能性があります。
追加された 著者 murvinlai,
アドバイスをいただきありがとうございます。 :)
追加された 著者 murvinlai,
理解して、あなたは大歓迎です。
追加された 著者 Remon van Vliet,