Я собираюсь разработать архитектуру для образовательного сайта на основе Moodle, сначала он будет обслуживать несколько тысяч пользователей, но должен иметь возможность расти, чтобы поддерживать от сотен тысяч до миллионов пользователей в нескольких странах.
Я думал о балансировщике нагрузки для распределения запросов на несколько веб-серверов. Веб-серверы могут быть разделены на некоторые, обслуживающие статический, и некоторые обслуживающие динамический контент. Затем он должен писать на главный узел mysql и читать с подчиненных узлов.
Какой балансировщик нагрузки будет хорошо работать с moodle, должен ли я получить решение аппаратного балансировщика нагрузки от одного из поставщиков или создать его самостоятельно с помощью решения с открытым исходным кодом, такого как LVS или обратный прокси?
Я планировал сначала использовать сервер apache для обслуживания веб-страниц, а затем, когда нагрузка станет выше, разделить на веб-сервер lighttpd для статического контента и сервер приложений apache для динамического контента. Такие вещи, как сжатие gzip, кеш squid, кеш памяти, также будут развернуты при необходимости.
Что нужно для оборудования веб-сервера: использовать однопроцессорный сервер или блейд-сервер? Какой из них будет дешевле запускать и расширять? У Supermicro есть интересный продукт с двумя серверами в корпусе 1U и 4 серверами в корпусе 2U с Infiniband. Кто-нибудь здесь пробовал раньше этот сервер?
В качестве хранилища я должен использовать SAN или сервер хранения, например Sun unified Storage 7000. Должен ли я для настройки кластера mysql иметь две разные системы хранения, одну для использования для записи на главный узел, а другую для чтения на подчиненном? Или все узлы должны иметь отдельное хранилище?
Поскольку этот веб-сайт, вероятно, будет более загружен операциями чтения, что следует учитывать при настройке кластера mysql и хранилища?
Для управленческой части я планирую использовать dsh, ganglia, nagios, splunk, kickstart.
Для резервного копирования я планирую использовать автозагрузчик ленты LTO. Этот сайт будет в основном использоваться для азиатского региона, поэтому в ночное время будет несколько часов низкой посещаемости. Как лучше всего создать резервную копию кластера mysql? Могу ли я временно отключить запись и вынуть мастер для выполнения резервного копирования?
Пожалуйста, сообщите, если у вас есть опыт создания такого масштабируемого веб-сайта, большая часть моего опыта связана с работой с большими модулями unix или небольшими автономными модулями unix / linux. Так что такая масштабная реализация для меня впервые.
Спасибо
Роберт.
Роберт, вы явно умный парень, но, с уважением, наймите консультанта с предварительными знаниями в предметной области или начните создавать что-то маленькое сейчас и посмотрите, куда это вас приведет. Нет возможности ответить на ваш пост; в нем слишком много абстрактных понятий и нет точных цифр.
Несколько мыслей:
сначала будет обслуживать несколько тысяч пользователей ... расширяться для поддержки от сотен тысяч до миллионов пользователей
Докажите, что вам в первую очередь нужен такой масштаб. Не создавайте горизонтально масштабируемую архитектуру в ожидании пользователей, которые никогда не появятся. Извините, если я звучу резко, но 99% всех веб-сайтов не достигают большой отметки. См. Переполнение стека / Сбой сервера; они обслуживают миллион пользователей ежемесячно с горстки довольно обычных серверов.
должен ли я получить аппаратный балансировщик нагрузки от одного из поставщиков или создать его самостоятельно с помощью решения с открытым исходным кодом
Зависит от ваших навыков и вашей ситуации относительно времени и денег. После создания предложения с открытым исходным кодом и коммерческие предложения работают практически одинаково. Коммерческие решения обычно имеют лучшую статистику и более приятные интерфейсы управления из коробки.
В качестве аппаратного обеспечения веб-сервера следует использовать однопроцессорный сервер или блейд-сервер?
Узнайте цены у поставщика серверов. Спросите свой центр обработки данных о плотности мощности, то есть их предпочтительном балансе между размером и потребляемой мощностью - часто вы будете ограничены в мощности, поэтому плотное решение, такое как блейд-серверы, может вам ничего не выиграть.
В качестве хранилища я должен использовать SAN или сервер хранения, например Sun unified Storage 7000.
Получите SAN, когда у вас есть доказанная потребность в SAN; тогда вы также лучше поймете, какие потребности ваша сеть SAN должна решать за вас.
Поскольку этот веб-сайт, вероятно, будет более загружен операциями чтения, что следует учитывать при настройке кластера mysql и хранилища?
Создайте действительно хорошее решение для кеширования. Либо полное кеширование страницы, как Squid (Varnish), либо кеширование данных приложения, как Memcached, либо их комбинация. Подумайте об аннулировании кеша. Может ли вам потребоваться быстро удалить содержимое из кешей, чтобы избежать его повторного обслуживания?
Как лучше всего создать резервную копию кластера mysql?
Мнения разнятся, но один из распространенных подходов состоит в том, чтобы иметь выделенный подчиненный MySQL только для резервного копирования и использовать что-то вроде InnoBackup или Maatkit для самостоятельного создания сценария резервного копирования.
Редактировать: Если вы действительно собираетесь создать это с нуля, тогда, пожалуйста, возьмите Хороший взгляд на облачные вычисления перед совершением. Облачные вычисления - это не только масштабируемость, даже если масштабируемость - это большая сила. Некоторые услуги, входящие в пакет, действительно могут помочь упростить повседневную работу. Некоторые примеры:
Хотя я никогда не управлял системой Moodle, которую можно было бы считать большой (самое большее, с несколькими тысячами активных пользователей), и я почти уверен, что у вас больше опыта работы с Linux, чем у меня, я могу предложить некоторые наблюдения.
Установка Moodle с миллионами пользователей была бы на порядок больше любой другой, о которой я слышал. Даже Открытый университет со студентами, разбросанными по Великобритании и по всему миру, ожидает только 200 000 пользователей. В крупных университетах США, как правило, всего несколько десятков тысяч пользователей. Чтобы понять размер, взгляните на http://docs.moodle.org/en/Large_installations Вы будете действительно заставить миллионы людей пользоваться системой? Будут ли они все появляться одновременно или постепенно, с годами? Вам не нужна система, способная обрабатывать миллионы, если вы собираетесь получить только 10 000 в первый год. Кроме того, во многих учреждениях есть теоретическое количество студентов, которые будут использовать Moodle, но лишь небольшой процент из них действительно использует систему. Короче говоря, начните с малого и увеличивайте масштаб.
Дистрибутив Linux облегчит жизнь при администрировании Moodle. Доступная онлайн-помощь сообщества вообще не ориентирована на Windows!
Рассмотрите возможность найма местного партнера Moodle (извините, я новичок и не могу опубликовать вторую ссылку), если вы серьезно к этому относитесь. Они могут предложить совет, основанный на личном опыте настройки и администрирования систем Moodle.
Moodle обычно очень бережно относится к системным ресурсам. Просто следите за базами данных, так как скорость транзакций может быть очень большой. Вы не упомянули об этом, но подумайте об отделении серверов БД от веб-сервера и сконцентрируйте ресурсы на кластеризации БД. С кешированием (eaccelerator или memcached) веб-доступ незначителен. Файловое хранилище также обычно не требует интенсивного использования, и все, что нужно, - это ссылка на приличный массив рейдов, локальный или на отдельной машине. Если у вас есть SAN, используйте его. Если нет, просто придерживайтесь простых вещей.
Как всегда бэкап, бэкап, бэкап!
Удачи!
Хотя я не очень разбираюсь в специфике Moodle, я могу предложить несколько советов по общей масштабируемости.
Блейды и сети SAN часто продаются поставщиками не по назначению. Я подозреваю, что кластер стандартных серверов 1U, вероятно, лучше всего подойдет для ваших нужд. Есть ряд центров обработки данных, которые не принимают блейд-системы, потому что потребляемая мощность очень высока, а требования к охлаждению также весьма высоки!
Я большой поклонник Gluster для распределенного / реплицированного хранилища вам может быть интересно исследовать в качестве альтернативы решению SAN от крупного поставщика.
С таким же успехом подойдет целый стек HP DL360 (или более дешевые стандартные серверы (я настоятельно рекомендую DNUK)). Я серьезно сомневаюсь, что вам понадобятся межсоединения Infiniband между вашими серверами (инфраструктура дорогая и в значительной степени не нужна для целей веб-обслуживания, если бы вы выполняли моделирование экспрессии генома HPC, мой ответ мог бы быть другим!)
Что касается сетевой инфраструктуры (если вы тоже должны это учитывать ..), я рекомендую маршрутизаторы Cisco, либо с коммутаторами Cisco Catalyst, либо с HP Procurves (довольно равномерно, IMO и дешевле)
Что касается балансировки нагрузки, выделенный Linux-сервер, на котором работает LVS, будет легко обрабатывать трафик на несколько узлов кластера. Если бы у вас были деньги (30 тысяч долларов +), то Citrix netscaler мог бы быть подходящей платформой для кэширования / ускорения / балансировки нагрузки, но имейте в виду, что вам понадобятся 2 (в идеале 3) из них для избыточности.
Вероятно, вам стоит попробовать включить memcache с самого начала, легко добавить масштабируемость и значительно улучшить производительность кеширования, особенно при чтении из кластера базы данных MySQL. Есть и другие вещи, которые вы можете сделать, чтобы настроить производительность MySQL, например, используя InnoDB поверх MyISAM.
Я подозреваю, что вам будет лучше использовать кеш обратного прокси, например Varnish, а не Squid, который лучше работает как кеш на стороне клиента.
Вы можете легко создать пару выделенных узлов кэша Varnish или запустить Varnish на том же сервере, что и серверы Apache / lighttpd.
Старайтесь не попадать в состояние, когда вы получаете привязку к поставщику, поскольку это может оказаться очень дорогостоящим, когда дело доходит до вопросов лицензирования. Очень возможно создать масштабируемый сайт, полностью используя бесплатное программное обеспечение с открытым исходным кодом. Конечно, программные балансировщики нагрузки не будут такими быстрыми, как аппаратные с выделенными ASIC, но с хорошей сетевой инфраструктурой они могут быть довольно близкими.
В качестве управления я планирую использовать dsh, ganglia, nagios, splunk, kickstart.
Просто нужно добавить марионетку в этот список, и вы станете победителем. Остерегайтесь дорогостоящего лицензирования splunk (когда вы обрабатываете 10 ГБ журналов в день, это может вас укусить).
Munin - отличный бесплатный инструмент для мониторинга и имеет преимущества перед такими приложениями, как Zabbix, потому что он может автоматически настраивать графики из скрипта плагина (так что вам не нужно заранее отслеживать то, что вы отслеживаете).