Архив метки: Software

Новая версия LXQt 1.1 уже вышла, узнайте что нового

После шести месяцев разработки анонсирован выпуск новой версии среды пользователя LXQt 1.1 (облегченная среда рабочего стола Qt), разработанная совместной командой разработчиков проектов LXDE и Razor-qt.

Интерфейс LXQt продолжает следовать классической организации рабочего стола с современным внешним видом, улучшающим взаимодействие с пользователем. LXQt позиционируется как легкое, модульное, быстрое и удобное продолжение настольных разработок Razor-qt и LXDE, вобравшее в себя лучшие черты обоих.



Основные новые возможности LXQt 1.1

В представленной новой версии подчеркивается, что файловый менеджер PCManFM-Qt предоставляет интерфейс DBus org.freedesktop.FileManager1что может использовать сторонние приложения, такие как Firefox и Chromium, для отображения файлов в каталогах и выполнять другие распространенные задачи с помощью родного файлового менеджера.

В меню «Файл» добавлен раздел «Недавние файлы» со списком файлов, с которыми пользователь недавно работал. В верхнюю часть контекстного меню каталога добавлен пункт «Открыть в терминале».



Эмулятор терминала QTerminal значительно улучшил функциональность закладок и решены проблемы в реализации выпадающего режима вызова терминала. Закладки можно использовать аналогично файлу ~/.bash_aliases, чтобы облегчить доступ к общим командам и файлам, которые трудно запомнить. Предусмотрена возможность редактирования всех закладок.

На приборной панели, когда плагин системного трея включен, значки системного трея теперь размещаются внутри области уведомлений (Уведомление о состоянии), которое решило проблемы с отображением панели задач при включенной панели автоматического скрытия. Для всех настроек панели и виджета предусмотрена кнопка сброса изменений в исходное состояние (Reset), а также возможность разместить сразу несколько областей с уведомлениями. Диалог настроек панели разделен на три части.



А новый компонент xdg-desktop-portal-lxqt с реализацией бэкенда для порталов Freedesktop (xdg-desktop-portal), который используется организовать доступ к ресурсам в среде пользователя из изолированных приложений. Например, порталы используются в некоторых приложениях, отличных от Qt, таких как Firefox, для управления диалоговым окном открытия файла LXQt.

Также отмечена улучшенная работа с темами, т.к. добавлена ​​новая тема и несколько дополнительных обоев, плюс добавлены дополнительные палитры Qt для соответствия темным темам LXQt, чтобы унифицировать внешний вид со стилями виджетов Qt, такими как Fusion (палитру можно изменить через «Настройки внешнего вида LXQt → Стиль виджета → Палитра Qt»).

Из других изменений которые выделяются из этой новой версии:



  • Улучшен интерфейс для настройки виджета для отображения содержимого каталога.
  • Диспетчер управления питанием (LXQt Power Manager) поддерживает отображение значков с процентом заряда батареи в системном трее.
  • Главное меню предлагает два новых макета элементов: Простой и Компактный, которые имеют только один уровень вложенности.
  • Доработан виджет определения цвета пикселей экрана (ColorPicker), в котором сохраняются последние выбранные цвета.
  • В конфигуратор сеанса (Настройки сеанса LXQt) добавлен параметр для установки глобальных параметров масштабирования экрана.
  • В конфигураторе в разделе Внешний вид LXQt есть отдельная страница для настройки стилей для GTK.
  • Улучшенные настройки по умолчанию. В главном меню включена возможность очистки поля поиска после выполнения действия.
  • Ширина кнопок на панели задач уменьшена.
  • Ярлыки на рабочем столе по умолчанию: «Пуск», «Сеть», «Компьютер» и «Корзина».
  • Тема по умолчанию была изменена на Clearlooks, а значок был установлен на Breeze.

На данный момент для работы требуется ветка Qt 5.15 (официальные обновления для этой ветки выпускаются только по коммерческой лицензии, тогда как неофициальные бесплатные обновления генерируются проектом KDE).



