Apache HTTPD и Nginx — самые популяр­ные сер­веры HTTP, а HAProxy — один из самых вос­тре­бован­ных балан­сиров­щиков наг­рузки. Они прек­расно справ­ляют­ся со сво­ими задача­ми, и мно­жес­тво адми­нов уме­ют с ними работать. Одна­ко нас­тро­ить сер­вер мало — его еще нуж­но под­держи­вать, монито­рить и мас­шта­биро­вать. Даже в пре­делах одно­го сер­вера это может быс­тро прев­ратить­ся в уто­митель­ное занятие. Тем более если управлять нуж­но клас­тером.

Ре­шений для одно­го сер­вера дос­таточ­но мно­го — «панели управле­ния хос­тингом» сущес­тву­ют на любой вкус, и сво­бод­ные, и проп­риетар­ные. Но одно­го сер­вера мно­гим сов­ремен­ным про­ектам уже не хва­тит. Что­бы спра­вить­ся с наг­рузкой и обес­печить отка­зоус­той­чивость, нужен клас­тер.

Ра­дикаль­ное решение для авто­мати­зации управле­ния клас­тером — под­ход infrastructure as code. Для самых круп­ных про­ектов это решение, веро­ятно, единс­твен­но воз­можное. Есть ли аль­тер­нативы для тех, кому уже нуж­на авто­мати­зация работы более чем с одним сер­вером? Про­ект Roxy-WI стре­мит­ся соз­дать такую аль­тер­нативу. Давай пос­мотрим, нас­коль­ко ему это уда­ется.

 

Roxy-WI

Про­ект Roxy-WI стар­товал в самом начале 2018 года. Он называл­ся HAProxy-WI (HAProxy Web Interface), но поз­же сме­нил имя, пос­коль­ку его воз­можнос­ти уже не огра­ничи­вались авто­мати­заци­ей нас­трой­ки HAProxy.

Ис­ходный код про­екта рас­простра­няет­ся по лицен­зии Apache 2.0, и его мож­но най­ти на GitHub.

Для финан­сирова­ния раз­работ­ки авто­ры Roxy-WI пре­дос­тавля­ют плат­ный дос­туп к репози­тори­ям с соб­ранны­ми пакета­ми, тех­ничес­кую под­дер­жку и допол­нитель­ные сер­висы, нап­ример авто­мати­чес­кое резер­вное копиро­вание нас­тро­ек.

 

Установка и обновление

Лю­бой жела­ющий может уста­новить Roxy-WI из исходни­ков, для это­го дос­таточ­но кло­ниро­вать репози­торий c GitHub и сле­довать инс­трук­циям.

Ав­торы Roxy-WI пре­дос­тавили нам проб­ный дос­туп к репози­тори­ям, поэто­му возить­ся с руч­ной уста­нов­кой не приш­лось. Уста­нов­ка из RPM на Rocky Linux 8 (идей­ном нас­ледни­ке CentOS) не сос­тавля­ет боль­шого тру­да.

Аль­тер­натив­ный вари­ант — раз­верты­вание на Amazon EC2 из офи­циаль­ного об­раза. Образ устро­ен по прин­ципу bring your own license — поль­зователь пла­тит за ресур­сы EC2, но не за исполь­зование ПО. В нас­тоящий момент в этом обра­зе уста­нов­лена вер­сия 5.2.0, в то вре­мя как самая све­жая — 6.0.1.

В интерфей­се Roxy-WI есть опция про­вер­ки и уста­нов­ки обновле­ний, но нет опций нас­трой­ки име­ни поль­зовате­ля и пароля для дос­тупа к репози­торию, так что нас­тра­ивать их при­дет­ся вруч­ную, в /etc/yum.repos.d или в /etc/apt/auth.conf.d.

 

Внутренняя структура

Про­ект Roxy-WI написан на Python 3, так что прек­ращение под­дер­жки Python 2.7 его никак не зат­ронуло.

Код и дан­ные уста­нав­лива­ются в каталог /var/www/haproxy-wi/app/ — в невиди­мых для поль­зовате­ля час­тях еще сох­ранилось ста­рое имя про­екта.

