Clustering and replication

Wesley Craig wes at umich.edu
Fri Jan 26 10:38:42 EST 2007


On Jan 26, 2007, at 3:07 AM, Tom Samplonius wrote:
> ----- Janne Peltonen <janne.peltonen at helsinki.fi> wrote:
>> As a part of our clustering Cyrus system, we are considering using
>> replication to prevent a catastrophe in case the volume used by the
>> cluster gets corrupted. (We'll have n nodes each accessing the  
>> same GFS,
>> and yes, it can be done, see previous threads on the subject.)
>
>   I really doubt this.  Even if GFS works the way it says it does,  
> Cyrus does not expect to see other instances modifying the same  
> message, and does not lock against itself.

Yes it does.  How else do you suppose two users reading the same  
shared mailbox might work?  They aren't all running through one imapd.

>> Now the workings of the replication code aren't completely clear  
>> to me.
>> It can do things like collapse multiple mailbox changes into one  
>> and so
>> on. But is it in some way dependent on there being just one cyrus- 
>> master
>> controlled group of imapd processes to ensure that all changes to the
>> spool (and meta) get replicated? Or does the replication code  
>> infer the
>> synchronization commands from changes it sees on the spool,  
>> independent
>> of the ongoing imap connections? That is, do I have to have n replica
>> nodes, one for each cluster node? Or don't I?
>
>   The Cyrus master builds a replication log as changes are made by  
> imapd, pop3d, and lmtpd.  The log contents are pushed to the  
> replica.  The master and replica both have copies of all data,  
> within independent message stores.

Close.  imapd, pop3d, lmtpd, and other processes write to the log.   
The log is read by sync_client.  This merely tells sync_client what  
(probably) has changed.  sync_client roll up certain log items, e.g.,  
it may decide to compare a whole user's state rather than just  
looking at multiple mailboxes.  Once it decides what to compare, it  
retrieves IMAP-like state information from sync_server (running on  
the replica) and pushes those changes that are necessary.

For your situation, Janne, you might want to explore sharing the sync  
directory.  sync_client and sync_server have interlock code, tho I  
haven't reviewed it for this specific scenario.

:wes


More information about the Info-cyrus mailing list