Миграция на Qt 6 еще не завершена и требует стабилизации библиотек KDE Frameworks 6. Также нет возможности использовать протокол Wayland, который официально не поддерживается, но есть успешные попытки запуска компонентов LXQt с помощью Mutter и XWayland Композитный сервер.

Узнать подробности о выпуске этой новой версии вы можете проверить их По следующей ссылке. 

Если вы заинтересованы в загрузке исходного кода и самостоятельной компиляции, вы должны знать, что это размещено на GitHub и распространяется под лицензиями GPL 2.0+ и LGPL 2.1+.




2022-04-16T18:44:45
приложений

GNU Coreutils 9.1 выходит с улучшениями, исправлениями и многим другим

Несколько дней назад было объявлено о доступности новой версии стабильный набор основных системных утилит GNU Coreutils 9.1, который включает в себя такие программы, как sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln, ls и т. д.

Coreutils (или GNU Core Utilities) — это программный пакет, разработанный проектом GNU который содержит несколько основных инструментов, таких как cat, ls и rm, необходимых для Unix-подобных операционных систем. Это комбинация трех предыдущих пакетов: файловых утилит (fileutils), утилит оболочки (shellutils) и утилит обработки текста (textutils).



Читать

Как обновить PostgreSQL с 13 до 14

Выпущена новая версия PostgreSQL 14 . Есть несколько способов обновить старую версию 13, и самый простой из них — использовать инструмент pg_upgrade . Вот краткое руководство для систем Ubuntu (или Debian). И, пожалуйста, не забудьте сделать резервную копию ваших данных!




Обновите пакеты и установите новый PostgreSQL 14.




sudo apt-get update
sudo apt-get install postgresql-14 postgresql-server-dev-14




Проверьте, нет ли различий в файлах конфигурации.




diff /etc/postgresql/13/main/postgresql.conf /etc/postgresql/14/main/postgresql.conf
diff /etc/postgresql/13/main/pg_hba.conf /etc/postgresql/14/main/pg_hba.conf




Остановите службу PostgreSQL.




sudo systemctl stop postgresql.service




Войдите как postgresпользователь.




sudo su - postgres




Проверьте кластеры (обратите внимание на --checkаргумент, это не изменит никаких данных).




/usr/lib/postgresql/14/bin/pg_upgrade 
  --old-datadir=/var/lib/postgresql/13/main 
  --new-datadir=/var/lib/postgresql/14/main 
  --old-bindir=/usr/lib/postgresql/13/bin 
  --new-bindir=/usr/lib/postgresql/14/bin 
  --old-options '-c config_file=/etc/postgresql/13/main/postgresql.conf' 
  --new-options '-c config_file=/etc/postgresql/14/main/postgresql.conf' 
  --check




Перенесите данные (без --checkаргумента).




/usr/lib/postgresql/14/bin/pg_upgrade 
  --old-datadir=/var/lib/postgresql/13/main 
  --new-datadir=/var/lib/postgresql/14/main 
  --old-bindir=/usr/lib/postgresql/13/bin 
  --new-bindir=/usr/lib/postgresql/14/bin 
  --old-options '-c config_file=/etc/postgresql/13/main/postgresql.conf' 
  --new-options '-c config_file=/etc/postgresql/14/main/postgresql.conf'




Вернитесь к обычному пользователю.




exit




Поменяйте местами порты для старой и новой версий PostgreSQL.




sudo vim /etc/postgresql/14/main/postgresql.conf
# ...and change "port = 5433" to "port = 5432"

sudo vim /etc/postgresql/13/main/postgresql.conf
# ...and change "port = 5432" to "port = 5433"




Запустите службу PostgreSQL.




sudo systemctl start postgresql.service




Войдите postgresснова как пользователь.




sudo su - postgres




Проверьте новую версию PostgreSQL.




psql -c "SELECT version();"




Запустите рекомендуемую vacuumdbкоманду:




/usr/lib/postgresql/14/bin/vacuumdb --all --analyze-in-stages




