Итак, выпускаем версию чуть раньше времени, потому что фишек накопилось много, более того, в devel билде лежат серьёзные доработки по снижению нагрузки в файрволе, надо уже на них переключаться, а это выкатить в master.
Резолвер
Попробовали решить проблему появляющихся в отчётах ревизора проскальзывающих HTTPS-ссылок по ресурсам, периодически меняющимся IP адресам.
- (bug) резолвер https забивал /tmp/ временными файлами.
- (bug) больше не резолвятся домены, исключённые из реестра, но оставшиеся в кэше (позже сделаем удаление их из кэша по истечении ttl записи)
- (feature) Теперь резолвер сохраняет свои предыдущие результаты, у каждого ip отдельный ttl, по умолчанию 480 минут, но можно передать параметром, например IP_TTL=400 (или 4000). Максимальный ttl записи уменьшен до 60 минут.
- (feature) поддерживаются белые списки для резолва (our.whitehttpslist)
- (improve) предупреждение про длительную работу резолвера
- (improve) более понятное логирование использования кэша резолва при рестарте, раньше часто вводило в заблуждение
- (dev) улучшено логирование резолвера, можно запустить RESOLVER_DEBUG=1 ./reload_ip.sh
- (dev) общий shell-код обработки списков ip и url вынесен в библиотеку
- (dev) Добавлен хук обновления для «миграции» кэша резолва в новый формат
P.S: В ходе тестов выяснилось, что новый концепт резолвера пока не приносит максимальную пользу из-за не совсем оптимальных значений TTL для записей и IP. Пока экспериментируем, предположительно в течении двух-трёх дней выпустим обновление, где значения по умолчанию будут наиболее подходящими для реального мира.
Утилиты и производительность
- (improve) скрипт link_rx_speed теперь поддерживает vlan-интерфейсы
- (improve) скрипт support_info лучше разбирает структуру бриджей при работе в виртуальных машинах (отличается содержимое /sys/..)
- (feature) добавлен скрипт для поиска записей по URL / IP в архиве выгрузок реестра, очень удобно разбираться в ситуациях в духе «а должно оно вообще блокироваться?»
- (feature) автоматическая настройка rps теперь поддерживает Vlan и QinQ-Vlan интерфейсы (пока что сомневаемся, стоит ли его включать для самих сетёвок, в случае, если у них больше одной очереди)
Отказоустойчивость, минимизация простоев и улучшение результатов проверок ревизором
- (bug) Выгрузки реестра теперь выполняются сперва с опцией cache=None для suds.client.Client, затем без. На части серверов без этой опции выгрузки не проходили по таймауту.
- (bug) Добавлена случайная задержка от 0 до 300 секунд в начале критического обновления, чтобы снизить «хабраэффект» на сервер обновлений.
- (feature) в диагностику добавлена проверка модуля на зависание
- (feature) изменена логика рестарта и обновления carbon reductor. В случае, если настройки ipset’ов и контрольные суммы модулей ядра не изменились (это бывает довольно редко), Carbon Reductor не прерывает работу в процессе обновления и рестарта. На всякий случай имеется force-флаг: /etc/init.d/reductor restart —force. Повторный старт не приводит к ошибкам. Модуль интеграции с биллингом тоже поддерживает мягкий рестарт.
- (feature) увеличена скорость быстрой перезаливки ipset (при ≈4000 ip с ≈0.7сек => ≈0.02сек) за счёт использования ipset swap.
- (feature) в случае, если sys.kernel.panic = 0 при старте выставляем его в 100, чтобы сервер перезагружался в случае kernel panic.
- (logic) Перенесли штатное обновление carbon reductor на 9 утра из-за вероятности пересечения с проверкой ревизора, полезно для клиентов без резервирования Carbon Reductor
P.S: в 6.2.2. будет доступна опция «хардкорная оптимизация трафика», которая отрезает весь лишний трафик (только с сетёвок с зеркалом, находящихся в бриджах, по аналогии с NOTRACK) ещё в raw PREROUTING. Хуки, добавляющие правила в mangle PREROUTING для того, чтобы открыть какой-либо порт на редукторе станут ненужными (filter INPUT нужно будет оставить). Наработки уже есть, осталось только навести лоск.
P.P.S: пустой ip.load не опасная штука, ipset с адресами из этого файла в этот момент заполнен и используется. В скором времени мы придумаем что сделать, чтобы он не смущал в течении всего процесса обновления кэша резолва (в среднем ≈17 секунд).
Обработка списков и разбор реестра
Тут мелочи, но они значительно улучшили результаты проверок ревизором.
- (bug) В случае, если запись в реестре содержит только домен и ip — блокируем все URL на этом домене по http и IP адрес по https + добавляем домен в список резолвящихся.
- (bug) исправлена (опять?!) логика с точками в конце GET запроса.
- (feature) На основе wget сделали дополнительную обработку URL содержащих экранированные символы или кириллицу, перед отправкой в ядро.
Прочее
- (bug) Удаление дефолтного конфига nginx при рестарте во избежание конфликта с конфигом веб-интерфейса reductor после обновления nginx
- (bug) Теперь в отчётах по выгрузкам отображаются 60 последних дат, до этого из-за ротирования логов показывалось 0-3.
- (improve) увеличены начальные задержки между обращениями к серверу РКН (начинаем с 30 секунд, раньше с 10)
- (improve) подобраны наиболее оптимальные значения hashsize и maxelem для всех ipset.
- (dev) Адрес дефолтной заглушки переехал (у тех у кого была прописана — поменялся автоматически при обновлении) с helpdesk.carbonsoft.ru/deny на https://deny.carbonsoft.ru/. Решили оставить шуточку про «может лучше посмотреть котиков?» в качестве дополнительной мотивации использовать собственную заглушку — выглядит солиднее, да и меньше канал забиваться будет.