Odd replication behaviour
Hi,
I have just built a new pair of similar machines both running CentOS 8.2 (selinux disabled) and Dovecot 2.3.8 (9df20d2db).
One machine is a VPS (host A) and one is on my home network (host B). The idea is that they are set up in a master/master config with Dovecot replication.
I seem to have this 95% working but there is one strange issue I can’t work out.
Currently B is a perfect replica of A. I have pointed an instance of Thunderbird at it, and I can see all my mails. If I delete any mails or change any flags, I see the same changes almost instantly on the A side.
PROBLEM: if host A receives a new mail, I don’t see it on B until I do ‘something’ to change metadata, for example deleting any random email, or marking an email as read on EITHER side causes the new email to appear almost instantly on the B side.
I would have expected emails on B to appear immediately. Am I doing something wrong?
Extra info - my mailboxes are in Maildir format with single OS user (vmail). I have about 4000 emails in the Inbox and about 30k in other folders.
There are only 5 users and I’m using passdb as the very simple backend.
Replication is via doveadm on a specified port (not SSH). Some output from dovecot -n is below.
Cheers James
HOST A
# 2.3.8 (9df20d2db): /etc/dovecot/dovecot.conf # Pigeonhole version 0.5.8 (b7b03ba2) # OS: Linux 4.18.0-193.28.1.el8_2.x86_64 x86_64 CentOS Linux release 8.2.2004 (Core) xfs # Hostname: hosta.domain auth_mechanisms = plain login doveadm_password = # hidden, use -P to show it doveadm_port = 4040 first_valid_uid = 1000 mail_debug = yes mail_home = /srv/vmail/%u mail_location = maildir:/srv/vmail/%u mail_plugins = notify replication managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext mbox_write_locks = fcntl namespace inbox { inbox = yes location = mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = subscribe special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { auto = subscribe special_use = \Trash } prefix = } passdb { args = scheme=BLF-CRYPT username_format=%u /etc/dovecot/users driver = passwd-file } plugin { mail_replica = tcp:b.b.b.b:4040 sieve = file:~/sieve;active=~/.dovecot.sieve sieve_before = /var/mail/SpamToJunk.sieve } protocols = imap lmtp service aggregator { fifo_listener replication-notify-fifo { group = root mode = 0660 user = vmail } unix_listener replication-notify { group = root mode = 0660 user = vmail } } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0600 user = postfix } } service doveadm { inet_listener { port = 4040 } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } } service replicator { process_min_avail = 1 unix_listener replicator-doveadm { mode = 0600 user = vmail } } ssl = required ssl_cert =
HOST B
# 2.3.8 (9df20d2db): /etc/dovecot/dovecot.conf # Pigeonhole version 0.5.8 (b7b03ba2) # OS: Linux 4.18.0-193.28.1.el8_2.x86_64 x86_64 CentOS Linux release 8.2.2004 (Core) ext4 # Hostname: hostb auth_mechanisms = plain login doveadm_password = # hidden, use -P to show it doveadm_port = 4040 first_valid_uid = 1000 mail_debug = yes mail_home = /srv/vmail/%u mail_location = maildir:/srv/vmail/%u mail_plugins = notify replication managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext mbox_write_locks = fcntl namespace inbox { inbox = yes location = mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = subscribe special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { auto = subscribe special_use = \Trash } prefix = } passdb { args = scheme=BLF-CRYPT username_format=%u /etc/dovecot/users driver = passwd-file } plugin { mail_replica = tcp:a.a.a.a:4040 sieve = file:~/sieve;active=~/.dovecot.sieve sieve_before = /var/mail/SpamToJunk.sieve } protocols = imap lmtp service aggregator { fifo_listener replication-notify-fifo { group = root mode = 0660 user = vmail } unix_listener replication-notify { group = root mode = 0660 user = vmail } } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0600 user = postfix } } service doveadm { inet_listener { port = 4040 } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } } service replicator { process_min_avail = 1 unix_listener replicator-doveadm { mode = 0600 user = vmail } } ssl = required ssl_cert =
Solved. I knew this would happen. The act of writing it all out and including the configuration output gave me the solution.
I am using lmtp to deliver mail from postfix to Dovecot. I was missing the notify and replication plugins from 20-lmtp.conf
They were only present in 10-mail.conf as
mail_plugins = notify replication
Now, adding to 20-lmtp.conf:
protocol lmtp { mail_plugins = sieve notify replication }
Works fine now. Hope this helps someone else.
Cheers James
On 31 Oct 2020, at 14:40, James Pattinson james@pattinson.org wrote:
Hi,
I have just built a new pair of similar machines both running CentOS 8.2 (selinux disabled) and Dovecot 2.3.8 (9df20d2db).
One machine is a VPS (host A) and one is on my home network (host B). The idea is that they are set up in a master/master config with Dovecot replication.
I seem to have this 95% working but there is one strange issue I can’t work out.
Currently B is a perfect replica of A. I have pointed an instance of Thunderbird at it, and I can see all my mails. If I delete any mails or change any flags, I see the same changes almost instantly on the A side.
PROBLEM: if host A receives a new mail, I don’t see it on B until I do ‘something’ to change metadata, for example deleting any random email, or marking an email as read on EITHER side causes the new email to appear almost instantly on the B side.
I would have expected emails on B to appear immediately. Am I doing something wrong?
Extra info - my mailboxes are in Maildir format with single OS user (vmail). I have about 4000 emails in the Inbox and about 30k in other folders.
There are only 5 users and I’m using passdb as the very simple backend.
Replication is via doveadm on a specified port (not SSH). Some output from dovecot -n is below.
Cheers James
HOST A
# 2.3.8 (9df20d2db): /etc/dovecot/dovecot.conf # Pigeonhole version 0.5.8 (b7b03ba2) # OS: Linux 4.18.0-193.28.1.el8_2.x86_64 x86_64 CentOS Linux release 8.2.2004 (Core) xfs # Hostname: hosta.domain auth_mechanisms = plain login doveadm_password = # hidden, use -P to show it doveadm_port = 4040 first_valid_uid = 1000 mail_debug = yes mail_home = /srv/vmail/%u mail_location = maildir:/srv/vmail/%u mail_plugins = notify replication managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext mbox_write_locks = fcntl namespace inbox { inbox = yes location = mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = subscribe special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { auto = subscribe special_use = \Trash } prefix = } passdb { args = scheme=BLF-CRYPT username_format=%u /etc/dovecot/users driver = passwd-file } plugin { mail_replica = tcp:b.b.b.b:4040 sieve = file:~/sieve;active=~/.dovecot.sieve sieve_before = /var/mail/SpamToJunk.sieve } protocols = imap lmtp service aggregator { fifo_listener replication-notify-fifo { group = root mode = 0660 user = vmail } unix_listener replication-notify { group = root mode = 0660 user = vmail } } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0600 user = postfix } } service doveadm { inet_listener { port = 4040 } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } } service replicator { process_min_avail = 1 unix_listener replicator-doveadm { mode = 0600 user = vmail } } ssl = required ssl_cert =
HOST B
# 2.3.8 (9df20d2db): /etc/dovecot/dovecot.conf # Pigeonhole version 0.5.8 (b7b03ba2) # OS: Linux 4.18.0-193.28.1.el8_2.x86_64 x86_64 CentOS Linux release 8.2.2004 (Core) ext4 # Hostname: hostb auth_mechanisms = plain login doveadm_password = # hidden, use -P to show it doveadm_port = 4040 first_valid_uid = 1000 mail_debug = yes mail_home = /srv/vmail/%u mail_location = maildir:/srv/vmail/%u mail_plugins = notify replication managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext mbox_write_locks = fcntl namespace inbox { inbox = yes location = mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = subscribe special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { auto = subscribe special_use = \Trash } prefix = } passdb { args = scheme=BLF-CRYPT username_format=%u /etc/dovecot/users driver = passwd-file } plugin { mail_replica = tcp:a.a.a.a:4040 sieve = file:~/sieve;active=~/.dovecot.sieve sieve_before = /var/mail/SpamToJunk.sieve } protocols = imap lmtp service aggregator { fifo_listener replication-notify-fifo { group = root mode = 0660 user = vmail } unix_listener replication-notify { group = root mode = 0660 user = vmail } } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0600 user = postfix } } service doveadm { inet_listener { port = 4040 } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } } service replicator { process_min_avail = 1 unix_listener replicator-doveadm { mode = 0600 user = vmail } } ssl = required ssl_cert =
participants (1)
-
James Pattinson