Если у меня есть веб-сайт, размещенный на сервере Linux. Предполагается, что на веб-сайте используются базы данных PHP и MySQL. Если мне нужно было в один прекрасный день добавить еще один сервер, чтобы поддерживать производительность сайта, что мне делать за это время? Нужно ли мне покупать платную версию MySQL? Как я могу заставить базу данных MySQL хранить данные между обоими серверами? И как мне соединить два сервера?
Предполагая, что мы говорим о производственной системе, которая в конечном итоге должна масштабироваться до бесконечности, следующие правила:
Убедитесь, что вы понимаете, что происходит. Я предполагаю, что это система LAMP на Linux. Некоторые инструменты, которые помогут вам измерить производительность: atop, collectd, iostat, vmstat, iptraf, netacct. Если вы используете интерфейс Apache, включите ведение журнала обработки запросов (см. LogFormat% D). В mysql включите ведение журнала медленных запросов и установите низкий порог (например, 5 секунд), чтобы вы могли поймать проблемные запросы до того, как ваши пользователи их заметят. Используйте mysqlreport, чтобы узнать, следует ли yuo изменить конфигурацию mysql. Вставьте операторы журнала в свой PHP-код, который срабатывает, если выполнение соответствующих частей занимает больше времени, чем допустимо. Используйте, например, logwatch, чтобы отслеживать такие строки в журналах и уведомлять вас, когда они возникают.
Как только вы поймете, какие части вашей системы создают нагрузку, начните изучать свой дизайн, чтобы сделать его более модульным. Затем вы создаете инструменты для измерения производительности каждого модуля по отдельности, чтобы убедиться, что он соответствует вашим требованиям к производительности.
Не беспокойтесь о производительности вашей системы, пока вы не измерите и не обнаружите проблему.
Если вам нужно измерить базу данных и найти ее узкое место, первым делом нужно переместить базу данных на отдельный сервер от вашей установки PHP. Это даст вам много дополнительного места. Если вы не имеете дело с очень большой базой данных, очень дорогими запросами или очень большим количеством пользователей, в большинстве случаев достаточно одного сервера. Просто убедитесь, что у вас достаточно оперативной памяти для хранения всей базы данных в памяти. С установками SQL на одном сервере гораздо проще справиться, и они обычно обеспечивают лучшую производительность за ваши деньги.
Теперь исследуйте и установите какую-нибудь систему мониторинга. Узнайте, как ваша система реагирует на различные нагрузки и что начинает плохо работать по мере увеличения нагрузки. Это позволит вам принять обоснованное решение о том, что нужно делать, когда придет время.
Простым способом масштабирования MySQL является настройка репликации главный-подчиненный и прямая запись в главный и чтение на подчиненный. Корпоративная версия не нужна, поскольку она поддерживается в версии сообщества.
Вот как это сделать для MySQL: http://dev.mysql.com/doc/refman/5.0/en/replication-howto.html
Есть несколько способов сделать это. Вы можете изучить репликацию Master-Master для базы данных и Round Robin для DNS. Должно быть бесплатно, без лицензий.