On 13.2.2010, at 17.48, Stefan Foerster wrote:
- Use a HA shared storage, export either a cluster filesystem or NFS, and have your dovecot servers mount that file system. Load balance these servers (Cisco ACE, ldirectord, ...) and there you go.
With NFS if you want to avoid random errors, you still need to do the load balancing in a way that user's mails are never accessed simultaneously from two servers at the same time. See recent "quick question" thread about this. Cluster filesystems should be able to handle this better, although for performance it's probably still a good idea to do this.
- Set up every dovecot server with local storage and trigger a dsync after each change (pyinotfiy, incron, parse LMTP delivery logs, ...). Load balance these servers as before. Depending on the number of syncs that have to be done, mailbox replication may lag behind. The need to constantly spawn dsync processes may further decrease performance if you don't do it right (stickiness of established connections, replicating at most every xyz seconds).
The above solution would require some new development to create such a daemon that keeps track of changes and dsyncs users when necessary. The fastest way would probably be to create a plugin that uses notify plugin's events and sends them to the daemon.
dsync process creation could be avoided by making dsync another service that listens on unix socket. Wouldn't be a big change. v2.0 makes this really easy :)
Also 3) Use DRBD server pairs.