Вопрос или проблема
Цель: У меня есть кластер, управляемый Pacemaker, и я хочу, чтобы мой ресурс Postfix зависел от services clamav-daemon.service и mailscanner.service. Если один из этих двух ресурсов выйдет из строя, IP-switch будет активирован.
Я исследовал и обнаружил, что могу использовать systemd для настройки параметров, таких как “BindsTo=” и “After=”, что может быть полезно в моем случае.
Я использовал следующие команды для настройки моего ресурса на Pacemaker: (в настоящее время тестирую на одной машине, чтобы увидеть, смогу ли я заставить эту конфигурацию работать в кластере)
pcs resource create postfixmail systemd:postfix
pcs resource clone postfixmail clone-max=1 clone-node-max=1
pcs constraint location postfixmail-clone prefers mailt02=INFINITY
Вот результат, который я получил:
Неудачные действия с ресурсами:
* postfixmail_start_0 на mailt02 'ошибка' (1): call=51, status="завершено", exitreason='', last-rc-change="2024-09-26 11:38:07 +01:00", queued=0ms, exec=456ms
Вот конфигурация моего файла systemd/postfix.service:
[Unit]
Description=Почтовый транспортный агент Postfix
Conflicts=sendmail.service exim4.service
ConditionPathExists=/etc/postfix/main.cf
BindsTo=mailscanner.service clamav-daemon.service
After=mailscanner.service clamav-daemon.service
[Service]
Type=simple
ExecStart=/usr/sbin/postfix start
ExecReload=/usr/sbin/postfix reload
[Install]
WantedBy=multi-user.target
Вот что дает мне “systemctl status postfix.service”:
mailscanner.service: Найден цикл упорядочивания на postfix.service/start
mailscanner.service: Найдена зависимость от mailscanner.service/start
mailscanner.service: Невозможно разорвать цикл, начиная с mailscanner.service/start
mailscanner.service: Найден цикл упорядочивания на postfix.service/start
mailscanner.service: Найдена зависимость от mailscanner.service/start
mailscanner.service: Невозможно разорвать цикл, начиная с mailscanner.service/start
Я здесь, чтобы попросить о помощи и руководстве для решения этой проблемы. Я также принимаю предложения других способов достижения моей цели.
Спасибо!
Ответ или решение
Для того чтобы правильно настроить системную службу Postfix с использованием Pacemaker и учесть зависимость от clamav-daemon.service
и mailscanner.service
, необходимо избежать циклов зависимостей и правильно определить порядок запуска служб. Давайте рассмотрим шаги для устранения ваших проблем.
1. Устранение циклов зависимостей
Судя по вашему описанию, у вас есть взаимные зависимости между postfix.service
и mailscanner.service
, что вызывает цикл, который не позволяет системе корректно запустить необходимые службы.
Во-первых, убедитесь, что mailscanner.service
не имеет зависимости от postfix.service
. Вам нужно изучить конфигурацию mailscanner.service
и убедиться, что она не ссылается на postfix.service
.
Если mailscanner.service
не зависит от postfix.service
, попробуйте изменить ваш файл postfix.service
следующим образом:
2. Изменение конфигурации postfix.service
[Unit]
Description=Postfix Mail Transport Agent
Conflicts=sendmail.service exim4.service
ConditionPathExists=/etc/postfix/main.cf
BindsTo=mailscanner.service clamav-daemon.service
After=mailscanner.service clamav-daemon.service
Before=some-other-service.service # Замените на реальное имя службы, если необходимо
[Service]
Type=simple
ExecStart=/usr/sbin/postfix start
ExecReload=/usr/sbin/postfix reload
[Install]
WantedBy=multi-user.target
Обратите внимание на добавление Before=
для указания правильного порядка для других зависимых служб.
3. Генерация зависимостей
После обновления конфигурационного файла postfix.service
, перезапустите систему управления службами для применения изменений:
sudo systemctl daemon-reload
4. Проверка конфигурации
Проверьте статус и зависимости сервисов:
systemctl list-dependencies postfix.service
systemctl status postfix.service
systemctl status mailscanner.service
systemctl status clamav-daemon.service
Убедитесь, что зависимости выставлены корректно и нет циклов.
5. Настройка Pacemaker
Теперь перейдите к настройке ресурсов в Pacemaker. Убедитесь, что ресурсы правильно привязаны и зависимы друг от друга. Вы можете использовать следующее:
pcs resource create postfixmail systemd:postfix \
op start timeout=60s \
op stop timeout=60s
pcs resource clone postfixmail clone-max=1 clone-node-max=1
pcs constraint location postfixmail prefers mailt02=INFINITY
# Установка зависимостей
pcs constraint colocation add postfixmail with mailscanner
pcs constraint colocation add postfixmail with clamav-daemon
6. Тестирование
После всех изменений протестируйте вашу конфигурацию:
pcs status
pcs resource show
Убедитесь, что оба сервиса (Postfix и его зависимости) корректно работают и управляются Pacemaker.
Заключение
Следуя этим шагам, вы должны устранить проблему циклов зависимостей и обеспечить корректную работу Postfix с Pacemaker. Если ошибка все еще появилась, проверьте журналы journalctl -xe
для более детальной информации о сбоях.
Надеюсь, это поможет вам настроить и использовать Postfix в вашем кластере!