В настройках по умолчанию в PostgreSQL 14 есть одно важное изменение. Собственно, вы могли заметить его, проверяя различия в конфигурационных файлах: шифрование паролей. Раньше это был MD5, теперь SHA256. Таким образом, если вы использовали конфигурацию по умолчанию, ваши клиенты не смогут подключиться к новой базе данных. А так как PostgreSQL не знает исходных паролей в открытом виде, вам придется установить их снова для всех пользователей вашей базы данных.




Для этого подключитесь к новой базе данных:




psql




Вы можете перечислить всех существующих пользователей базы данных:




du




Чтобы изменить (или установить заново) пароль пользователя, вы можете использовать следующую команду (повторить для каждого пользователя):




password user_name




Теперь вы можете выйти из psql.




q




И вернуться к обычному пользователю.




exit




Проверьте, какие старые пакеты PostgreSQL установлены.




apt list --installed | grep postgresql




Удалите старые пакеты PostgreSQL (из списка выше).




sudo apt-get remove postgresql-13 postgresql-server-dev-13




Удалите старую конфигурацию.




sudo rm -rf /etc/postgresql/13/




Войдите как postgresпользователь еще раз.




sudo su - postgres




Наконец, удалите старые данные кластера.




./delete_old_cluster.sh




Готово!




PS: Если вы хотите перейти на Postgres 13 или более раннюю версию, ознакомьтесь с более ранним руководством , в этом процессе есть некоторые важные изменения.




Источник: https://www.kostolansky.sk/posts/upgrading-to-postgresql-14/



2022-04-15T16:50:02
Software

Обновление PostgreSQL с 11 до 12 версии

PostgreSQL 12 вышел 03.10.2019. Обновится со старой версии можно через pg_dumpall и pg_upgrade. Ниже описан вариант обновления через pg_upgrade.




Установите PostgreSQL 12:




sudo apt-get update
sudo apt-get install postgresql-12 postgresql-server-dev-12




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




diff /etc/postgresql/11/main/postgresql.conf /etc/postgresql/12/main/postgresql.conf
diff /etc/postgresql/11/main/pg_hba.conf /etc/postgresql/12/main/pg_hba.conf




Остановите запущенный PostgreSQL:




sudo systemctl stop postgresql.service




Перейдите в каталог с временными файлами. Туда будут записаны логи и добавлены некоторые скрипты:




cd /tmp




Запускаем работу в командной строке от пользователя postgres:




sudo su postgres




Безопасно проверяем кластеры, без изменения каких-либо данных:





/usr/lib/postgresql/12/bin/pg_upgrade
— old-datadir=/var/lib/postgresql/11/main
— new-datadir=/var/lib/postgresql/12/main
— old-bindir=/usr/lib/postgresql/11/bin
— new-bindir=/usr/lib/postgresql/12/bin
— old-options ‘-c config_file=/etc/postgresql/11/main/postgresql.conf’
— new-options ‘-c config_file=/etc/postgresql/12/main/postgresql.conf’
— check




Если ошибок нет, проводим миграцию данных (если у Вас нет необходимости в копировании файлов в новый кластер, то используйте параметр — link. Будут использованы жесткие ссылки на старый кластер, без копирования):




/usr/lib/postgresql/12/bin/pg_upgrade 
— old-datadir=/var/lib/postgresql/11/main
— new-datadir=/var/lib/postgresql/12/main
— old-bindir=/usr/lib/postgresql/11/bin
— new-bindir=/usr/lib/postgresql/12/bin
— old-options ‘-c config_file=/etc/postgresql/11/main/postgresql.conf’
— new-options ‘-c config_file=/etc/postgresql/12/main/postgresql.conf’




Возвращаемся к обычному пользователю




exit




Ваш старый PostgreSQL, скорее всего, использовал порт 5432, а для нового, по-умолчанию, используется 5433. Меняем друг на друга.




sudo vim /etc/postgresql/12/main/postgresql.conf
# меняем "port = 5433" на "port = 5432"

sudo vim /etc/postgresql/11/main/postgresql.conf
# меняем "port = 5432" на "port = 5433"




Запускаем PostgreSQL




