There were once a 'master-master replication' described here : http://www.mongodb.org/display/DOCS/Master+Master+Replication
which we used successfully with 1.4.2. However this configuration is not supported anymore, and it's not clear that is it working with newer versions, or can kill our kittens, if we try to use.
Replica sets are not enough for this kind of work, when read, and write response times are extremely crucial to be fast, and we can accept that writes are propagated lazily in the background to the other server(s). So it would be nice, if clients could connect to 'slave' servers in the replica sets, and issue write request. For a write request the following needs to be performed :
- apply the write request locally
- respond to the client with success message - so the client see fast response times
- the write request put into a 'localInitiatedOpLog' queue, which periodically flushed/sent to the actual master server.
- the master server apply that changes and propagates to all the servers in the replica set. This algorithm will produce some strange effects, if the same object is modified concurrently by different slaves, or by the same slave in rapid succession, but at the end, every node will see the same objects, as the master node decides.