2013-10-08 2 views
17

У меня есть сервер с 5 или 6 небольшими приложениями Rails. Все их прикрепленные файлы находятся на S3, и все они используют MySQL в качестве базы данных. Каждое приложение имеет своего собственного пользователя и выполняет некоторые тонкости. Существует сервер nginx, выполняющий балансировку нагрузки и маршрутизацию домена.Архитектура сервера приложений для докеров в отношении базы данных

Я планирую заменить этот сервер установкой Docker: один сервер с одним контейнером для каждого приложения, с nginx спереди.

Мой вопрос: где бы вы поделили базу данных?

В основном я видеть 4 возможности:

1) Один сервер Mysql внутри каждого приложения контейнера. Думаю, это швы не являются философией Докера. Это потребовало бы, чтобы данные каждого контейнера были подкреплены индивидуально.

2) Уникальный контейнер MySQL для всех приложений.

3) Стандартная установка MySQL на сервере-докере хоста.

4) Отдельный сервер MySQL для всех приложений.

Что вы хотите сделать?

PS: Я знаю, что Docker еще не готов к производству, я планирую использовать его для постановки в данный момент и переключиться, если я доволен им.

ответ

22

Это зависит от нескольких факторов. Вот несколько вопросов, которые помогут вам решить.

  • ли 5-6 приложения очень похожи (то есть, с точки зрения Docker, вы могли бы основывать их на общий образ), и вы думаете о развертывании нескольких из них, и/или миграции некоторых из них другие серверы?

    • ДА: тогда это имеет смысл встраивать сервер MySQL в каждом приложении, потому что она будет «придерживаться вокруг» с приложением, с минимальными усилиями конфигурации.

    • НЕТ: тогда нет веской причины для внедрения сервера MySQL.

  • вы хотите, чтобы иметь возможность масштабировать эти приложения (то есть запросы баланса нагрузки для одного приложения на несколько контейнеров), или масштабировать сервер MySQL (до, например, ведущий/ведомый репликации установки) ли?

    • ДА: тогда вы не можете встраивать сервер MySQL, в противном случае, масштабирование один ярус будет масштабироваться другой ярус, который приведет к тому, хотя головные боли.

    • НЕТ: ничто не мешает вам встраивать сервер MySQL.

  • Считаете ли вы, что значительная загрузка базы данных по крайней мере в одном из этих приложений?

    • ДА: тогда вы можете использовать отдельные серверы MySQL, поскольку одно приложение может помешать другим.

    • НЕТ: тогда вы можете использовать один сервер MySQL.

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

Самая гибкая настройка - это тот, где вы развертываете один контейнер приложения + один контейнер MySQL для каждого приложения. Если вы хотите сделать это, я бы предложил дождаться Docker 0.7, который будет реализовывать ссылки , что позволит вам создать механизм обнаружения основных сервисов, чтобы каждый контейнер приложения мог легко обнаружить хост/порт своего контейнера базы данных ,

Я бы не размещал MySQL на хосте; если вы хотите установить одну MySQL, вы можете добиться того же результата, запустив один контейнер MySQL и запустив его с помощью -p 3306:3306 (он направит порт 3306/tcp хоста на порт 3306/tcp контейнера).

+0

Спасибо! Да, приложения аналогичны, за исключением их Rails и Ruby версий, это просто стандартные приложения Rails и их зависимости. Нет необходимости в масштабировании или репликации, просто базовые (почти устаревшие) веб-сайты с несколькими функциями. – aurels

1

С 5 или 6 приложений маленькие, как вы описали, я, безусловно, исключает возможность установки отдельного MySQL за контейнер по двум причинам:

  1. Это трата ресурсов сервера, это почти эквивалентно для установки MySQL 5 или 6 раз на том же сервере.
  2. Он менее гибкий (не может масштабировать DB независимо от приложений) и сложнее резервного копирования.

Наличие отдельного контейнера MySQL или установка MySQL на хосте напрямую (то есть не докеры) должно иметь почти такую ​​же производительность (в конце вы будете иметь собственный процесс mysql на хосте, независимо от того, находится ли он в контейнер или нет).

Единственное различие заключается в том, что вам необходимо смонтировать том, чтобы сохранить данные вне контейнера MySQL , поэтому лучше использовать выделенный контейнер MySQL.

+0

При выборе запуска MySQL непосредственно на хосте Docker, смогут ли контейнеры легко подключаться к нему? Просто через 127.0.0.1? – aurels

+0

Да, через 'тома'. Я использую 1 контейнер docker mysql с несколькими приложениями, использующими его, также в контейнерах. Установлен только докер. – majkinetor

+0

Да, просто передайте IP/порт вашего MySQL в качестве переменных среды в контейнер докеров, который будет использовать его (не 127.0.0.1). @majkinetor, он спрашивает о запуске MySQL непосредственно на хосте i.e вне контейнера докера – iTech

Смежные вопросы