Dovecot/Replication

Материал из ALT Linux Wiki
< Dovecot(перенаправлено с «Dovecot\Replication»)
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

В данной статье мы рассмотрим настройку master/master репликации с использованием DSYNC. Рекомендуется настроить реплики так, чтобы один и тот же пользователь обращался к одной и той же реплике, но никаких изменений не потеряется даже если пользователь одновременно будет изменять письма на обоих репликах, просто некоторые письма будут загружены заново. Репликация проходит асинхронно, поэтому большая задержка между репликами не является проблемой. Репликация основывается на индексных файлах Dovecot, поэтому письма не пропадут из-за ошибки файловой системы или из-за случайного удаления файлов, они просто реплицируются обратно. Репликация работает только между парами серверов.

Внимание! Репликация общих папок на данный момент работает некорректно. Это происходит потому, что есть пользовательская блокировка, предотвращающая множественные попытки dsync, при одновременной работе одного и того же пользователя. Но с общими папками сразу много пользователей могут начать синхронизировать одну и туже папку. Для этого необходимы дополнительные блокировки. На данный момент это не является приоритетной задачей разработчиков

Настройка

Убедитесь что у Вас правильно настроена база пользователей, это необходимо для получения списка пользователей для репликации:

# doveadm user '*'
test@robust.local
...

Создадим файл /etc/dovecot/conf.d/10-replicator.conf в котором опишем все настройки репликации.
Включим модуль репликации глобально добавив:

mail_plugins = $mail_plugins notify replication

Процесс репликации должен запускаться при старте, чтобы сразу реплицировать пользователей:

service replicator {
  process_min_avail = 1
}

Далее вы должны указать как реплицировать. Например используя Doveadm:

dsync_remote_cmd = doveadm dsync-server -u%u

Почтовые процессы должны иметь доступ к именованному каналу (fifo) и сокету. Если вы используете единственный vmail UID, вы можете сделать так:

service aggregator {
  fifo_listener replication-notify-fifo {
    user = vmail
  }
  unix_listener replication-notify {
    user = vmail
  }
}

Разрешим команды doveadm добавив:

service replicator {
  unix_listener replicator-doveadm {
    mode = 0600
  }
}

Также можно указать количество одновременно запущенных dsync процессов (по-умолчанию 10):

replication_max_conns = 10

Репликация происходит асинхронно. Вы можете дополнительно настроить время ожидания синхронизации новой почты. Это можно настроить так:

plugin {
  # Когда приходит новая почта, подождать пока она не синхронизируется с удаленной стороной, если этого не произошло в течении 2 секунд, вернуть успешный статус в любом случае
  replication_sync_timeout = 2s
}

Настройка dsync поверх TCP

Создадим doveadm-server на нужном порту:

service doveadm {
  inet_listener {
    port = 12345
  }
}

И укажем doveadm клиенту использовать этот порт:

doveadm_port = 12345

Укажем пароль для соединения клиента и сервера:

doveadm_password = Pa$$word

Теперь вы можете использовать tcp:hostname в качестве цели dsync. Вы так же можете переопределить порт tcp:hostname:port:

plugin {
    mail_replica = tcp:192.168.135.236:4092
}

Статистику репликации пользователей можно посмотреть командой doveadm replicator status "шаблон имени":

# doveadm replicator status test*
username                   priority fast sync full sync success sync failed
test@robust.local          none     02:11:01  18:32:00  02:11:01     -