sudo systemctl start postgresql.service




Работаем от пользователя postgres




sudo su postgres




Проверяем версию запущенного PostgreSQL




psql -c "SELECT version();"




На новом кластере нет никакой статистики. Нужно запустить ANALYZE по кластеру. Для этого pg_upgrade создал скрипт analyze_new_cluster.sh. Запускаем.




./analyze_new_cluster.sh




Возвращаемся к обычному пользователю




exit




Смотрим, какие старые версии PostgreSQL остались в системе.




apt list --installed | grep postgresql




Удаляем старые версии PostgreSQL, например:




sudo apt-get remove postgresql-11




Удаляем старую конфигурацию:




sudo rm -rf /etc/postgresql/11/




В последний раз заходим под пользователем postgres




sudo su postgres




Удаляем данные старого кластера




./delete_old_cluster.sh




Обновление завершено!




Источник: https://dmitry-naumenko.medium.com/%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-postgresql-%D1%81-11-%D0%B4%D0%BE-12-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8-b35fa87a0c35



2022-04-15T16:48:23
Software

 Резервное копирование и восстановление баз данных PostgreSQL

Создание резервной копии базы PostgreSQL




Идея, стоящая за методом дампа, заключается в генерации текстового файла с командами SQL, которые при выполнении на сервере, пересоздадут базу данных в том же самом состоянии, в котором она была на момент создания дампа. PostgreSQL предоставляет для этой цели программную утилиту pg_dump. Базовый форма команды выглядит так:




pg_dump имя_БД > файл_дампа




то-есть, pg_dump записывает результаты своей работы на стандартный вывод. Далее будет рассмотрено как из этого можно извлечь пользу.




pg_dump является для PostgreSQL обычным клиентским приложением. Процедура резервного копирования может выполняться с любого удалённого компьютера, который имеет доступ к нужной базе данных. Эта утилита должна иметь доступ на чтение всех таблиц базы данных, резервную копию которых вы хотите сделать, так что на практике её почти всегда нужно запускать с правами суперпользователя СУБД.




Чтобы указать, к какому серверу должен подключаться pg_dump, необходимо использовать опцию командной строки -h сервер и -p порт. По умолчанию, в качестве сервера выбирается localhost или тот сервер, что указан в переменной окружения PGHOST. Похожим образом, по умолчанию используется порт, указанный в переменной окружения PGPORT или, если переменная не заданна, то порт, указанный по умолчанию при компиляции.




Как и любое другое клиентское приложение PostgreSQL, pg_dump по умолчанию будет подключаться к базе данных, под пользователем, имя которого совпадает с именем текущего пользователя в операционной системе. Чтобы изменить пользователя необходимо использовать опцию -U, либо установить нужное значение переменной окружения PGUSER.




Важное преимущество pg_dump над другими методами резервного копирования состоит в том, что базы данных, сохраненные при помощи pg_dump, могут быть залиты в более новые версии PostgreSQL, в то время как резервная копия на уровне файловой системы (простое копирование файлов баз данных) являются жёстко зависимыми от версии сервера.




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




Дампы, создаваемые pg_dump являются внутренне целостными, что означает, что дамп представляет собой снимок базы данных на момент начала запуска pg_dump. pg_dump не блокирует другие операции с базой данных во время своей работы.




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




Команда pg_dump может сохранять резервную копию базы в двух форматах: в формате текстовых файлов, содержащих набор команд SQL и специальный формат дампа. Если PostgreSQL была скомпилирована в системе с установленной библиотекой zlib, то специальный формат дампа будет сжимать данные, которые выдаются в файл вывода. Это приведёт к созданию файла дампа, который по размеру будет похож на дамп, сжатый gzip, но такой формат будет иметь преимущество, потому что позволяет выборочное восстановление таблиц. Следующая команда делает дамп базы данных, используя специальный формат дампа:




pg_dump -Fc имя_БД > имя_файла




В принципе можно сжать и текстовый формат резервной копии используя стандартные инструменты Linux — ипользовать программу сжатия, например gzip:




