A Dovecot active-active deployment keeps IMAP and POP3 access available on multiple nodes so client connections can be spread across servers without relying on a single active instance during maintenance or node failures.
In a Pacemaker cluster managed by pcs, Dovecot can be modeled as a systemd resource and cloned so each node runs its own dovecot.service instance. Pacemaker monitors the unit and restarts it when the service stops, while client traffic distribution stays outside the cluster via a load balancer or DNS.
Service active-active does not replicate mailbox data on its own. Mailbox storage, authentication backends, UID/GID mapping, and TLS material must match across nodes, and shared-storage environments may require Dovecot tuning to reduce index corruption risk before handing start/stop control to the cluster.
$ sudo pcs status Cluster name: clustername Cluster Summary: * Stack: corosync (Pacemaker is running) * Current DC: node-01 (version 2.1.6-6fdc9deea29) - partition with quorum * Last updated: Thu Jan 1 04:43:11 2026 on node-01 * Last change: Thu Jan 1 04:43:09 2026 by root via cibadmin on node-01 * 3 nodes configured * 0 resource instances configured Node List: * Online: [ node-01 node-02 node-03 ] Full List of Resources: * No resources Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
$ sudo doveconf -n | grep '^mail_location' mail_location = maildir:/var/vmail/%d/%n $ findmnt -n /var/vmail /var/vmail tmpfs tmpfs rw,relatime
Active-active without shared or replicated mailbox data can present different mailbox state per node and may corrupt Dovecot index files.
$ systemctl list-unit-files --type=service | grep -E '^dovecot\.service' dovecot.service disabled enabled
$ sudo pcs resource create dovecot_service systemd:dovecot op monitor interval=30s
Related: How to create a Pacemaker resource
$ sudo pcs resource clone dovecot_service
$ sudo pcs status resources
* Clone Set: dovecot_service-clone [dovecot_service]:
* Started: [ node-01 node-02 node-03 ]
$ sudo systemctl disable dovecot Synchronizing state of dovecot.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install disable dovecot Synchronizing state of dovecot.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install disable dovecot Synchronizing state of dovecot.service with SysV service script with /usr/lib/systemd/systemd-sysv-install. Executing: /usr/lib/systemd/systemd-sysv-install disable dovecot
Pcs-managed starts still work for disabled systemd units.
$ sudo ss -lntp | grep -E ':(143|993|110|995)\b'
LISTEN 0 100 0.0.0.0:995 0.0.0.0:* users:(("dovecot",pid=184664,fd=23))
LISTEN 0 100 0.0.0.0:993 0.0.0.0:* users:(("dovecot",pid=184664,fd=38))
LISTEN 0 100 0.0.0.0:143 0.0.0.0:* users:(("dovecot",pid=184664,fd=37))
LISTEN 0 100 0.0.0.0:110 0.0.0.0:* users:(("dovecot",pid=184664,fd=22))