Как установить Varnish и выполнить бенчмарк веб-сервера?

Задумайтесь на минуту о том, что произошло, когда вы перешли на эту страницу. Вы перешли по ссылке, которую получили в рассылке, или по ссылке на главной странице itshaman.ru и попали на эту статью.

В нескольких словах, вы (или ваш браузер) послали HTTP-запрос на веб-сервер, на котором расположен этот сайт, а сервер отправил HTTP-ответ.

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

И именно здесь Varnish, высокопроизводительный HTTP-ускоритель и обратный прокси, может спасти ситуацию. В этой статье я объясню, как установить и использовать Varnish в качестве внешнего интерфейса для Apache или Nginx, чтобы кэшировать HTTP-ответы быстрее и без дополнительной нагрузки на веб-сервер.

Но поскольку Varnish обычно хранит свой кэш в памяти, а не на диске, нам нужно быть осторожными и ограничить пространство оперативной памяти, выделенное для кэширования.

Как работает Varnish?

Установка Varnish Cache на Linux-сервере

Этот пост предполагает, что у вас установлен сервер LAMP или LEMP. Если нет, пожалуйста, установите один из этих стеков, прежде чем продолжить.

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

Также обратите внимание, что репозитории проекта обеспечивают поддержку только 64-битных систем, тогда как для 32-битных машин вам придется обратиться к официально поддерживаемым репозиториям вашего дистрибутива.

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

Установка Varnish в Debian-based Linux

В дистрибутивах Debian вы можете установить Varnish с помощью команды apt, как показано на рисунке.

apt update
apt install varnish

Установка Varnish в Linux на базе RHEL

На дистрибутивах на базе RHEL, таких как CentOS, Rocky и AlmaLinux, вам нужно включить репозиторий EPEL перед установкой Varnish с помощью команды yum, как показано на рисунке.

yum install epel-release
yum update
yum install varnish 

Если установка завершится успешно, вы получите одну из следующих версий Varnish в зависимости от вашего дистрибутива:

varnishd -V varnishd (varnish-6.5.1 revision 1dae23376bb5ea7a6b8e9e4b9ed95cdc9469fb64)

Наконец, вам нужно запустить Varnish вручную, если процесс установки не сделал этого за вас, и включить его запуск при загрузке.

systemctl start varnish
systemctl enable varnish
systemctl status varnish

По умолчанию порт 6081 используется службой varnish, и вы можете убедиться в этом, выполнив следующую команду netstat.

netstat -tunlp | grep 6081

Настройка кэша Varnish в Linux

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

  1. Изменить порт по умолчанию 6081, на котором Varnish слушает, на 80.
  2. Изменить порт по умолчанию, на котором веб-сервер слушает, на 8080 вместо 80.
  3. Перенаправить входящий трафик с Varnish на веб-сервер. К счастью, Varnish делает это автоматически после выполнения шагов 1 и 2.

Изменение порта Varnish

Процесс varnishd управляется systemd и имеет свой файл /usr/lib/systemd/system/varnish.service, который содержит конфигурацию Varnish по умолчанию.

Здесь нам нужно изменить порт varnish по умолчанию с 6081 на порт 80 и размер кэша на 1GB, как показано, выполнив следующую команду, которая откроет файл запуска службы в редакторе, как показано на рисунке.

Примечание: Вы можете изменить объем памяти в соответствии с вашими аппаратными ресурсами или выбрать сохранение кэшированных файлов на диск.

sudo systemctl edit --full varnish

После внесения изменений в файл /etc/systemd/system/varnish.service, вам необходимо перезагрузить демон Systemd, выполнив следующую команду:

systemctl daemon-reload

Изменить порт Apache или Nginx

После изменения порта Varnish, теперь вам нужно изменить порт вашего Apache или Nginx веб-сервера со стандартного 80 на наиболее распространенный сетевой порт, то есть 8080.

---------- On Debian-based Systems ---------- 
nano /etc/apache2/ports.conf [On Apache]
/etc/nginx/sites-enabled/default  [On Nginx]
---------- On RHEL-based Systems ----------
vi /etc/httpd/conf/httpd.conf [On Apache]
vi /etc/nginx/nginx.conf [On Nginx] 

После того, как вы сделали изменения, не забудьте перезапустить Varnish и веб-сервер.

systemctl restart varnish
---------- On Debian-based Systems ----------
systemctl restart apache2
systemctl restart nginx
---------- On RHEL-based Systems ----------
systemctl restart httpd
systemctl restart nginx 

Тестирование кэша Varnish в Linux

Первый тест заключается в выполнении HTTP запроса с помощью команды curl и проверке того, что он обрабатывается Varnish:

curl -I http://localhost

Varnish также включает два удобных инструмента:

  • Просмотр логов Varnish в реальном времени – varnishlog.
  • Просмотр статистики кэша Varnish – varnishstat.

В качестве второго теста, в следующем скринкасте, мы покажем и журналы, и статистику на сервере CentOS (dev1, верхняя половина экрана) и на сервере Debian (dev2, нижняя половина экрана) по мере отправки HTTP запросов и получения ответов.

Бенчмарк производительности веб-сервера

Наш третий и последний тест будет состоять в бенчмарке как веб-сервера, так и Varnish с AB тесированием и сравнении времени ответа и загрузки процессора в каждом случае.

В этом конкретном примере мы будем использовать сервер CentOS, но вы можете использовать любой дистрибутив и получить аналогичные результаты. Следите за load average вверху и строкой Requests per second в выводе ab.

При использовании ab, нам будет отправлено 50 (-c 50) одновременных запросов одновременно и повторен тест 1000000 раз (обозначается -n 1000000). Varnish вернет большее количество запросов в секунду и гораздо меньшую среднюю нагрузку.

Важно: Помните, что Varnish прослушивает порт 80 (HTTP порт по умолчанию), в то время как Apache прослушивает порт 8080. Вы также можете обратить внимание на количество времени, необходимое для завершения каждого теста.

ab -c 50 -n 100000 http://localhost/index.html

Вывод

В этой статье мы рассмотрели, как установить Varnish кэш перед веб-сервером, Apache или Nginx. Обратите внимание, что мы не углублялись в конфигурационный файл default.vcl, который позволяет нам дополнительно настроить политику кэширования.

Зарубин Иван Эксперт по Linux и Windows

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

Похожие статьи

Комментарии (0)