Назад | Перейти на главную страницу

Предоставление доступа к серверу потоковых данных mongodb, защищенному брандмауэром

У меня есть потоковые данные на платформе Windows, которые я захватываю в Mongodb с довольно высокой скоростью около 800 точек данных в секунду. Я хочу получить доступ к этим данным извне, но компания не желает переносить 27017 (mongod) во внешний мир. Я настроил авторизацию и скомпилировал mongod для ssl.

Как я могу открыть Mongo для внешнего сервера? Мой сервер находится в другом месте в «бесплатном» Интернете, и я хочу, чтобы он каждые 10 секунд получал последние, скажем, 1000 точек данных с сервера. Как мне это сделать, если я не могу выполнить перенос?

Могу ли я заставить сервер mongo каким-то образом «проталкивать» данные на внешний сервер (у которого есть фиксированный IP-адрес)? FTP - не решение, так как потоки данных передаются слишком быстро (я думаю).

Могу ли я каким-то образом передать его по http или другому протоколу?

В идеале мне бы понравился «собственный» доступ к серверу mongo, так как это позволило бы мне использовать настраиваемые курсоры, поэтому подойдет любое решение, приближающее эту функциональность. Однако, если это невозможно или нецелесообразно, для меня также подойдет решение потоковой передачи с сервера, защищенного брандмауэром, на сервер внешнего мира.

Если ваш частный сервер всегда включен, и ваша компания согласна с тем, что вы используете VPN (это большой вопрос, уточните в ИТ-отделе), я бы использовал openVPN и, возможно, набор реплик MongoDB.

OpenVPN's Соотношение безопасность / усилия довольно хорошее - он доступен как стандартный пакет в большинстве дистрибутивов Linux, работает с файлами конфигурации, имеет множество руководств, использует статический ключ (простая установка) или TLS (один ключ на клиент / сервер).
OpenVPN HOWTO
Ваш «внешний» сервер будет VPN-сервером, и «мастер» MongoDB будет подключаться к нему автоматически при запуске.

После того, как ваши серверы подключены, вам нужно выбрать, хотите ли вы запросить «главный» через VPN или использовать вторичный сервер MongoDB на «внешнем» для синхронизации, а затем запросить его.
Набор реплик MongoDB позволяет одному серверу поддерживать "синхронизацию" с основным сервером. Обычно он используется для обеспечения отказоустойчивости, но вы также можете использовать его для своих целей.
Набор географически избыточных реплик MongoDB.
Убедитесь, что ваш «внешний» сервер не имеет права голоса и с приоритетом 0 (это означает, что он не будет частью вычислений кластера)

Лучше всего, если вы расскажете своим ИТ-специалистам обо всем решении и протестируете его, прежде чем начинать полагаться на него для производственных задач.

Одна из возможностей - создать SSH туннель который будет использоваться для ваших подключений к базе данных Mongo. Туннель SSH будет шифровать трафик Mongo, а туннели SSH - хорошо известный метод.

Видеть:

Уже есть хорошие предложения по туннелям (из которых я бы предпочел OpenVPN), но здесь я предлагаю другой подход.

Вместо того, чтобы предоставлять все ваши данные mongodb удаленному серверу, чтобы получить определенные данные, вам может быть лучше создать более узконаправленный веб-API, который мог бы работать в любом месте.

  1. Вы можете запустить сценарий или демон на своем сервере mongodb или рядом с ним (и в пределах брандмауэра), который обращается к mongodb изначально, а затем упаковывает данные и отправляет их в API на вашем удаленном веб-сервере. Вероятно, REST и JSON - это те вещи, на которые вы должны обратить внимание при разработке API на своем веб-сервере.
  2. В качестве альтернативы у вас может быть веб-сервер рядом с сервером mongodb, который доступен с вашего удаленного веб-сервера. Вы должны реализовать подходящий API на веб-сервере, который является локальным для вашего сервера mongodb, и извлекать данные с него, вызывая его со своего удаленного веб-сервера.

Какой подход работает лучше, в основном зависит от наличия подходящего места для работы в сети вашей компании и задействованных сетевых политик. Вы можете довольно жестко заблокировать доступ к своему API, чтобы удовлетворить опасения ваших сетевых администраторов. Например, заблокируйте доступ по IP, потребуйте подходящую аутентификацию и, возможно, заблокируйте его с помощью определенного ключа SSL.

Если возможно, наиболее эффективным подходом, вероятно, будет запуск демона рядом с сервером mongodb, который использует настраиваемые курсоры, которые вы упомянули, и отправляет данные в API на вашем удаленном веб-сервере.