Вот среда:
[ 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. Сервер использует дублированные наборы. Нет шардинга.
Вот мои вопросы:
При настройке набора репликации нужно ли использовать внешний реальный 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 будут находиться за балансировщиком нагрузки и межсетевым экраном, IP-адрес может не иметь возможности взорваться для внешнего мира. Можно ли использовать IP-адрес балансировщика нагрузки? если да, то как это сделать?
Я должен использовать priorty = 0, чтобы серверы в ЦОД 2 и ЦОД 3 никогда не были первичными, верно?
Как другие приложения подключаются к MongoDB в ЦОД 2 и 3 (только для чтения данных)? Допустим, приложение (приложение на стороне сервера) также находится в сети Data Center 2. Какой IP-адрес приложение должно использовать для подключения к MongoDB в DC2? Должен ли я использовать внутренний IP или внешний IP? Если приложение находится за пределами внутренней сети БД и хочет подключиться к MongoDB в DC2 только для чтения данных, следует ли мне использовать IP-адрес балансировщика нагрузки или внешний IP-адрес?
Поскольку я хочу, чтобы серверы в DC2 и DC3 могли разрешать чтение данных, как установить slaveOk? Должен ли я установить его в основном «slaveOK» или установить на каждом сервере в DC2 и DC3?
Еще один шаг, скажем, DC1, DC2 и DC3 - это все отдельные копии. например DC 1 имеет свои первичные и вторичные. DC2 имеет свои первичные и вторичные, пока DC3. Существует ли простой способ обновления DC2 и DC3 в режиме реального времени при изменении (новая запись или обновление) в DC1?