MongoMultiMaster är en Python verktyg som låter dig ställa in multi-master-replikering med MongoDB. & Nbsp; Det är absolut inte stöds av 10gen, skaparna av MongoDB.
Det fungerar genom att fråga oplog på en replikuppsättning och tillämpa sin verksamhet till en annan replik set. Den stöder dubbelriktad replikering genom att tagga varje dokument replik med dess källa.
Installera
För att installera, använda pip:
Pip installera MongoMultiMaster
MongoDB Setup
MMM behöver tillgång till repliken ställa oplog för varje master. Detta betyder att det inte fungerar med servrar som är konfigurerade som fristående servrar. För att konvertera en fristående server till en singleton replikuppsättning, först måste du berätta det om den inställda det är i vid lanseringen tid:
& Nbsp; mongod --replSet foo
Sedan, för att starta replikuppsättning måste du utföra följande på mongo skal:
> Rs.initiate ()
MongoMultiMaster Replication Setup
När du har skapat den replikuppsättning herre, måste du tala om för MMM där servrarna är. Detta görs genom en YAML konfigurationsfil. Ett prov konfigurationsfil med två servrar ingår nedan:
server_a:
& Nbsp; id: '2c88ae84-7cb9-40f7-835d-c05e981f564d "
& Nbsp; uri: 'mongodb: // localhost: 27019'
server_b:
& Nbsp; id: '0d9c284b-b47c-40b5-932c-547b8685edd0 "
& Nbsp; uri: 'mongodb: // localhost: 27017'
Låt oss först kontrollera att det inte finns någon konfiguration och att vi kan ansluta till alla servrar i konfigurationsfilen:
mmm -c test.yml klar-config
Om att rensa config på servrar: ['server_a', 'server_b'], är du säker? (Yn) y
Rensa config för server_a
Rensa config för server_b
& Nbsp; mmm -c test.yml dumpa-config
=== Server Config ===
server_a (2c88ae84-7cb9-40f7-835d-c05e981f564d) => mongodb: // localhost: 27019
server_b (0d9c284b-b47c-40b5-932c-547b8685edd0) => mongodb: // localhost: 27017
=== Server_a Replikering Config
=== Server_b Replikering Config
Nu ska vi sätta upp två replike samlingar:
& Nbsp; mmm -c test.yml replikat --src = server_a / test.foo --dst = server_b / test.foo
& Nbsp; mmm -c test.yml replikat --src = server_a / test.bar --dst = server_b / test.bar
Och bekräfta att de är korrekt konfigurerad:
mmm -c test.yml dump-config
=== Server Config ===
server_a (2c88ae84-7cb9-40f7-835d-c05e981f564d) => mongodb: // localhost: 27019
server_b (0d9c284b-b47c-40b5-932c-547b8685edd0) => mongodb: // localhost: 27017
=== Server_a Replikering Config
=== Server_b Replikering Config
& Nbsp; - test.foo <= server_a / test.foo
& Nbsp; - test.bar <= server_a / test.bar
Nu, låt oss göra det replikeringsdubbelriktad:
& Nbsp; mmm -c test.yml replikat --src = server_b / test.foo --dst = server_a / test.foo
& Nbsp; mmm -c test.yml replikat --src = server_b / test.bar --dst = server_a / test.bar
Och kontrollera att det är rätt ...
mmm -c test.yml dump-config
=== Server Config ===
server_a (2c88ae84-7cb9-40f7-835d-c05e981f564d) => mongodb: // localhost: 27019
server_b (0d9c284b-b47c-40b5-932c-547b8685edd0) => mongodb: // localhost: 27017
=== Server_a Replikering Config
& Nbsp; - test.foo <= server_b / test.foo
& Nbsp; - test.bar <= server_b / test.bar
=== Server_b Replikering Config
& Nbsp; - test.foo <= server_a / test.foo
& Nbsp; - test.bar <= server_a / test.bar
Nu kan vi köra replikatorn:
& Nbsp; mmm -c test.yml körning
Saker att tänka
- Replikering kan halka efter om du skriver mycket. Detta hanteras inte alls.
- Replikering börjar vid den tidpunkt då mmm körning först kallades. Du bör kunna stoppa / starta mmm och ha det fortsätta där den slutade.
- Konflikter mellan mästarna inte hanteras; om du skriver till samma dokument på båda huvudena ofta kan du få ut av synk.
- Replication infogar en bokföring fält i varje dokument för att beteckna servern UUID som sist skrev dokumentet. Detta utökar storleken på varje dokument något.
Det finns förmodligen skarpa kanter, andra missade buggar och olika otäcka saker som väntar på dig om du använder MMM i ett produktionssystem utan noggranna tester. . Men om du gillar att köra med sax och i övrigt lever farligt, känn dig fri att prova det
Krav :
- Python
Kommentarer hittades inte