pg_dump имя_БД | gzip > имя_файла.gz




распаковывая впоследствии сжатый дамп командой:




gunzip -c имя_файла.gz | psql имя_БД




или:




cat имя_файла.gz | gunzip | psql имя_БД




При больших базах данных и нежелании использовать сжатие можно использовать команду split. Команда split позволяет разбивать текстовые файлы на файлы меньшего размера, которые не попадают под ограничения на максимальный размер файла в файловой системе. Например, чтобы нарезать дамп на кусочки по 1 мегабайту:




pg_dump имя_БД | split -b 1m - имя_файла




Загружая впоследствии полученные файлы командой:




cat имя_файла* | psql имя_БД




Восстановление резервных копий баз PostgreSQL




Текстовые файлы резервных копий баз данных PostgreSQL, содержащие команды sql, предназначаются для последующего чтения программой psql, то-есть выполнения сгенерированной последовательности скриптов. Общий вид команды для восстановления дампа:




psql имя_БД < файл_дампа




где файл_дампа — это файл, содержащий вывод команды pg_dump. База данных, заданная параметром имя_БД не будет создана данной командой, так что ее необходимо предварительно создать из шаблона базы template0 перед запуском psql, например, с помощью команды:




createdb -T template0 имя_БД




psql поддерживает опции для указания сервера, к которому осуществляется подключение и имени пользователя, похожие на pg_dump.




Перед восстановлением SQL дампа, все пользователи, которые владеют объектами или имеют права на объекты в базе данных, выгруженной в дамп, должны уже существовать. Если их нет, при восстановлении будут ошибки пересоздания объектов с оригинальными владельцами и/или правами.




По умолчанию, если произойдёт ошибка SQL, программа psql продолжит своё выполнение. Можно запустить psql с установленной переменной ON_ERROR_STOP, чтобы  заставить psql в случае возникновения ошибки SQL завершить работу с кодом 3:




psql --set ON_ERROR_STOP=on имя_БД < файл_дампа




В любом случае база данных будет только частично восстановлена. В качестве альтернативы можно задать, что-бы весь дамп должен быть восстановлен в одной транзации, так что восстановление или будет полностью выполненно или полностью не выполнено. Данный режим может быть задан, с помощью опций командной строки -1 или —single-transaction для psql.




Возможность pg_dump и psql писать и читать из конвееров, делают возможным создание дампа базы данных напрямую с одного сервера на другой, например:




pg_dump -h сервер1 имя_БД | psql -h сервер2 имя_БД




Дампы, которые делает pg_dump являются относительными template0. Это означает, что любые языки, процедуры и т.д. добавленные через template1, также попадут в дамп при выполнении pg_dump. В итоге, при восстановлении, если вы использовали специально изменённый template1, вы должны создать пустую базу данных из template0, как показано в примере выше.




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




Специальный формат дампа не является скриптом для psql и должен восстанавливаться с помощью команды pg_restore, например:




pg_restore -d имя_БД имя_файла




Для очень больших баз данных, вам может понадобиться сочетать split с одним из двух других методов.




Резервное копирование всего кластера баз данных PostgreSQL




pg_dump делает дамп только одной базы данных и не включает в дамп информацию о ролях или табличных пространствах (потому что эти данные относятся скорее к уровню кластера, чем к самой базе данных). Для создания резервной копии всего содержимого кластера баз данных, существует программа pg_dumpall. pg_dumpall делает резервную копию каждой базы данных кластера, а также служебные данные уровня кластера, такие как роли и определения табличных пространств. Базовая форма использования этой команды:




pg_dumpall > файл_дампа




Результирующий дамп может быть восстановлен с помощью psql:




psql -f файл_дампа postgres




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




Источник: https://www.oslogic.ru/knowledge/718/rezervnoe-kopirovanie-i-vosstanovlenie-baz-dannyh-postgresql/



2022-04-15T16:44:17
Software

Балансировка нагрузки с помощью HAProxy

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




Рассмотрим решение по балансировке нескольких веб-серверов при помощи сервиса HAProxy.