Собс­твен­ного сер­виса у интерфей­са Roxy-WI нет, он полага­ется на Apache HTTPD и генери­рует кон­фиг в /etc/httpd/conf.d/roxy-wi.conf. Веб‑при­ложе­ние орга­низо­вано весь­ма необыч­ным для нашего вре­мени спо­собом — в виде набора скрип­тов CGI. С одной сто­роны, про­цесс Roxy-WI не может упасть, потому что каж­дый скрипт выпол­няет­ся веб‑сер­вером отдель­но. С дру­гой — все недос­татки CGI оста­ются в силе: на запуск скрип­тов нуж­но вре­мя, и это отри­цатель­но ска­зыва­ется на отзывчи­вос­ти интерфей­са.

Для хра­нения дан­ных Roxy-WI по умол­чанию исполь­зует SQLite. Дан­ные о поль­зовате­лях, сер­верах и про­чих сущ­ностях хра­нят­ся в фай­ле /var/www/haproxy-wi/app/roxy-wi.db. Вооб­ще, все дан­ные Roxy-WI хра­нит в катало­ге при­ложе­ния: зак­рытые клю­чи для SSH в /var/www/haproxy-wi/keys/, кон­фиги сер­веров в /var/www/haproxy-wi/configs/ и так далее.

Пуб­личный дос­туп к этим катало­гам зап­рещен толь­ко дирек­тивами Deny from all в нас­трой­ках Apache HTTPD, поэто­му с нас­трой­ками и путями нуж­но быть вни­матель­ным, если вдруг захочет­ся их поменять.

До­пус­кать утеч­ку фай­ла roxy-wi.db катего­ричес­ки нель­зя, пос­коль­ку пароли поль­зовате­лей в нем хра­нят­ся в виде хешей MD5 без исполь­зования соли и уяз­вимы даже к прос­тей­шей ата­ке по радуж­ным таб­лицам.

С дру­гой сто­роны, для резер­вно­го копиро­вания или перено­са уста­нов­ки Roxy-WI на дру­гой сер­вер дос­таточ­но заар­хивиро­вать каталог /var/www/haproxy-wi, что про­ще, чем если бы дан­ные были раз­бро­саны по мно­жес­тву катало­гов. Но иде­аль­ным вари­антом все рав­но пред­став­ляет­ся отдель­ный каталог с дан­ными, вро­де /var/lib/roxy-wi, — хочет­ся верить, что будущие вер­сии пой­дут имен­но этим путем.

Кро­ме SQLite, есть под­дер­жка MySQL. Перей­ти с SQLite на MySQL мож­но пос­ле уста­нов­ки. В веб‑интерфей­се опций для этой цели нет, при­дет­ся пра­вить файл нас­тро­ек /var/www/haproxy-wi/app/roxy-wi.cfg и ини­циали­зиро­вать базу, запус­тив скрипт.

 

Веб-интерфейс

В интерфей­се Roxy-WI мож­но най­ти ряд отличных идей. Нап­ример, если какой‑то раз­дел нас­тро­ек пуст, то поль­зовате­лю показы­вают не прос­то пус­тую стра­ницу, а стра­ницу с виде­оинс­трук­цией о том, как исполь­зовать этот раз­дел.

Пустая страница с видеоинструкцией
Пус­тая стра­ница с виде­оинс­трук­цией

С дру­гой сто­роны, в интерфей­се пока что мно­го шерохо­ватос­тей. К при­меру, поля для вво­да адре­сов IP или домен­ных имен выда­ют нес­пецифич­ную ошиб­ку, если до или пос­ле адре­са ока­зал­ся про­бел. Поле для вво­да часово­го пояса тре­бует от поль­зовате­ля стро­ку для tzdata вро­де Europe/Moscow — ни выпада­юще­го спис­ка, ни авто­допол­нения. Ряд полей, нап­ример ldap_enable, тре­буют от поль­зовате­ля ввес­ти 0 (disable) или 1 (enable), хотя гораз­до логич­нее был бы чек­бокс. Ины­ми сло­вами, поль­зовать­ся мож­но, но прос­тор для мел­ких улуч­шений боль­шой.

 

Возможности

Те­перь давай гля­нем на собс­твен­но воз­можнос­ти работы с сер­верами. Заяв­ленный спи­сок весь­ма вну­шите­лен: Roxy-WI в той или иной сте­пени спо­собен управлять нас­трой­ками и HAProxy, и Apache HTTPD, и Nginx.

Мы в деталях рас­смот­рим базовую фун­кци­ональ­ность, нас­коль­ко поз­воля­ет объ­ем статьи. Перед тем как что‑либо нас­тра­ивать, нуж­но рас­ска­зать Roxy-WI о сер­верах нашего клас­тера.

 

