Як наладзіць 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 (1-А, 1-B і 1-C) могуць быць першаснымі. MongoDB серверы ў цэнтры дадзеных і 2 цэнтры апрацоўкі дадзеных 3 з'яўляюцца толькі другаснымі. Праграмы могуць спецыяльна счытваць дадзеныя з цэнтра апрацоўкі дадзеных 2, паколькі гэтыя праграмы могуць быць у той жа сеткі цэнтраў апрацоўкі дадзеных 2, якая мае больш хуткі доступ, чым падключэнне да дадзеных 1. камп'ютэрнага цэнтра сервера выкарыстоўвае рэплікацыю набораў. Там няма Sharding.

Вось мае пытанні:

  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-адрасоў, што серверы прыкладанняў могуць доступ. Калі серверы прыкладанняў працуюць на адным тэхнолагам mongod DC працуюць, яны могуць і павінны быць ўнутранымі. Любая іншая ўстаноўка мае сур'ёзныя праблемы бяспекі.
  2. Тэхнічна, так. Прызначаюць кожны працэс mongod да іншага порце. Тым не менш, я не разумею, чаму вы калі-небудзь хочаце балансавання нагрузкі для размеркавання Монго запытаў. Гэта тое, што кіроўца будзе рабіць для вас, і там можа быць нават пабочныя эфекты даючы нешта іншае, акрамя кіроўцы вырашыць, які Р.С. элемента запыт ідзе к.
  3. Правільна.
  4. Унутраны IP-адрас з'яўляецца шляхам. App сервера павінны ініцыялізаваць іх драйвер з усімі ўнутранымі IP-адрасамі мясцовых сябраў (чытайце: члены на той жа DC)
  5. Вы не ўсталюеце сервера для slaveOk. Функцыянальнасць SlaveOk знаходзіцца на канцы драйвера рэчаў. Звычайна ўсталёўваецца для кожнага злучэння, але большасць кіроўцаў маюць агульны і сцяг запыту для яго, а таксама. Відавочна, ваша ўстаноўка не будзе працаваць без гэтага сцяга уключаны.
  6. Не. Там няма майстар-майстар рэплікацыі ў MongoDB атм.
3
дададзена
Дзякуй .. за 2) прычына не таму, што я хачу. гэта таму, што я абмежаваны да гэтага мноству ўверх. знешні запыт не можа перайсці да унутраным серверам напроста. павінен прайсці праз брандмаўэр або балансаванне нагрузкі, каб зрабіць адлюстраванне.
дададзена аўтар murvinlai, крыніца
2) можа быць я ёсць порт 27017, 27018 і 27019 пункту да кожнага ўнутранага сервера (IP1: 27017, ip2: 27018 і IP3: 27019)
дададзена аўтар murvinlai, крыніца
Вялікі дзякуй за парады. :)
дададзена аўтар murvinlai, крыніца
Зразумеў, і вы гасцінна.
дададзена аўтар Remon van Vliet, крыніца