Я пытаюсь осмыслить концепцию балансировки нагрузки, чтобы обеспечить доступность и избыточность, чтобы пользователи были довольны, когда что-то пошло не так, а не балансировку нагрузки, чтобы предложить невероятную скорость миллионам пользователей.
У нас ограниченный бюджет, и мы стараемся придерживаться того, что достаточно знаний, поэтому запуск Apache на Ubuntu VPS кажется стратегией, пока какой-то известный поисковик не завладеет нами ( субботняя ирония включена, пожалуйста, обратите внимание ).
По крайней мере, для меня это полные джунгли различных доступных решений. Собственные Apache mod_proxy и HAproxy - это два, которые мы нашли по быстрому поиску в Google, но, имея нулевой опыт балансировки нагрузки, я понятия не имею, что подойдет для нашей ситуации или на что мы будем обращать внимание при выборе решения для решения нашей проблемы. проблемы доступности.
Какой для нас лучший вариант? Что мы должны сделать, чтобы обеспечить высокую доступность, оставаясь в рамках наших бюджетов?
источник
Ответы:
Решение, которое я использую, и которое может быть легко реализовано с помощью VPS, заключается в следующем:
На мой предвзятый взгляд, эта арка имеет следующие преимущества:
В вашем случае наличие физически разделенных VPS - хорошая идея, но затрудняет совместное использование ip. Цель состоит в том, чтобы создать отказоустойчивую избыточную систему и некоторые конфигурации для балансировки нагрузки / завершения HA, добавляя единую точку отказа (например, единый балансировщик нагрузки для получения всего трафика).
Я также знаю, что вы спрашивали об apache, но в те дни у нас есть специальные инструменты, лучше подходящие для работы (например, nginx и лак). Оставьте Apache для запуска приложений на бэкэнде и обслуживайте его с помощью других инструментов (не то, чтобы Apache не мог правильно распределить нагрузку или выполнить обратное проксирование, это просто вопрос разгрузки различных частей работы на большее количество служб, чтобы каждая часть могла работать хорошо это доля).
источник
HAproxy - хорошее решение. Конфиг довольно прост.
Вам понадобится еще один экземпляр VPS, чтобы сидеть перед как минимум двумя другими VPS. Таким образом, для балансировки нагрузки / переключения при сбое необходимо минимум 3 VPS
Несколько вещей для размышления также:
Прекращение SSL. Если вы используете HTTPS: // это соединение должно завершаться на балансировщике нагрузки, за балансировщиком нагрузки оно должно передавать весь трафик через незашифрованное соединение.
Файловое хранилище. Если пользователь загружает изображение, куда оно идет? Он просто сидит на одной машине? Вам нужно каким-то образом мгновенно обмениваться файлами между компьютерами - вы можете использовать сервис Amazon S3 для хранения всех ваших статических файлов или иметь другой VPS, который будет действовать как файловый сервер, но я бы порекомендовал S3, потому что он избыточен и безумно дешев.
Информация о сеансе каждая машина в вашей конфигурации балансировщика нагрузки должна иметь доступ к информации о сеансе пользователя, потому что вы никогда не знаете, на какую машину они попадут.
БД - у вас есть отдельный сервер БД? если у вас сейчас есть только одна машина, как вы будете уверены, что ваша новая машина будет иметь доступ к серверу БД - и если это отдельный сервер БД VPS, насколько это избыточно. Не обязательно имеет смысл иметь веб-интерфейс высокой доступности и единую точку отказа с одним сервером БД, теперь вам нужно учитывать репликацию БД и продвижение подчиненного устройства.
Так что я был на вашем месте, вот в чем проблема с веб-сайтом, который делает несколько сотен обращений в день к реальной операции. Это становится сложным быстро. Надеюсь, что это дало вам пищу для размышлений :)
источник
Мой голос за Linux Virtual Server в качестве балансировщика нагрузки. Это делает директора LVS единственной точкой отказа, а также узким местом, но
Стоимость может быть снижена, если первый директор находится на той же машине, что и первый узел LVS, а второй директор - на той же машине, что и второй узел LVS. Третий и последующие узлы являются чистыми узлами, без последствий для LVS или HA.
Это также позволяет вам свободно запускать любое программное обеспечение веб-сервера, которое вам нравится, поскольку перенаправление происходит ниже уровня приложения.
источник
Как насчет этой цепочки?
round robin dns> haproxy на обеих машинах> nginx для разделения статических файлов> apache
Возможно также используйте ucarp или heartbeat, чтобы haproxy всегда отвечал. Stunnel будет сидеть перед haproxy, если вам тоже нужен SSL
источник
Вы можете рассмотреть возможность использования надлежащего программного обеспечения для кластеризации. RedHat's (или CentOS) Cluster Suite или Oracle ClusterWare . Их можно использовать для настройки активно-пассивных кластеров, а также для перезапуска служб и сбоя между узлами при возникновении серьезных проблем. Это по сути то, что вы ищете.
Все эти кластерные решения включены в соответствующие лицензии ОС, так что вы, вероятно, клевые по стоимости. Они требуют некоторого общего хранилища - либо монтирования NFS, либо физического диска, к которому получают доступ оба узла с кластерной файловой системой. Примером последнего могут быть диски SAN с разрешенным доступом нескольких хостов, отформатированные в OCFS2 или GFS . Я считаю, что вы можете использовать общие диски VMWare для этого.
Программное обеспечение кластера используется для определения «сервисов», которые работают на узлах постоянно или только когда этот узел «активен». Узлы связываются через пульс, а также контролируют эти сервисы. Они могут перезапустить их, если обнаружат сбои, и перезагрузить, если их невозможно исправить.
В основном вы должны настроить один «общий» IP-адрес, на который будет направляться трафик. Тогда apache и любые другие необходимые службы также могут быть определены и работать только на активном сервере. Общий диск будет использоваться для всего вашего веб-контента, любых загруженных файлов и ваших каталогов конфигурации Apache. (с httpd.conf и т. д.)
По моему опыту, это работает невероятно хорошо.
- Кристофер Карел
источник
Оптимальное распределение нагрузки может быть очень дорогим и сложным. Базовая балансировка нагрузки должна просто гарантировать, что каждый сервер обслуживает примерно одинаковое количество обращений в любое время.
Самый простой способ распределения нагрузки - предоставить несколько записей A в DNS. По умолчанию IP-адрес будет настроен методом циклического перебора. Это приведет к тому, что пользователи будут относительно равномерно распределены по серверам. Это хорошо работает для сайтов без гражданства. Немного более сложный метод требуется, когда у вас есть сайт с состоянием.
Для обработки требований к состоянию вы можете использовать перенаправления. Дайте каждому веб-серверу альтернативный адрес, такой как www1, www2, www3 и т. Д. Перенаправьте начальное соединение www на альтернативный адрес хоста. Таким образом, у вас могут возникнуть проблемы с закладками, но они должны быть равномерно распределены по серверам.
Альтернативно, использование другого пути для указания того, какой сервер обрабатывает сеанс с отслеживанием состояния, позволило бы проксировать сеансы, которые переключили хост на исходный сервер. Это может быть проблемой, когда сеанс для неисправного сервера прибывает на сервер, который перешел с неисправного сервера. Однако, за исключением программного обеспечения для кластеризации, в любом случае состояние будет отсутствовать. Из-за кэширования в браузере у вас может не быть большого количества сеансов, меняющих серверы.
Отказоустойчивость может быть обработана путем настройки сервера на получение IP-адреса отказавшего сервера. Это минимизирует время простоя в случае сбоя сервера. Без программного обеспечения кластеризации сеансы с сохранением состояния будут потеряны в случае сбоя сервера.
Без аварийного переключения пользователи будут испытывать задержку, пока их браузер не переключится на следующий IP-адрес.
Использование служб Restful, а не сеансов с состоянием, должно устранить проблемы с кластеризацией на внешнем интерфейсе. Проблемы с кластеризацией на стороне хранилища все еще будут применяться.
Даже с балансировщиками нагрузки перед серверами у вас, скорее всего, будет круговой DNS перед ними. Это обеспечит использование всех ваших балансировщиков нагрузки. Они добавят еще один слой к вашему дизайну, с дополнительной сложностью и еще одной точкой отказа. Тем не менее, они могут обеспечить некоторые функции безопасности.
Лучшее решение будет зависеть от соответствующих требований.
Внедрение серверов изображений для обслуживания контента, такого как изображения, файлы CSS и другой статический контент, может облегчить загрузку серверов приложений.
источник
Я обычно использую пару идентичных машин OpenBSD:
OpenBSD легок, стабилен и достаточно безопасен - идеально подходит для сетевых сервисов.
Для начала я рекомендую настройку layer3. Это позволяет избежать сложностей настройки брандмауэра (PF). Вот пример файла /etc/relayd.conf, который показывает настройку простого балансировщика нагрузки реле с мониторингом серверных веб-серверов:
источник
Вы дали ec2 с cloudfoundry или, возможно, Elastic beanstalk или просто старый AWS, автоматически масштабирующий мысль. Я использую это, и оно довольно хорошо масштабируется, а эластичность может увеличиваться / уменьшаться без какого-либо вмешательства человека.
Учитывая, что вы говорите, что у вас нулевой опыт балансировки нагрузки, я бы посоветовал эти варианты, так как они требуют минимального "поджаривания" мозга, чтобы начать работу.
Это может быть лучшее использование вашего времени.
источник
pound
до недавнего времени, когда, я полагаю, они внедрили nginx. Обратите внимание, что nginx может быть реализован для замены Apache или просто как интерфейс для Apache.