Взаимодействие с серверами

Вза­имо­дей­ствие с сер­верами про­исхо­дит по SSH. Перед тем как добав­лять сер­веры, нуж­но заг­рузить зак­рытые клю­чи для под­клю­чения к ним. Диалог добав­ления поль­зовате­ля и клю­ча исполь­зует не слиш­ком инту­итив­ную и стан­дар­тную тер­миноло­гию: поле name — это имя набора дан­ных для аутен­тифика­ции (зак­рытого клю­ча и име­ни поль­зовате­ля), а поле credential — имя поль­зовате­ля, с которым Roxy-WI будет под­клю­чать­ся к сер­веру. Заг­рузить сам ключ мож­но толь­ко пос­ле соз­дания записи для него. Добав­ление клю­чей, конеч­но, не час­тая опе­рация, но интерфейс опять же мож­но улуч­шить.

Диалог добавления данных доступа
Ди­алог добав­ления дан­ных дос­тупа
Диалог загрузки ключа
Ди­алог заг­рузки клю­ча

До­бав­ление сер­веров не пред­став­ляет никакой слож­ности. Раз­ве что может понадо­бить­ся обно­вить стра­ницу вруч­ную, что­бы уви­деть добав­ленный сер­вер.

Диалог добавления данных доступа
Ди­алог добав­ления дан­ных дос­тупа

По­радо­вала воз­можность сра­зу про­верить под­клю­чение по SSH: что­бы убе­дить­ся, что имя поль­зовате­ля и ключ вер­ные, дос­таточ­но нажать кноп­ку Check рядом с полем Credentials.

Запись в списке серверов
За­пись в спис­ке сер­веров

Ус­тановить HAProxy на све­жий сер­вер Roxy-WI может авто­мати­чес­ки, что силь­но эко­номит вре­мя адми­ну.

Ав­томати­чес­кая уста­нов­ка Apache HTTPD в текущей вер­сии не под­держи­вает­ся — веро­ятно, она появит­ся в будущих вер­сиях. C Nginx у меня тоже воз­никла проб­лема — на Ubuntu 22 LTS он не уста­новил­ся — ни с «Докером», ни без.

Ошибка установки
Ошиб­ка уста­нов­ки

Но добав­ление сер­веров, конеч­но, все­го лишь вспо­мога­тель­ная фун­кция. Нас­тоящие пре­иму­щес­тва Roxy-WI вид­ны в его под­ходе к работе с кон­фигами.

 

Работа с конфигами

На­ибо­лее раз­вито управле­ние имен­но HAProxy, пос­коль­ку изна­чаль­но про­ект кон­цен­три­ровал­ся на нем. Фун­кции для работы с Nginx и Apache HTTPD активно раз­вива­ются и пока усту­пают интерфей­су для HAProxy. Тем не менее сама кон­цепция управле­ния кон­фигами явно показы­вает пре­иму­щес­тва спе­циали­зации и в ито­ге впол­не смо­жет сос­тавить кон­курен­цию решени­ям в духе infrastructure as code.

Кон­фиги HAProxy мож­но про­верить на пра­виль­ность перед отправ­кой на сер­вер. Понят­но, что это обер­тка для haproxy -c, но эко­номия вре­мени оче­вид­на. Та же фун­кция дол­жна работать на Nginx (и быть ана­логом nginx -t), но у меня Roxy-WI про­пус­тил кон­фиг с ошиб­ками син­такси­са.

Ре­дак­тирова­ние кон­фигов весь­ма про­думан­но. Веб‑редак­тор, конеч­но, никог­да не срав­нится с Vim, Emacs или VSCode в деле редак­тирова­ния тек­ста, но редак­тор Roxy-WI ком­пенси­рует это спе­циали­заци­ей. К при­меру, в режиме прос­мотра мож­но показать или свер­нуть толь­ко опре­делен­ные сек­ции кон­фига, а в режиме редак­тирова­ния работа­ет под­свет­ка син­такси­са.

