Перейти к содержанию

Настройка Unix-сокетов и нескольких рабочих процессов

Настройка Unix-сокетов для веб-сервиса

Выполненные ранее настройки показывают, как запустить веб-сервис tessa с привязкой к порту localhost:5000, после чего веб-серверы Nginx или Apache работают как reverse proxy на этот порт. Работу веб-сервиса можно ускорить при высокой нагрузке, если настроить использование unix-сокетов. Также это позволяет упростить настройку нескольких рабочих процессов.

При настройке сервиса tessa необходимо указать имя сокета tessa.sock в настройке ExecStart. При условии, что настройки по ссылке уже выполнены, откройте для редактирования конфигурационный файл сервиса:

sudo nano /etc/systemd/system/tessa.service

Добавьте перед строкой ExecStart следующую:

ExecStartPre=/bin/rm -f /home/tessa/tessa/sockets/tessa.sock

Замените существующую строку ExecStart на следующую:

ExecStart=/home/tessa/tessa/web/Tessa.Web.Server /home/tessa/tessa/sockets/tessa.sock

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Для Calculate Linux и системы инициализации OpenRC:

sudo nano /etc/init.d/tessa

Замените строку с настройкой DAEMONARGS на следующую строку:

DAEMONARGS="/home/tessa/tessa/sockets/tessa.sock"

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Для всех дистрибутивов:

Создайте папку, содержащую файл сокета. Доступ на чтение и на запись должен быть у пользователя tessa и у группы www-data (или у того пользователя, от имени которого запускаются сервис tessa и веб-серверы Nginx или Apache).

sudo usermod -a -G www-data tessa

mkdir ~/tessa/sockets

sudo chgrp www-data ~/tessa/sockets

sudo chmod g+rwxs ~/tessa/sockets

Перезагрузите конфигурационные файлы сервиса и перезапустите веб-сервис tessa:

sudo systemctl daemon-reload

sudo systemctl restart tessa

Если всё настроено правильно, то при просмотре статуса сервиса будет выведен зелёный кружок и отладочные сообщения.

sudo systemctl status tessa

Если информация по сервису не закроется сама, нажмите q.

Для Calculate Linux и системы инициализации OpenRC:

sudo /etc/init.d/tessa restart

Проверьте статус сервиса, отобразив содержимое файла лога:

cat ~/tessa/logs/tessa.log

Если последняя отображённая строка выглядит как “Application started”, то сервис успешно перезапущен.

Настройка Unix-сокетов для веб-сервера Nginx

Если вы используете веб-сервер Nginx, то помимо настройки веб-сервиса также требуется настроить проксирование трафика по сокету к веб-сервису tessa.

Откройте конфигурационный файл:

sudo nano /etc/nginx/sites-available/default

Найдите строку:

proxy_pass http://localhost:5000/;

Замените её на:

proxy_pass http://unix:/home/tessa/tessa/sockets/tessa.sock:/;

Important

В случае, если вы используете PathBase, удостоверьтесь, что он так же передается и в proxy_pass (например: http://unix:/home/tessa/tessa/sockets/tessa.sock:/awesome_path_base; ).

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Перезапустите веб-сервер Nginx:

sudo systemctl restart nginx

Теперь проверьте функционирование системы.

Настройка Unix-сокетов для веб-сервера Apache

Если вы используете веб-сервер Apache, то помимо настройки веб-сервиса также требуется настроить проксирование трафика по сокету к веб-сервису tessa.

Откройте конфигурационный файл:

sudo nano /etc/apache2/sites-available/000-default.conf

Найдите строку:

ProxyPass / http://localhost:5000/ ProxyPassReverse / http://localhost:5000/

Замените её на:

ProxyPass / unix:/home/tessa/tessa/sockets/tessa.sock|http://localhost/ ProxyPassReverse / unix:/home/tessa/tessa/sockets/tessa.sock|http://localhost/

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Доступ к файлу сокета /home/tessa/tessa/sockets/tessa.sock должен иметь одновременно и веб-сервис tessa, и веб-сервер Apache. Для этого необходимо настроить права доступа. Для упрощения настройки, для запуска веб-сервиса tessa использовалась учётная запись пользователя tessa. Веб-сервер Apache по умолчанию запускается от имени группы www-data. Настройте запуск Apache от имени того же пользователя tessa, чтобы доступ к файлу сокета был гарантирован без дополнительных настроек.

Tip

Для повышенной безопасности веб-сервера настройте права для запуска веб-сервиса tessa от имени группы www-data, тогда не следует изменять пользователя для веб-сервера Apache, пропустите следующие настройки.

Откройте конфигурационный файл envvars:

sudo nano /etc/apache2/envvars

Найдите строки:

export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data

Замените в них группу www-data на учётную запись пользователя tessa:

export APACHE_RUN_USER=tessa export APACHE_RUN_GROUP=tessa

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Также измените права доступа для следующих папок на пользователя tessa (укажите имя дважды через точку, если пользователь называется иначе):

sudo chown tessa.tessa -R /var/lock/apache2 /var/log/apache2

Перезапустите веб-сервер Apache:

sudo systemctl restart apache2

Перезапустите веб-сервер Apache:

sudo systemctl restart apache2

Теперь проверьте функционирование системы.

Настройка нескольких рабочих процессов веб-сервиса

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

Остановите процесс веб-сервиса tessa, настроенный ранее, и отключите его автозапуск.

sudo systemctl stop tessa && sudo systemctl disable tessa

Tip

Если вы уже настроили и запустили веб-сервис для Unix-сокетов, то также явно удалите файл сокета, созданный веб-сервисом: sudo rm /home/tessa/tessa/sockets/tessa.sock

Если папка, содержащая файлы сокетов, ещё не создана, то создайте её. Доступ на чтение и на запись должен быть у пользователя tessa и у группы www-data (или у того пользователя, от имени которого запускаются сервис tessa и веб-серверы Nginx или Apache).

sudo usermod -a -G www-data tessa

mkdir ~/tessa/sockets

sudo chgrp www-data ~/tessa/sockets

sudo chmod g+rwxs ~/tessa/sockets

Создайте шаблон SystemD-сервиса, который позволяет запускать несколько сервисов параллельно. В этом примере каждый сервис работает для своего файла .sock.

sudo nano /etc/systemd/system/tessa@.service

Вставьте следующее содержимое:

[Unit] Description=Syntellect Tessa process %i

[Service] WorkingDirectory=/home/tessa/tessa/web ExecStartPre=/bin/rm -f /home/tessa/tessa/sockets/tessa.%i.sock ExecStart=/home/tessa/tessa/web/Tessa.Web.Server /home/tessa/tessa/sockets/tessa.%i.sock PIDFile=/var/run/tessa.%i.pid Restart=always RestartSec=10 SyslogIdentifier=tessa.%i User=tessa UMask=002 Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install] WantedBy=multi-user.target

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Теперь настройте автозапуск нескольких процессов веб-сервиса и запустите их. В примере ниже указано 4 процесса, но вы легко можете увеличить их количество до требуемого. Мы рекомендуем запускать один процесс на каждое физическое ядро CPU (без учёта hyper-threading).

