Назад | Перейти на главную страницу

Производительность сервера (HAProxy, Nginx, SSL)

В последнее время я пытался определить, где производительность в нашей среде является узким местом.

Среда (каждый сервер - виртуальная машина Linux, 8 ядер, 32 ГБ ОЗУ):

Баланс нагрузки: 50

Веб-серверы (rsync): 51, 52, 54

БД (мастер-мастер MySQL 5.6): 56, 58

Я установил среду с балансировкой нагрузки с HAProxy для балансировки нагрузки и Nginx для завершения SSL на ...50. HAProxy прослушивает порт 80 и направляет трафик на ...51, 52 или 54. Он также прослушивает порт 3306 и направляет трафик между .._. 56 и 58 для балансировки нагрузки базы данных. Nginx прослушивает порт 443 и обрабатывает подтверждение SSL, перенаправляя фактический трафик на порт 80 на той же машине, где он обрабатывается HAProxy.

Эта настройка обрабатывает соединения без SSL со скоростью ~ 1000 / сек, но SSL-соединения обрабатываются со скоростью ~ 300 / сек.

Недавно я изменил среду, обновив нашу версию HAProxy до версии, которая может обрабатывать завершение SSL. HAProxy теперь прослушивает порт 80 и порт 443, обрабатывая квитирование SSL в последнем случае и перенаправляя трафик на веб-серверы: 51, 52 и 54. Производительность осталась примерно такой же, но конфигурация была намного проще.

Я смотрел верхнюю часть балансировщика нагрузки, и в любом случае, похоже, что на сервере почти нет нагрузки; порт 80 или 443 трафик. Веб-серверы, как и ожидалось, ломаются во время моих тестов порта 80, но они показывают очень небольшую нагрузку во время моих 443 тестов.

Есть ли что-нибудь, о чем вы знаете, что можно сделать, чтобы увеличить время отклика наших SSL-соединений?

Любые советы и предложения приветствуются, я бы хотел добиться максимальной производительности.

Спасибо всем!

Поместите более быстрые SSL-шифры в начало списка (конечно, те, которые соответствуют вашим требованиям безопасности)

Пример для haproxy

bind *:443 ssl crt /etc/ssl/... ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS:!AES256 prefer-server-ciphers ... 

Мои настройки на экземпляре nginx следующие

ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS:!AES256;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

Вы можете проверить скорость SSL-шифров, доступных на вашем балансировщике, например, с помощью

$ openssl speed