Как настроить MongoDB для нескольких центров обработки данных? - PullRequest
3 голосов
/ 28 октября 2011

Вот среда:

[ 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 ]

Чего я хотел бы добиться, так это чтобы на каждом сервере был установлен один сервер mongo, и только серверам Data Center 1 (1-A, 1-B и 1-C) разрешено быть первичными. Серверы MongoDB в ЦОД 2 и ЦОД 3 являются только вторичными. Приложения могут специально считывать данные из Центра обработки данных 2, поскольку эти приложения могут находиться в той же сети, что и Центр обработки данных 2, который имеет более быстрый доступ, чем подключение к Data Cetner 1. Сервер использует дублированные наборы. Нет шардинга.

Вот мои вопросы:

  1. При настройке набора репликации нужно ли использовать внешний реальный IP-адрес для указания хоста из ЦОД 2 и 3? например,

    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. Я должен использовать priorty = 0, чтобы серверы в ЦОД 2 и ЦОД 3 никогда не были первичными, верно?

  4. Как другие приложения подключаются к MongoDB в ЦОД 2 и 3 (только для чтения данных)? Допустим, приложение (приложение на стороне сервера) также находится в сети Data Center 2. Какой IP-адрес приложение должно использовать для подключения к MongoDB в DC2? Должен ли я использовать внутренний IP или внешний IP? Если приложение находится за пределами внутренней сети БД и хочет подключиться к MongoDB в DC2 только для чтения данных, следует ли мне использовать IP-адрес балансировщика нагрузки или внешний IP-адрес?

  5. Поскольку я хочу, чтобы серверы в DC2 и DC3 могли разрешать чтение данных, как установить slaveOk? Должен ли я установить его в основном «slaveOK» или установить на каждом сервере в DC2 и DC3?

  6. Еще один шаг, скажем, DC1, DC2 и DC3 - это все отдельные копии. например DC 1 имеет свои первичные и вторичные. DC2 имеет свои первичные и вторичные, пока DC3. Существует ли простой способ обновления DC2 и DC3 в режиме реального времени при изменении (новая запись или обновление) в DC1?

1 Ответ

3 голосов
/ 28 октября 2011
  1. Зависит. Они должны быть именами хостов / IP-адресами, которые могут использовать ваши серверы приложений. доступ. Если ваши серверы приложений работают на одном контроллере домена, ваш процесс mongod запущен, он может и должен быть внутренним. Любая другая установка имеет серьезные проблемы с безопасностью.
  2. Технически, да. Назначьте каждому процессу mongod отдельный порт. Однако я не понимаю, почему вы хотите, чтобы балансировщик нагрузки распространял монго-запросы. Это то, что драйвер сделает для вас, и могут даже возникнуть побочные эффекты, если позволить драйверу решить, к какому члену RS отправляется запрос.
  3. Correct.
  4. Внутренние IP-адреса - путь. Серверы приложений должны инициализировать свой драйвер всеми внутренними IP-адресами локальных участников (читай: члены на одном DC)
  5. Вы не устанавливаете серверы на slaveOk. Функциональность SlaveOk находится на стороне драйвера вещей. Обычно устанавливается для каждого соединения, но большинство драйверов также имеют глобальный флаг и флаг запроса. Очевидно, что ваша установка не будет работать без этого флага.
  6. Нет. В MongoDB atm нет репликации мастер-мастер.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...