Dear all,
replying to my own question ;-)
this document explains the rbd mirroring / journaling process more in details:
https://pad.ceph.com/p/I-rbd_mirroring
on startup, replay journal from flush positionStore journal metadata in journal header, to be more general
- flush position
- per-zone flush positions
pointers to positions in the journal (object, offset)- one for each reader so we can tell how far we can trim- store trim pos in primary and secondary zones, so despite loss of primary dc we can tell who's most up to date
on open, replay recent journal operations periodically update a journal position pointer in the rbd image header (to limit replays on open)
If a split-brain event is detected by therbd-mirrordaemon, it will not attempt to mirror the affected image until corrected.
Hello
Short question regarding journal-based rbd mirroring.
a.
Create an event to describe the update
b.
Asynchronously append event to journal object
c.
Asynchronously update image once event is safe
d.
Complete IO to client once update is safe
If not, then the primary and secondary images would get out-of-sync (because of the extra write(s) on secondary) and subsequent writes to the primary would corrupt the secondary. Is that correct?
Cheers
Francois Scheurer