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 теперь предметный. Пока обновляем стенд и разбираемся с деталями; переводить продакшн будем аккуратно, с планом отката.