Я пытаюсь развернуть репликас mongodb с помощью докеры. Мне удалось сделать это на одном сервере, выполнив следующее:
docker run -d --expose 27017 --name mongodbmycompany1 dockerfile/mongodb mongod --replSet rsmycompa
docker run -d --expose 27017 --name mongodbmycompany2 dockerfile/mongodb mongod --replSet rsacommeassure
docker run -d --expose 27017 --name mongodbmycompany3 dockerfile/mongodb mongod --replSet rsacommeassure
MONGODB1=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mongodbmycompany1)
MONGODB2=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mongodbmycompany2)
MONGODB3=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mongodbmycompany3)
echo $MONGODB1
echo $MONGODB2
echo $MONGODB3
echo "Mongodb Replicaset init"
docker exec mongodbmycompany1 mongo 127.0.0.1:27017/mycompany --eval 'if(!rs.conf()) { rs.initiate(); cfg = rs.conf(); cfg.members[0].host = "'$MONGODB1':27017"; rs.reconfig(cfg); rs.add("'$MONGODB2':27017"); rs.add("'$MONGODB3':27017"); } rs.status();'
Работает так, как ожидалось. Мой replicaset инициализирован, и моя конфигурация результатов mongodb содержит мои 3 сервера, идентифицированные их внутренним IP-адресом. Это не идеально, поскольку я предпочитаю использовать имена серверов, но мне это не удалось. Docker заполняет каждый файл /etc/hosts именами серверов, переданными при запуске изображения с параметром -link. Если я добавлю новый сервер, а другие будут запущены. Эти серверы не будут пинговать новый сервер.
Теперь у меня есть другой вопрос. В производстве возможно наличие большого количества изображений докеры Mongodb на одном физическом сервере, но это небезопасно: - если мой физический сервер падает, я теряю все реплики Mongodb, и моя служба недоступна - если мой физический сервер использует внутреннее хранилище, все мои изображения докеров используют один и тот же диск... и у меня будут проблемы с IO.
Итак, мой вопрос: Как я могу развернуть многие реплики mongodb на нескольких физических серверах? Как эти реплики mongodb могут взаимодействовать друг с другом (первичные и вторичные серверы могут меняться), когда они находятся на разных серверах или даже на разных датацентрах?