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

CentOS 7.1: первые серверы на systemd и XFS - составляем чеклист миграции

CentOS 7.1 (1503) - клон RHEL 7.1 с systemd, firewalld и XFS по умолчанию. Разворачиваем первые серверы на семёрке и фиксируем грабли в чеклист.

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

CentOS 7.1 (1503) выпущен как производственный клон RHEL 7.1 с systemd и XFS по умолчанию

CentOS 7.1 (сборка 1503) вышел в марте, и мы наконец взялись за первые рабочие серверы на семёрке. Не тестовые стенды, а реальные машины для клиентов на сопровождении. Впечатление одно: это другой дистрибутив. Не «чуть другой», а именно другой - с другой философией управления сервисами, другим файрволом и другой файловой системой по умолчанию.

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

Что изменилось относительно шестёрки

Три главных отличия, которые бьют в лоб при первом деплое:

Systemd вместо SysVinit. Забудьте про service httpd restart и chkconfig httpd on. Теперь systemctl restart httpd и systemctl enable httpd. Само по себе несложно, но ломает всё что написано руками за годы: скрипты мониторинга, Ansible-плейбуки, runbook-ы в вики. Ansible 1.9 понимает systemd через модуль service - но только если явно указать use: systemctl, иначе может попытаться использовать старую логику.

Самое неожиданное: логи. tail -f /var/log/messages больше не даёт полной картины. Systemd забирает stdout/stderr сервисов в journald, и смотреть их нужно через journalctl -u httpd -f. Первые два часа мы честно гадали куда делись логи Apache - пока не осознали.

Firewalld вместо iptables. CentOS 7 приходит с firewalld поверх iptables. Концепция зон вместо цепочек - надо переучиваться. iptables -L работает, но показывает правила firewalld, переведённые в iptables - и это вносит путаницу. Мы пока поступаем прагматично: на первых серверах отключаем firewalld, ставим iptables-services и пишем правила по-старому. Технически это шаг назад, но зато не смешиваем два подхода в голове одновременно.

XFS по умолчанию. Анкадер-разметка при установке теперь создаёт XFS вместо ext4. Для большинства задач разницы нет, но есть одна вещь которую нужно знать: XFS не умеет уменьшать файловую систему. Ext4 - умеет (с оговорками), XFS - нет от слова совсем. Если ошибся с разметкой диска - придётся создавать новую FS и копировать данные. Это не плохо и не хорошо, просто нужно держать в голове при планировании разметки.

Где споткнулись

Ansible-плейбуки. Наш базовый провизионинг через Ansible написан с расчётом на CentOS 6 и systemd в части условий через when: ansible_os_family. Выяснилось что этого недостаточно: даже внутри CentOS 6 и 7 логика управления сервисами разная. Пришлось добавить проверку на ansible_distribution_major_version и разделить таски для шестёрки и семёрки. Часа три потеряли на отладку.

SELinux. В шестёрке мы периодически честно его отключали на ряде серверов - некоторые приложения настраивать под SELinux было нецелесообразно. В семёрке решили держать его включённым. Это правильно, но требует понимания контекстов. restorecon -Rv /var/www стал новым другом. Особенно порадовал нестандартный порт для nginx: semanage port -a -t http_port_t -p tcp 8080 - не ошибка, а норма жизни.

Hostname. В шестёрке правишь /etc/sysconfig/network. В семёрке - hostnamectl set-hostname. Мелочь, но если не знаешь - тратишь время.

Чеклист миграции

Что мы теперь проверяем при деплое нового сервера на CentOS 7:

  • Управление сервисами - все service/chkconfig в скриптах заменить на systemctl.
  • Логи - настроить journald и при необходимости пробросить в rsyslog для совместимости с Zabbix и привычными log-файлами.
  • Файрвол - определиться с подходом: firewalld или iptables-services. Не смешивать.
  • SELinux - оставить включённым, заранее проверить контексты для нестандартных путей и портов.
  • Разметка диска - решить про XFS/ext4 до установки, учитывая что XFS не сжимается.
  • Hostname - hostnamectl set-hostname, не трогать /etc/sysconfig/network.
  • NetworkManager - на серверах мы его отключаем и работаем с ifcfg-файлами напрямую. NetworkManager удобен на десктопе, на сервере добавляет неопределённость.
  • Ansible - проверить что все таски корректно ветвятся по ansible_distribution_major_version.

Что думаем

Переход болезненный ровно настолько, насколько ты привязан к старым привычкам. Systemd на самом деле удобнее: зависимости между сервисами описываются явно, journald дает структурированный лог, systemctl status показывает последние строки лога прямо в выводе - не нужно лазить в файл отдельно.

Firewalld - пока не распробовали. Держим iptables, смотрим на firewalld в тестовой среде.

Главный вывод: не пытайтесь перенести привычки шестёрки один в один. CentOS 7 требует потратить день на то чтобы понять как он думает - тогда работать становится проще. Если пытаться его сломать под старые паттерны - будет только больнее.

Чеклист будем дополнять по мере того как набиваем новые шишки.

Контакт

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

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