MySQL должен быть установлен один

20

Я часто слышу, как люди делают такие заявления, как «сбой в работе нашего сервера MySQL», и у меня создается впечатление, что они выделяют одну машину в качестве сервера MySQL (я полагаю, они просто устанавливают ОС и только MySQL на нее). Как разработчик, а не системный администратор, я привык устанавливать MySQL как часть стека LAMP вместе с веб-сервером и PHP.

Может кто-нибудь объяснить мне:

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

Ответы:

30

Когда платформа вашего приложения и база данных конкурируют за ресурсы, это обычно является первым признаком того, что вы готовы к выделенному серверу базы данных.

Во-вторых, высокая доступность: настройка кластера базы данных (и обычно, в свою очередь, кластера веб-серверов / серверов приложений со сбалансированной нагрузкой).

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

Доступ к серверу базы данных осуществляется по сети. т. е. когда вы обычно указываете «localhost» для своего хоста базы данных, вы должны указывать хост / IP-адрес вашего сервера баз данных. Примечание: обычно вам нужно изменить конфигурацию сервера базы данных, чтобы разрешить подключения / включить прослушивание на интерфейсе, отличном от интерфейса обратной связи.

gravyface
источник
Кроме того, выделенный компьютер позволяет настроить конфигурацию диска соответствующим образом. Веб-серверы очень довольны, когда данные живут на RAID 6; серверы баз данных предпочитают RAID 1.
Саймон Рихтер
12

Отдельный сервер базы данных - это лишь часть хорошего, масштабируемого дизайна. Это не имеет значения, если ваш трафик не очень высок и достаточно одного сервера.

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

Кроме того, с точки зрения системного администратора, более понятно, есть ли выделенные серверы, названные разумно, например, «mysql-01.yourcompany.com» и «webserver-01.yourcompany.com». Когда они получают оповещения, они сразу же видят, что происходит, по крайней мере, в смысле «ОК, с базой данных что-то не так». Я знаю, что это слабый аргумент, поскольку несколько DNS-имен могут указывать на один сервер, но все же.

Ваши приложения будут без проблем подключаться к удаленному серверу баз данных по сети. Aieeeeeee! Как ваш веб-браузер подключается к удаленному серверу? Это магия! Хм ... более серьезно, вместо 'localhost' вы просто указываете адрес сервера в $ program_language_of_your_choice и все готово.

Янне Пиккарайнен
источник
2
В дополнение к комментарию Янне, относящемуся к точке зрения sysadmin ... Если у вас проблемы с производительностью или иным образом требуется отладка приложения, это гораздо проще сделать, когда веб-сервер и сервер базы данных находятся на разных компьютерах.
HTTP500,
5
  • Некоторые веб-сайты / приложения используют базу данных настолько интенсивно, что им требуется один или несколько серверов, выделенных для самой базы данных.
  • По сети.
Игнасио Васкес-Абрамс
источник
3

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

Например, базы данных все об управлении хранилищем. Чем быстрее я могу получить информацию с диска, тем быстрее я могу передать ее запрашивающей стороне. Если я делю дисковую подсистему с несколькими другими членами стека приложений, такими как веб-сервер, конфликт, с которым я сталкиваюсь из-за общего ресурса чтения и записи дисков, может на самом деле снизить производительность. Кроме того, разделение ОЗУ между веб-сервером и сервером базы данных на данном хосте может не обеспечить достаточно большой пул ресурсов для того, чтобы они могли работать наиболее эффективным образом, способным кешировать как можно больше информации в ОЗУ без необходимости обращаться к диску либо изображение, страница или набор результатов запроса.

В административном отношении также необходимо повысить эффективность. Представьте, что вы запускаете свое предприятие в приложениях с открытым исходным кодом, которые используют MySQL в качестве общего бэкэнда. Вы действительно хотели бы иметь распространение сервера баз данных с каждым приложением? Это может быть кошмар администратора БД: «Хорошо, какое приложение использует эту БД?» У вас будет несколько версий, мулотипные конфигурации аппаратного / программного обеспечения, несколько стратегий хранения данных. Вы также, вероятно, обладаете очень разрозненными административными навыками. Вместо этого объедините экземпляры в один физический аппарат, оптимизированный для этой роли, и назначьте выделенные ресурсы для управления сервером и его данными.

Джеймс Пулли
источник
2

Запросы MySQL могут быть очень ресурсоемкими, что может замедлить работу вашего сервера LAMP.

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

Веб-сервер просто должен подключиться к адресу сервера базы данных, а не localhostвыполнять запросы к базе данных.

Джейк Уилсон
источник