Технические требования




  • Сервер под балансировщик с двумя сетевыми интерфейсами (Рекомендация. Внешний адрес для связи с внешним миром и локальный для общения между узлами кластера);
  • Два и более серверов под распределение запросов/трафика;




В примере будет использоваться дистрибутив Linux CentOS 7.




Установка и настройка backend-серверов




В качестве backend-серверов я буду использовать несколько веб-серверов с NGINX и настроенным SSL.




Прежде всего установим NGINX




yum install nginx




Выполним настройку веб-сервера




server {
    listen 80;
    server_name devservers.network;
    rewrite ^(.*)$ https://devservers.network$1 permanent;
}
 
server {
    server_name devservers.network;
    access_log /srv/www/devservers.network/logs/access.log;
    error_log /srv/www/devservers.network/logs/error.log;
    root /srv/www/devservers.network/public_html;
 
    ssl on;
    ssl_session_timeout 24h;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    listen 443 ssl http2 proxy_protocol;
 
    set_real_ip_from 10.0.1.10/32;
    real_ip_header proxy_protocol;
 
    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
 
    location / {
   try_files $uri $uri/ /index.html;
    }
 
    location ~ .(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
        try_files $uri =404;
    }
 
}




Конфигурацию SSL можно выполнить и на самом балансировщике, а бэкенд сервера оставить работать на 80 порту, но в моем случае я буду использовать режим SSL Pass-Through. Не забываем поместить SSL-сертификаты в директорию /etc/nginx/ssl.




Для того, чтобы принимать реальные IP-адреса клиентов на веб-сервере от HAProxy необходимо добавить proxy_protocol в параметр listen, а также указать реальный адрес откуда разрешить принимать запросы:




set_real_ip_from 10.0.1.10/32;
real_ip_header proxy_protocol;




Создадим приветственную страницу на обоих веб-серверах touch /srv/www/devservers.network/public_html со следующим содержимым, изменив только номер сервера для его дальнейшего определения:




<!DOCTYPE html>
<html>
<head>
<title>Server #1</title>
</head>
<body>
<h1>This is server #1</h1>
</body>
</html>




Добавляем NGINX в автозагрузку и запускаем сервис.




systemctl enable nginx
systemctl start nginx




И не забываем выполнить настройку Firewalld




firewall-cmd --permanent --add-service=https
firewall-cmd --reload




Установка и настройка балансировщика




В качестве сервера балансировки я буду использовать VDS сервер с ресурсами 1 vCPU и 1Gb RAM. При правильной настройке, данных мощностей хватит для обслуживания 10-15к одновременных сессий, чего вполне достаточно для среднестатистического интернет-ресурса.




Установим HAProxy




Пакет HAProxy доступен в базовой репозитории CentOS.




yum install haproxy




Настройка HAProxy




HAProxy обладает очень гибкими настройками и конфигурация может содержать большое количество директив и условий. Конфигурационный файл состоит из нескольких секций. Директивы frontend, backend, listen должны иметь своё имя, к примеру defaults — может, но не обязательно, а такие как global — не должны.




Выполняем конфигурацию HAProxy в файле /etc/haproxy/haproxy.cfg. Рекомендую использовать свой конфигурационный файл, а представленный по умолчанию оставить как резерв.




Секция global




global
    log   /dev/log  local0
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    stats    timeout 30s
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon




Рассмотрим настройки в директиве global:




  • log — вести лог в /dev/log сохраняя в local0;
  • chroot — настройки безопасности, позволяющие работать HAProxy только в указанной директории;
  • maxconn — максимальное количество соединений на один процесс;
  • daemon — запуск процесса как демона.




Секция defaults




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




В нашем примере указаны следующие параметры:




