2008-11-04 17 views
45

В течение нескольких дней мы сражались с HAProxy в Amazon EC2; опыт до сих пор был отличным, но мы застряли на сжатии большей производительности из балансировки нагрузки программного обеспечения. Мы не являемся обычным свиданием в сети Linux (обычно мы являемся магазином .NET), но мы до сих пор придерживались своих собственных целей, пытаясь установить правильные ulimits, проверять сообщения ядра и tcpdumps для любых нарушений. До сих пор мы достигли плато около 1700 запросов/сек, после чего количество тайм-аутов клиентов изобилует (для этой цели мы использовали и настраивали httperf). Сотрудник и я слушали самый последний подкаст Stack Overflow, в котором основатели Reddit отмечают, что весь их сайт работает с одним узлом HAProxy и что он пока не стал узким местом. Ack! Либо есть не так много одновременных запросов, мы делаем что-то ужасно неправильно, или общий характер EC2 ограничивает сетевой стек экземпляра Ec2 (мы используем большой тип экземпляра). Учитывая тот факт, что и Джоэл, и основатели Reddit согласны с тем, что сеть, вероятно, будет ограничивающим фактором, возможно ли это ограничение, которое мы видим?Балансировка нагрузки в Amazon EC2?

Любые мысли очень ценятся!

Редактировать Похоже, что фактическая проблема не была, по сути, узлом балансировки нагрузки! В этом случае виновником на самом деле были узлы, работающие с httperf. Поскольку httperf строит и разрывает сокет для каждого запроса, он тратит на процессор большое количество процессорного времени. Когда мы столкнулись с частотой запросов выше, TCP FIN TTL (по умолчанию 60 с) сохранял сокеты слишком долго, а значение по умолчанию для ip_local_port_range было слишком низким для этого сценария использования. В принципе, через несколько минут клиентского (httperf) узла постоянно создавал и уничтожал новые сокеты, количество неиспользуемых портов закончилось, а последующие «запросы» были обнулены на этом этапе, что дало низкие номера запросов/сек и большую сумму ошибок.

Мы также посмотрели nginx, но мы работаем с RighScale, и у них есть сценарии для загрузки для HAProxy. О, и у нас слишком ограниченный срок (конечно), чтобы отключить компоненты, если это не будет абсолютно необходимым. К счастью, находясь на AWS, мы можем тестировать другую установку, используя nginx параллельно (если это оправдано), и сделать коммутатор на ночь позже.

This page хорошо описывает каждую из переменных sysctl (в этом случае были настроены параметры ip_local_port_range и tcp_fin_timeout).

+3

Марк, вы должны написать свой опыт с настройкой этого материала и разместить их где-нибудь (есть ли в вашей компании блог?). Похоже, это может быть полезно многим людям. Упрощенный вопрос. – SquareCog 2008-11-07 06:55:56

+0

Ваша ссылка не работает. – Ztyx 2015-05-19 19:20:14

+0

@Ztyx спасибо! Просто обновил его. Я пошел на поиски более нового, более современного источника, похоже, что на исходном сайте по-прежнему довольно высокий PageRank, а контент по-прежнему приличный, поэтому я просто исправляю его, чтобы отразить новый URL. – 2015-05-20 21:27:35

ответ

9

Не совсем ответ на ваш вопрос, но nginx и фунт оба имеют хорошую репутацию как балансировщики нагрузки. Wordpress просто switched to nginx с хорошими результатами.

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

1

Я бы посмотрел на переключение на балансировщик нагрузки за пределами площадки, а не в облаке и запустил что-то вроде IPVS поверх него. [Причина, по которой это было бы от облака амазонки, из-за ядра] Если Amazon не ограничивает исходный IP-пакетов, выходящих из него, вы можете пойти с однонаправленным механизмом балансировки нагрузки. Мы делаем что-то подобное и получаем около 800 000 одновременных запросов [хотя мы не имеем дело с латентностью]. Я также сказал бы использовать «ab2» (скамья apache), так как он немного удобен для пользователя и проще в моем скромном мнении.

20

Не отвечающий на вопрос напрямую, но EC2 теперь поддерживает балансировку нагрузки через Elastic Load Balancing вместо того, чтобы запускать собственный балансировщик нагрузки в экземпляре EC2.

EDIT: Маршрут Amazon 53 Служба DNS теперь предлагает способ указать домен верхнего уровня в ELB с записью «alias». Поскольку Amazon знает текущий IP-адрес ELB, он может вернуть A-запись для этого текущего IP-адреса, вместо того, чтобы использовать запись CNAME, хотя время от времени можно менять IP-адрес.

3

Да, вы можете использовать балансировщик нагрузки за пределами площадки .. и на голом металле LVS - отличный выбор, но ваша латентность будет ужасной! Ходят слухи, что Amazon собирается исправить проблему CNAME. Однако вряд ли они добавят https, indepth или пользовательские проверки работоспособности, агенты обратной связи, сопоставление URL-адресов, вставка файлов cookie (и некоторые люди с хорошей архитектурой тоже скажут совершенно прав.) Однако именно поэтому Scalr, RightScale и другие используют HAProxy, как правило, два из за заглавной записи DNS. Здесь, на Loadbalancer.org, мы как раз собираемся запустить нашу собственную балансирующую нагрузку на EC2: http://blog.loadbalancer.org/ec2-load-balancer-appliance-rocks-and-its-free-for-now-anyway/ Мы планируем использовать сценарии SSH для интеграции с автомасштабированием точно так же, как это делает Rightscale, любые комментарии, оцененные в блоге. Thanks

0

Даже если ваша проблема решена. KEMP Technologies теперь имеет полностью раздутый балансировщик нагрузки для AWS. Мог бы сэкономить вам немного хлопот.