Today's pop quiz: replication
Nic Bernstein
nic at onlight.com
Thu Jul 23 09:42:10 EDT 2015
On 07/23/2015 01:14 AM, ellie timoney wrote:
>> Is the file format of the sync log defined anywhere? I assume it
>> >correlates with a set of commands. (Not that this is important to a
>> >user: it may as well be opaque, but it made me wonder!)
> I'm a bit confused about this myself. Each time I go digging into the
> code my understanding flips back the opposite way.
>
> I think, either:
>
> * the sync log contains all the information needed to reproduce what's
> happened (e.g. if a message has arrived, the sync log will contain the
> message itself); OR
> * the sync log contains just enough to identify things that have changed
> (e.g. if a message has arrived, the sync log contains a message id of
> some sort), and the sync_client processing the log just uses the log to
> discover which things to sync, but then uses the actual mailbox to
> construct the changes to send to the replica.
>
> Either way I haven't seen any documentation on the sync log format. I
> suspect it's either the raw sync protocol or some subset thereof?
Okay, I'll bite. Here's what a bit of a sync_log looks like:
MAILBOX user.newjersey
MAILBOX user.support
USER onlight
USER nic
USER admin
USER randy
MAILBOX user.randy.Trash
USER lynn
MAILBOX user.lynn.Trash
It's basically a list of either users or mailboxes which have been
altered. When sync_log is enabled, all of the daemons which might alter
a mailbox or user will write a line to this log each time they do so.
That means the obvious suspects -- imapd, pop3d, timsieved, lmtpd, etc.
-- but also cyr_expire and friends (as in the USER...MAILBOX couplets at
the end of the sample).
> - a single cyrus instance may be the primary server for some users but a
> replica server for other users
Are you sure about that? How does one specify the users for which such
an instance would play each role? A single HOST may run separate
instances, which may perform these different roles, but I cannot fathom
how to configure a single instance to do both at once for different user
cohorts.
This raises potential problems when one deploys replication within a
murder (Cyrus aggregation). Only one server may claim ownership of any
given mailbox, via a mupdate call, so an instance which is a replica MAY
NOT push updates to mupdate master, or mayhem will ensue. Here's a
commented section from /etc/cyrus.conf on a replication master instance:
##
# Master sends mailbox updates to mupdate.
# Replication client runs on Master.
# Comment these 2 lines out on replicas
mupdatepush cmd="/usr/lib/cyrus/bin/ctl_mboxlist -m"
syncclient cmd="/usr/lib/cyrus/bin/sync_client -r"
A nice daydream of mine envisions a world wherein mailboxes.db keeps
track of replica locations, as well, which would allow for the dual-role
operation Ellie describes.
Cheers,
-nic
--
Nic Bernstein nic at onlight.com
Onlight llc. www.onlight.com
219 N. Milwaukee St., Ste. 2A v. 414.272.4477
Milwaukee, Wisconsin 53202 f. 414.290.0335
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.andrew.cmu.edu/pipermail/cyrus-devel/attachments/20150723/c0448aa6/attachment.html
More information about the Cyrus-devel
mailing list