If you're running mail server for large ISP, sometimes we may need to think of replicating your emails in two servers for redundancy, this is very possible if your are running Linux mail server with postfix, dovecot and mysql, and this is archived by using Devocot dsync.
dsync is Dovecot's mailbox synchronization utility. It can be used for several different use cases: Two-way synchronization of mailboxes, creating backups of mails, and convert mailboxes from/to different mailbox formats. All of these can be used within the same server or between different servers (via ssh(1) or tcp connections). Remote mailboxes can be accessed also via IMAP protocol, which allows using dsync for mailbox migration purposes.
Below is configuration on how to sync emails between two servers, Server A is fully configured original server and server B is new server which you will sync emails from Server A, make sure Server B is fully configured also, then follow the steps below to sync emails between server A and B.
Server A
Backup/export the email database from original server
mysqldump -u [username] -p [database name] > [database name].sql
eg. if my database is mail and user is postfix the command will be,
mysqldump -u postfix -p mail > emailbackup.sql
Server B
Restore/import email database to second server.
mysql -u [username] -p newdatabase < [database name].sql
The following configuration should be done on both servers
a. Enable notify and replication plugins
Open the file,
/etc/dovecot/conf.d/10-mail.conf
and add the following,
# Enable globally the notify and replication plugins # This will then apply to all protocols dovecot supports mail_plugins = notify replication
b. Enable iterative _query
Open the file
/etc/dovecot/dovecot-sql.conf.ext or /etc/dovecot/dovecot-sql.conf , according to your settings and add the following or just un-commenting the existing one.
iterate_query = SELECT username AS user FROM mailbox WHERE active = '1';
c. Create the dsync configuration file
# vi /etc/dovecot/conf.d/30-dsync.conf
and add the following:
# From here
# This sets globally the port needed to connect
# Configure the aggregator service for notifications
service aggregator {
fifo_listener replication-notify-fifo {
# Your mail user that's managing files generally is used here
user = vmail
mode = 0666
}
unix_listener replication-notify {
user = vmail
mode = 0666
}
}
# Configure the replicator service
service replicator {
process_min_avail = 1
unix_listener replicator-doveadm {
mode = 0666
}
}
service doveadm {
user = vmail
inet_listener {
# port to listen on
port = 12345
# enable SSL
#ssl = yes
}
}
doveadm_port = 12345
doveadm_password = dovecot password
# Configure target hosts for replication
# tcps can be tcp if you don't want to connect with SSL
# :port can be omitted if it's the default set globally for doveadm
plugin {
mail_replica = tcp:replica_server_IP
}
service config {
unix_listener config {
user = vmail
}
}
# Up to here.
service dovecot restart
f. If configuration is done well, run the following to check the status of syncing,
doveadm replicator status '*'
You should see the syncing is on progress.
Note,
The doveadm_password should be the same on both servers, mail_replica = tcp:replica_server_IP, for ServerA replica_server_IP is ip address of ServerB, and for ServerB replica_server_IP is ip address of ServerA.
Some usefully commands,
i. To check the replication on each server:
doveadm replicator status '*'
ii. Replicate a given email account manually
doveadm replicator replicate <email>
iii. Replicate a given email account manually IN FULL
doveadm replicator replicate -f <email>
iv. Check replication status. Also works without the email parameter.
doveadm replicator status <email>Hope it helps someone, drop comments if you face any issues.