defaults
    log global
    mode http
    retries 3
    option httplog
    option redispatch
    maxconn 2000
    contimeout 2000
    timeout http-request    10s
    timeout queue   1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s




  • log — указывает в какой лог вести запись (global в данном случае означает, что используются параметры, заданные в секции global);
  • mode — устанавливает протокол взаимодействия, принимает одно из значений: tcphttphealth;
  • retries — количество попыток соединения с сервером в случае отказа;
  • option httplog — формат лога, в случае использования HAProxy для проксирования HTTP-запросов (рекомендуется включить данную настройку);
  • option redispatch — разрешает программе разорвать и переназначить сессию в случае отказа сервера;
  • contimeout — максимальное время ожидания успешного соединения с сервером.




В примере я использую параметры timeout, которые позволяют более гибко настроить поведение балансировщика. Подробно с доступными параметрами можно ознакомиться в документации к HAProxy




Секция frontend




Укажем HAProxy какие запросы он должен обрабатывать, для этого задаем секцию frontend с именем https-in:




frontend https-in
    log /dev/log local0
    mode tcp
    option tcplog
    bind *:443
    default_backend backend-https-servers




Параметр bind со значением *:443 говорит о том, что HAProxy должен принимать все запросы на 443-й порт. Ещё раз напомню, что в данном примере я использую режим SSL Pass-Through, поэтому настройка SSL на самом HAProxy не выполняется.




Параметр default_backend указывает, какие сервера будут обрабатывать эти запросы. В данном случае — backend-https-servers, именно так необходимо назвать секцию backend.




Секция backend




В этой секции мы задаем алгоритм балансировки (параметр balance) и список серверов-обработчиков (server). В качестве алгоритма балансировки указываем roundrobin.




HAProxy имеет несколько алгоритмов балансировки:




  • roundrobin — каждый сервер получает запросы пропорционально своему весу, при этом веса серверов могут меняться на лету;
  • static-rr — то же, что и roundrobin, только изменение весов на лету не даст никакого эффекта;
  • leastconn — выбирает сервер с наименьшим количеством активных соединений;
  • first — выбирает первый сервер с доступными слотами для соединения source — на основе хэша IP-адреса отправителя запроса и весов серверов назначается сервер для соединения;
  • uri — сервер выбирается на основе адреса (без параметров) страницы;
  • url_param — сервер выбирается на основе GET-параметров запроса;
  • hdr — сервер выбирается на основе заголовков запроса;
  • rdp-cookie — сервер выбирается на основе cookie (если они не установлены, то применяется обычный roundrobin);




При перечислении серверов используется следующий формат: ключевое слово server, имя сервера, IP-адрес, дополнительные параметры (в данном случае — проверка статуса хоста и Proxy Protocol, которые позволяет перенаправлять реальные IP-адреса клиента с HAProxy на веб-сервер).




backend backend-https-servers
    mode tcp
    balance roundrobin
    option ssl-hello-chk
    server nginx01 10.0.1.3:443 check send-proxy
    server nginx02 10.0.1.4:443 check send-proxy




Просмотр статистики HAProxy




Для включения расширенной статистики HAProxy необходимо в конфигурационный файл добавить секцию:




listen stats
    bind :10001
    stats enable
    stats uri /haproxy_stats
    stats auth admin:password




  • bind :10001 — HAProxy будет ожидать запросы к порту 10001;
  • stats enable — включить отчёты со статистикой;
  • stats uri — установка адреса страницы с отчётом;
  • stats auth — логин и пароль для авторизации на странице со статистикой;




В секции listen указываем HAProxy, что он должен показывать статистику на странице /haproxy_stats на порту 10001 после ввода логина admin и пароля password.




Проверяем.




Переходим по адресу HAProxy (IP-адрес или хостнйем) и просто обновляем страницу. В зависимости от выбранного балансировщиком сервера будем получать ответ This is server #1 либо This is server #2.




Проверяем статистику. Переходим по адресу SITE_NAME:10001/haproxy_stats







На этом всё. Выше рассмотрен самый простой метод балансировки. Более сложная настройка требует грамотно составленного ТЗ и технических данных проекта. HAProxy очень удобный и гибкий в настройке инструмент с помощью которого можно выполнить балансировку и других сервисов, к примеру почтовый сервер, MemcachedRedis и пр.



2022-04-14T17:49:53
Software