Второй узел и репликация
Второй сервер даёт две вещи: копию состояния (домены, ящики, ключи) и копию писем. Состояние переносится бандлом, письма — синхронизацией Dovecot.
Когда это нужно
- страховка от смерти одного сервера;
- переезд без простоя: подняли второй, скопировали, переключили DNS;
- требование «три MX в разных местах» — состояние одинаковое, ключи DKIM те же.
Шаг 1. Подготовка
Второй сервер ставится тем же установщиком с тем же почтовым доменом. Ключи DKIM будут другие — это нормально, дальше они перезапишутся из бандла.
# на первом узле
mailnode nodes add mx2 root@10.0.0.2
mailnode sync
sync экспортирует состояние и разворачивает его на втором узле по ssh. Нужен доступ по ключу без пароля и те же пути (/opt/mailnode).
Шаг 2. Письма
mailnode replicate # все ящики на все узлы
mailnode replicate --target mx2 # только на конкретный
mailnode replicate --dry-run # показать, что будет делать
Работает через doveadm sync: копируются папки и флаги, удаления передаются, если синхронизация двусторонняя. Первый прогон долгий — копируется вся почта.
Шаг 3. Расписание
Установщик ставит таймер mailnode-replicate.timer, если при установке указан второй узел. Он гоняет репликацию раз в час. Проверить:
systemctl list-timers | grep mailnode
journalctl -u mailnode-replicate -n 30
Ограничения, о которых надо знать
sieve_script приводит к ошибке Mailbox attribute iteration failed. Перед включением репликации выполните:
mailnode config set spam_to_junk 0
mailnode render
После этого спам помечается заголовком, но не раскладывается по Junk автоматически.- репликация копирует ящики, но не настройки Postfix — они приходят бандлом;
- оба узла должны видеть друг друга по ssh на 22 порту;
- одновременная запись в один ящик с двух узлов даёт конфликт: держите активным один сервер, второй — резервный;
- MX-записи с одинаковым приоритетом распределят входящую почту между узлами, и без общей файловой системы часть писем окажется на разных серверах — тогда нужна синхронизация в обе стороны.
Переключение на второй узел
- Убедитесь, что последняя репликация прошла:
mailnode replicate --dry-runпоказывает пусто. - Поменяйте A-запись
mail.example.ruна IP второго сервера. - Проверьте сертификат:
mailnode tls show, при необходимостиmailnode tls caddy. - Проверьте отправку и приём.
Проверка, что всё сошлось
mailnode nodes ls
mailnode bundle-info /root/node.tar.gz
doveadm sync -u ivan@example.ru ssh root@10.0.0.2 doveadm dsync-server -u ivan@example.ru
Последняя команда — то же, что делает replicate, но для одного ящика: удобно, когда надо быстро проверить связь.