sudo systemctl enable tessa@{1..4} && sudo systemctl start tessa@{1..4}

Статус всех процессов можно вывести командой:

sudo systemctl status tessa@{1..4}

Если для всех процессов выведен зелёный кружок, то веб-сервис настроен корректно. Используйте стрелки для прокрутки вниз. Чтобы закрыть окно, нажмите q.

Настройка нескольких рабочих процессов для веб-сервера Nginx

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

Откройте конфигурационный файл:

sudo nano /etc/nginx/sites-available/default

Добавьте в его начало перечисление всех файлов .sock в зависимости от количества настроенных процессов. Для заданных выше 4 процессов настройки выглядят так:

upstream tessa { ip_hash; server unix:/home/tessa/tessa/sockets/tessa.1.sock; server unix:/home/tessa/tessa/sockets/tessa.2.sock; server unix:/home/tessa/tessa/sockets/tessa.3.sock; server unix:/home/tessa/tessa/sockets/tessa.4.sock; }

Note

Указанный параметр ip_hash позволяет “привязывать” сессии пользователей к рабочим процессам, чтобы последовательные запросы от одного и того же пользователя переходили к одному и тому же процессу. Это ускоряет обработку запросов для веб-сервиса tessa.

Найдите настройку proxy_pass:

proxy_pass ...;

И замените её на:

proxy_pass http://tessa;

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Настройте количество рабочих процессов веб-сервера Nginx, каждый из которых будет проксировать трафик к одному из процессов веб-сервиса tessa.

Откройте конфигурационный файл nginx.conf:

sudo nano /etc/nginx/nginx.conf

Найдите строку вида:

worker_processes ...;

Укажите такое же количество рабочих процессов, которые указали ранее. В данном примере это 4 процесса:

worker_processes 4;

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Перезапустите веб-сервер Nginx:

sudo systemctl restart nginx

Теперь проверьте функционирование системы.

Настройка нескольких рабочих процессов для веб-сервера Apache

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

Установите плагин с алгоритмом балансировщика запросов:

sudo a2enmod lbmethod_byrequests

Откройте конфигурационный файл:

sudo nano /etc/apache2/sites-available/000-default.conf

Добавьте в его начало перечисление всех файлов .sock в зависимости от количества настроенных процессов. Для каждого из процессов необходимо указать уникальный адрес сервиса. Если все рабочие процессы должны проксироваться на один и тот же адрес, например localhost, необходимо добавить для них алиасы в hosts: localhost2, localhost3, localhost4 и т.п.

Для заданных выше 4 процессов настройки выглядят так:

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED

<Proxy "balancer://tessa"> BalancerMember unix:/home/tessa/tessa/sockets/tessa.1.sock|http://localhost route=1 BalancerMember unix:/home/tessa/tessa/sockets/tessa.2.sock|http://localhost2 route=2 BalancerMember unix:/home/tessa/tessa/sockets/tessa.3.sock|http://localhost3 route=3 BalancerMember unix:/home/tessa/tessa/sockets/tessa.4.sock|http://localhost4 route=4 ProxySet lbmethod=byrequests stickysession=ROUTEID </Proxy>

Note

Указанные настройки stickysession=ROUTEID, а также настройки add Set-Cookie и route=X позволяют “привязывать” сессии пользователей к рабочим процессам, чтобы последовательные запросы от одного и того же пользователя переходили к одному и тому же процессу. Это ускоряет обработку запросов для веб-сервиса tessa.

Ниже найдите строки вида:

ProxyPass / http://localhost:5000/ ProxyPassReverse / http://localhost:5000/

И замените их на:

ProxyPass / balancer://tessa/ ProxyPassReverse / balancer://tessa/

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Теперь откройте файл /etc/hosts на редактирование:

sudo nano /etc/hosts

Укажите псевдонимы для вашего сервера (в примере это localhost, доступный по адресу 127.0.0.1, для которого нужны псевдонимы для 4 серверов):

127.0.0.1 localhost localhost2 localhost3 localhost4

Сохраните и закройте файл: Ctrl+X, Y, Enter.

Перезапустите веб-сервер Apache:

sudo systemctl restart apache2

Теперь проверьте функционирование системы.

Back to top