Важ­ная воз­можность — авто­мати­чес­кая реп­ликация кон­фигов на резер­вный сер­вер и вер­сиони­рова­ние. В рам­ках под­хода infrastructure as code мы бы хра­нили кон­фиги или исходный матери­ал для их соз­дания в Git и занима­лись бы кон­тро­лем вер­сий сами. Roxy-WI дела­ет это за нас: каж­дая редак­ция кон­фига сох­раня­ется внут­ри Roxy-WI и дос­тупна для отка­та, прос­мотра и срав­нения с дру­гими редак­циями. Хотя Roxy-WI не исполь­зует сис­тему кон­тро­ля вер­сий и хра­нит архивные кон­фиги в обыч­ных фай­лах, он спо­собен показы­вать раз­личия меж­ду вер­сиями.

При­мене­ние сис­темы кон­тро­ля вер­сий сэконо­мило бы мес­то на дис­ке и упрости­ло бы под­дер­жку опи­саний изме­нений — хочет­ся уви­деть это в будущих вер­сиях. В текущей вер­сии под­держи­вает­ся толь­ко пери­оди­чес­кое резер­вное копиро­вание в уда­лен­ный репози­торий Git и толь­ко в вер­сии Enterprise.

Кро­ме того, имен­но для HAProxy в Roxy-WI есть широкий набор генера­торов сек­ций кон­фига.

Генераторы конфигов HAProxy
Ге­нера­торы кон­фигов HAProxy

От­дель­но при­ятно то, что перед отправ­кой сге­нери­рован­ного кон­фига на сер­вер мож­но прос­мотреть его текст, — это выгод­но отли­чает Roxy-WI от про­ектов, где про­цесс для поль­зовате­ля неп­розра­чен.

 

Дополнительные сервисы и интеграции

Тем поль­зовате­лям, которые под­держи­вают про­ект финан­сово, дос­тупны не толь­ко соб­ранные пакеты с самим Roxy-WI, но и ряд допол­нитель­ных сер­висов. Я уже упо­минал сер­вис резер­вно­го копиро­вания кон­фигов, но им все не огра­ничи­вает­ся. Дру­гой полез­ный сер­вис — Roxy-WI Checker, который помога­ет монито­рить сер­веры и рас­сылать уве­дом­ления об инци­ден­тах. Разуме­ется, монито­ринг и уве­дом­ление мож­но нас­тро­ить и самому, бла­го инс­тру­мен­тов для этих целей огромное количес­тво. Пре­иму­щес­тво Roxy-WI Checker — в интегра­ции с самим Roxy-WI. Ему авто­мати­чес­ки ста­новит­ся извес­тно о сер­верах клас­тера и их сер­висах, так что добав­ление сер­веров в монито­ринг перес­тает быть отдель­ной задачей. Сер­вис может авто­мати­чес­ки отправ­лять уве­дом­ление в каналы Slack или Telegram, дос­таточ­но ука­зать токен для их API. Кро­ме того, уве­дом­ления о сер­верах из раз­ных групп мож­но отправ­лять в раз­ные каналы, что полез­но орга­низа­циям с выделен­ными коман­дами адми­нов для раз­ных час­тей про­екта.

 

Планы на будущее

Про­ект Roxy-WI не сто­ит на мес­те и пос­тоян­но раз­вива­ется. Авто­ры пла­ниру­ют в будущих вер­сиях добавить новые воз­можнос­ти нас­трой­ки отка­зоус­той­чивос­ти с помощью Keepalived, под­дер­жку WAF (Web Application Firewall) для Nginx, а так­же сущес­твен­но улуч­шить работу с Apache HTTPD (нап­ример, под­дер­жку сбо­ра ста­тис­тики и резер­вно­го копиро­вания кон­фигов). Обе­щают испра­вить и недос­татки интерфей­са и в целом собира­ются его улуч­шить.

 

Заключение

Roxy-WI, безус­ловно, мно­гообе­щающий про­ект. Задача нас­трой­ки и управле­ния клас­терами веб‑сер­веров — слож­ная и акту­аль­ная, и удач­ное решение для ее авто­мати­зации может сэконо­мить адми­нам мно­го вре­мени и убе­речь их от оши­бок. На дан­ный момент Roxy-WI хорошо справ­ляет­ся с авто­мати­заци­ей нас­трой­ки HAProxy и дви­жет­ся в сто­рону пол­ного решения для управле­ния все­ми ком­понен­тами клас­тера.

Тем не менее Roxy-WI — помощ­ник адми­на клас­тера, а не аль­тер­натива ему. Никакой инс­тру­мент не заменит собс­твен­ные зна­ния и опыт!

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии