Magento хостинг на бюджет

Я должен сделать настройку для Magento. Моим ограничением является прежде всего простота настройки и отказоустойчивость / отказоустойчивость. Кроме того, затраты являются проблемой. У меня есть три одинаковых физических сервера для выполнения работы. Каждый серверный узел имеет четырехъядерный процессор i7, 16 ГБ ОЗУ и 2x3 ТБ HD в конфигурации программного RAID 1. Каждый узел работает под управлением Ubuntu 12.04. прямо сейчас. У меня есть дополнительный IP-адрес, который можно направить на любой из этих узлов.

Магазин Magento имеет макс. 1000 товаров, 50% из которых являются комплектными. Я бы оценил это макс. 10 пользователей активны одновременно. Это приводит меня к выводу, что производительность здесь не является главным приоритетом.

Моя первая идея настройки

Один узел (lb) запускает nginx в качестве балансировщика нагрузки. Дополнительный IP-адрес используется с именем домена и по умолчанию направляется на этот узел. Nginx распределяет нагрузку поровну между двумя другими узлами (shop1, shop2). Shop1 и shop2 настроены одинаково: на каждом сервере работают Apache2 и MySQL. Mysqls настроены с репликацией master/slave.

Моя стратегия восстановления после отказа:

  • Lb fails => Маршрутизировать IP до shop1 (мастер MySQL), продолжить.
  • Shop1 терпит неудачу => Lb будет обрабатывать это автоматически, продвигать подчиненное MySQL на shop2 в мастерскую, перенастраивать Magento для использования shop2 для записи, продолжать.
  • Shop2 терпит неудачу => Lb будет обрабатывать это автоматически, продолжайте.

Это вменяемая стратегия? Кто-нибудь делал подобные настройки с Magento?

Моя вторая идея настройки

Другой способ сделать это - использовать drbd для хранения файлов данных MySQL в shop1 и shop2. Я понимаю, что в этом сценарии только один экземпляр узла /MySQL может быть активным, а другой используется в качестве горячего резервирования. Поэтому в случае сбоя shop1 я запустил бы MySQL на shop2, направил IP на shop2 и продолжил. Мне это нравится, поскольку настройка MySQL проще, а узлы могут быть настроены на 99% одинаково. Так что в этом случае балансировщик нагрузки становится бесполезным, и у меня есть запасной сервер.

Моя третья идея установки

Третьим способом может быть репликация мастер-мастер баз данных MySQL. Однако, по моему мнению, это может быть сложно, так как Magento не собирается для этого сценария (например, конфликтующие идентификаторы для новых строк). Я не буду этого делать, пока не услышу о рабочем примере.

Не могли бы вы дать мне совет, по какому маршруту следовать? Кажется, нет одного "хорошего" способа сделать это. Например, я читаю сообщения в блоге, в которых описывается настройка MySQL master/slave для Magento, но в других местах я читал, что данные могут дублироваться, когда ведомый отстает от master (например, при размещении заказа клиент может быть создан дважды). Я как бы потерялся здесь.

2 ответа

ПОЦЕЛУЙ

Держите это просто глупо.

Я как бы потерялся здесь.

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

Во-первых, давайте обратимся к оборудованию

Ссылка: https://www.sonassihosting.com/help/magestack/cpu-sizing/

а) Стандартный демонстрационный магазин Magento способен обеспечить примерно 230 уникальных устройств на ГГц в час.

b) Типичный интернет-магазин с активностью пользователя-администратора, деятельностью по разработке, добавлением / удалением продукта может видеть это снижение примерно на 100%, до 115 уникальных значений на ГГц в час.

Используя вашу цифру 100 активных посетителей в любой момент времени,

hourly_hits = (60 / time_on_site (mins)) * concurrent_users

Итак, мы предполагаем, что среднее по отрасли время на сайте составляет 8 минут и 8 просмотров страниц за посещение.

hourly_hits = (60 / 8) * 100
hourly_hits = (7.5) * 100
hourly_hits = 750 

Что дает цифру в 750 уникальных посетителей в час, или около 7500 уникальных посетителей в день.

