ADG Оставить заявку
Блог Системное администрирование 4 мин чтения

RHEL 6 вышел: обновили тестовый стенд и сразу ощутили разницу на бэкапах

Red Hat Enterprise Linux 6 GA: ext4 по умолчанию, cgroups в ядре, заметно повзрослевший KVM. Обновили тестовый стенд с RHEL 5 - разница на IO-нагруженных задачах ощутима сразу.

Контекст момента

Red Hat Enterprise Linux 6 вышел в GA с новым планировщиком I/O, ext4 по умолчанию и существенно улучшенным KVM

Red Hat наконец выпустила RHEL 6 в релиз. После нескольких месяцев работы с бетой - мы писали про KVM в RHEL 6 Beta ещё летом - получить финальный дистрибутив было делом принципа. Тестовый стенд, на котором обкатываем конфигурации для клиентов на сопровождении, жил на RHEL 5.5. Обновление заняло выходной день, и несколько наблюдений накопилось уже к вечеру понедельника.

Что поменялось в ядре и файловой системе

Самое очевидное: ext4 теперь файловая система по умолчанию. В RHEL 5 ext3 ставилась по умолчанию, ext4 можно было выбрать вручную, но Red Hat официально не поддерживала её до определённого момента. Теперь выбор сделан за тебя - и это правильно. На тестовом стенде fsck после «грязного» перезапуска стал значительно быстрее: ext4 хранит журнал по-другому и проверка занимает секунды там, где ext3 честно шла несколько минут на крупном разделе.

Планировщик I/O по умолчанию сменился с CFQ на CFQ - но с изменёнными параметрами под cgroups. Это не то же самое, что было в RHEL 5. Главное новшество здесь - именно cgroups как механизм управления ресурсами, встроенный прямо в ядро и интегрированный с подсистемами I/O и памяти. Раньше чтобы ограничить потребление дискового I/O для конкретного процесса или группы - нужны были патчи или танцы с ulimit, которые на диск всё равно толком не влияли. Теперь это штатная часть ядра.

На практике это означает: задание резервного копирования можно загнать в отдельный cgroup и не бояться, что ночной бэкап убьёт latency для остальных сервисов на том же хосте. На RHEL 5 эту задачу решали через nice и ionice с переменным успехом.

KVM: заметно взрослее беты

В июне мы смотрели на KVM в бете и отмечали, что инструментарий сырой. Финальный релиз стал заметно лучше - не в смысле «всё теперь идеально», а в смысле «можно работать без постоянных лазаний в XML».

virt-manager получил нормальный интерфейс для снапшотов - то, чего в бете практически не было. Снапшоты через GUI создаются и откатываются без virsh. Клонирование VM тоже стало быстрее: видно, что оптимизировали работу с образами дисков.

libvirt 0.8.3, который идёт с RHEL 6, умеет управлять cgroups для VM автоматически - при создании гостя libvirt сам создаёт для него cgroup и прописывает туда лимиты CPU и I/O, если они заданы в конфигурации. Это меняет разговор о KVM как о «просто гипервизоре» - теперь это нормальная управляемая платформа с изоляцией ресурсов.

Что с бэкапами - главный практический результат

На тестовом стенде у нас крутятся задания резервного копирования, имитирующие реальную нагрузку клиентов. После перехода на RHEL 6 запустили те же задания - и разница на IO-нагруженных сценариях стала заметна без специальных измерений.

Три момента:

  • ext4 + журнал метаданных ускорил фазу финализации резервных копий, которая на ext3 тормозила именно на операциях с метаданными при закрытии большого числа файлов.
  • cgroups для изоляции I/O позволил поднять приоритет самого бэкапа без риска задушить остальные процессы - раньше бэкап либо шёл медленно на ionice idle, либо резал всё остальное.
  • KVM с virtio-blk на той же задаче показал лучший результат, чем в бете: гостевая VM с агентом резервного копирования стала выдавать более стабильный throughput без пиков latency.

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

Что не изменилось и что настораживает

SELinux в RHEL 6 остался в enforcing по умолчанию - и это хорошо, не стоит его отключать рефлекторно. Но количество дополнительных policy-модулей, которые нужны для нестандартных конфигураций, не уменьшилось. Первый час после установки - всё равно частично про аудит AVC-отказов и дописывание локальных политик.

Сеть управления сменила имена интерфейсов: в RHEL 6 появились persistent network device names вида em1, em2 вместо eth0, eth1. Это правильно с точки зрения предсказуемости на разном железе, но скрипты и конфиги, написанные под eth*, надо проверять - они не всегда адаптируются автоматически.

Upstart вместо SysV init - тоже новшество. Скрипты инициализации, написанные под /etc/init.d/ старым способом, работают, но нативные upstart job-файлы для сервисов - другой синтаксис. Мигрировали без особых проблем, но пришлось потратить время.

Итог

RHEL 6 GA - это не косметический апдейт. ext4 по умолчанию, cgroups в ядре, повзрослевший KVM - это системные изменения, которые меняют то, как строятся конфигурации. Для клиентов на сопровождении, у которых IO-нагрузка на резервное копирование была болью - разговор о переходе с RHEL 5 теперь предметный. Пока обновляем стенд и разбираемся с деталями; переводить продакшн будем аккуратно, с планом отката.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.