Hello,


We have 3 nodes running, with a two way replication between 2 of them and a 1 way replication to a DR node running off one. We use mdbox, and directors to split traffic across nodes. There is no shared file system.


Users are experiencing messages reappearing in their INBOX as unread with duplicate GUID and message headers. This occurs generally several days after a message was first received (and often actioned; read, moved, trashed, expunged, also often bulk moved/deleted).


We have attempted to remove replication from the equation by cutting down to one single node with all replication disabled which did not have any impact. We have also started regular cache and mailbox purging. There are no logged events when mail items reappear, and we only observe it based on user report, mailbox inspection (doveadm looking for duplicate GUIDs/unique message headers) or seeing IMAP commands being done against the same message twice (e.g. monday they copy to trash, delete and expunge from inbox, delete and expunge from trash, then the next monday they will have to do the same for the reappearing message).


OS: Centos 7

Dovecot: dovecot -version


Scheduled jobs:

*/15 0 * * 0 doveadm sync -u "*" tcps:<dr node>:12345 > /var/log/dovecot/dr_sync.log 2>&1

1 3 * * * doveadm mailbox cache purge -A INBOX

21 3 * * * doveadm mailbox cache purge -A Trash

0 1 * * 0 /usr/bin/doveadm purge -A >/dev/null 2>&1


Conf: dovecot -n

# 2.3.16 (7e2e900c1a): /etc/dovecot/dovecot.conf

# OS: Linux 3.10.0-1160.53.1.el7.x86_64 x86_64 CentOS Linux release 7.9.2009 (Core)

# Hostname: <primary node>

auth_master_user_separator = *

default_vsz_limit = 1 G

disable_plaintext_auth = no

dotlock_use_excl = no

doveadm_password = # hidden, use -P to show it

listen = *

mail_fsync = always

mail_location = mdbox:~/mail

mail_nfs_index = yes

mail_nfs_storage = yes

mail_plugins = " notify replication"

mmap_disable = yes

namespace inbox {

  inbox = yes

  location =

  mailbox Drafts {

    special_use = \Drafts

  }

  mailbox Junk {

    special_use = \Junk

  }

  mailbox Sent {

    special_use = \Sent

  }

  mailbox "Sent Messages" {

    special_use = \Sent

  }

  mailbox Trash {

    autoexpunge = 30 days

    special_use = \Trash

  }

  prefix =

  separator = .

}

passdb {

  args = /etc/dovecot/conf.d/passwd.masterusers

  driver = passwd-file

  master = yes

}

passdb {

  args = /etc/dovecot/conf.d/passwd.masterusers

  driver = passwd-file

}

plugin {

  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename save flag_change

  mail_log_fields = uid box msgid size flags

  mail_log_group_events =

  mail_replica = tcps:<second node>:12345

}

protocols = imap

service aggregator {

  fifo_listener replication-notify-fifo {

    mode = 0666

    user = vmail

  }

  unix_listener replication-notify {

    mode = 0666

    user = vmail

  }

}

service doveadm {

  inet_listener {

    port = 12345

    ssl = yes

  }

}

service imap-login {

  inet_listener imap {

    port = 144

  }

  inet_listener imaps {

    port = 994

    ssl = yes

  }

}

service replicator {

  process_min_avail = 1

  unix_listener replicator-doveadm {

    mode = 0666

  }

}

ssl = required

ssl_cert = </etc/pki/dovecot/certs/dovecot-internal.pem

ssl_cipher_list = TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

ssl_client_ca_file = /etc/ssl/certs/ca-bundle.crt

ssl_dh = # hidden, use -P to show it

ssl_key = # hidden, use -P to show it

ssl_prefer_server_ciphers = yes

userdb {

  args = /etc/dovecot/conf.d/dovecot-dict-auth.conf.ext

  driver = dict

}

userdb {

  args = /etc/dovecot/conf.d/dovecot-ldap.conf.ext

  driver = ldap

}

protocol imap {

  mail_max_userip_connections = 9999

  mail_plugins = " notify replication mail_log notify"

}


Any thoughts would be greatly appreciated.


Thanks in advance,

Andrew