Для поддержки 750 посетителей в час на скорости 115 уникальных единиц / ГГц - вам потребуется эквивалент 7x 1 ГГц процессорных ядер. Итак, давайте предположим, что ваш i7 Quad Core имеет частоту 2,5 ГГц, что в совокупности даст 10 ГГц.

Во-вторых, давайте обратимся к вашей конфигурации

Какова ваша цель?

  1. Высокая доступность
  2. надежность
  3. Простота администрирования
  4. Спектакль
  5. Масштабируемость

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

Мастер-Мастер - это кошмар конфигурации, и вы не получаете никакой выгоды от этого. Magento НЕ связан MySQL, по крайней мере. См. Что я должен поставить на мою большую машину? Magento Веб-сервер базы данных Magento?

И если вы не планируете делать ВСЕ в своей архитектуре избыточным, т.е.

  1. Связанные сетевые интерфейсы
  2. Переключатели A+B
  3. Брандмауэры A+B
  4. A+B раздельное питание от разных ИБП
  5. Многосетевое соединение в восходящем направлении

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

Как бы мы это сделали

Кто-нибудь делал подобные настройки с Magento?

В слове. Да.

Мы настраиваем что угодно, от одного сервера до n серверы в MageStack - путем контейнерирования каждого узла.

Таким образом, в вашем случае мы обычно настраиваем следующее (при условии, что вы запросили HA).

**Server 1**        **Server 2**        **Server 3**
LB  (m)    <==>     LB  (s)             
Web (m)             Web (m)             Web (m)
                    DB  (s)    <==>     DB  (m)

Виртуальные серверы LB и DB будут иметь свои корневые разделы на зеркале DRBD (представлено <==>). Веб-узлы будут использовать либо общее хранилище NFS, либо, чаще, репо на живых веб-узлах.

Просто чтобы сослаться на ответ здесь Как организовать веб-серверы с Varnish?

Наша типичная архитектура

lvs (initial ssl load balancing)
 -> pound (ssl-unwrapping) 
 -> varnish (caching) 
 -> haproxy (load balancing) 
 -> nginx (static content) 
 -> php (dynamic content) 
 -> mysql (db)

Heartbeat будет поддерживать проверки работоспособности между компьютерами и обеспечивать восстановление после отказа IP-адреса и запускать / останавливать соответствующие виртуальные серверы.

Таким образом, результирующая контейнерная архитектура будет выглядеть следующим образом... (извините за графическое изображение, я выкинул его из маркетингового PDF).

Пример конфигурации MageStack

Как я бы порекомендовал вам сделать это

Не используйте master/slave, не используйте DRBD и просто держите его действительно, очень просто - так что вам легко управлять и отлаживать, когда что-то не работает.

**Server 1**        **Server 2**        **Server 3**
LB                           
Web                 Web                 Web 
                                        DB  

Таким образом, вы получаете распределение нагрузки и полное использование оборудования. В худшем случае - если сервер 1 или сервер 3 выйдет из строя - вы извлекаете жесткие диски и помещаете их в сервер 2. С помощью удаленных рук на контроллере домена - это можно сделать в течение ~5 минут. Это будет чертовски простой в управлении сайт, это будет означать, что вам не нужно будет создавать 30-страничный документ о конфигурации машин и процедурах учета заданий, и на настройку уйдет значительно меньше времени.

У нас есть серверы с временем безотказной работы более 3 лет, поэтому следует учитывать, как часто происходит отказ оборудования на уровне сервера. Чаще всего, наиболее частая причина проблем на сервере - просто из-за хитрой конфигурации программного обеспечения.

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

В итоге

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

Один сервер?

Я бы никогда не рекомендовал решение, содержащее SPoF (единую точку отказа) для электронной коммерции.

В настоящее время я работаю над руководством по настройке сервиса Amazon Elastic Beanstalk, которое позволит вам автоматически масштабировать по всем измерениям, оплачивая только те ресурсы, которые вы фактически используете.

Конечно, это все мультизоны и имеет встроенную избыточность и аварийное переключение:)

Техническое обслуживание очень простое - и вы можете обновить ваш Magento либо напрямую, используя инструменты командной строки AWS и git, либо загрузив zip-файл вашего приложения Magento в консоль AWS, - это не так просто!

Другие вопросы по тегам