MongoDB - Replication (Repliciranje)
Repliciranje predstavlja proces kojim omogućava da se određeni set informacija (data) nalazi na više od jednog MongoDB servera.
Razlozi za ovim procesom mogu biti različiti:
- Potreba da se poveća dostupnost data-e.
- U slučaju da glavni MongoDB server se ugasi iz bilo kog razloga, a da nema replikacija, data ne bi bila dostupna. Zato je dobro da se data replicira u određenim intervalima kako bi bilo sinhronizovano sa glavnim serverom.
- Zarad mogućnosti "Load Balancing-a". To jest, ukoliko se previše korisnika konektuje na sistem istovremeno, umesto da se svi konektuju na jedan sistem i preopterete ga, ovo omogućava korišćenje više servera i rešavanje ovakvih problema.
Više MongoDB servera sa istim setom informacija se grupišu u setove i nazivaju se "Replica sets". Jedan replika set uvek ima jedan primarni server koji prihvata sve "write" operacije od strane klijenta. Sve ostale instance dodate u ovaj set posle primarnog nazivaju se sekundarnim instancama i one se koriste isključivo za "read" operacije.
Sekundarni serveri predstavljaju repliku primarnog, i svaka promena na primarnom će se prikazati i na sekundarnim serverima. U slučaju da dođe do neke greške i primarni server postane nedostupan, najpovoljniji sekundarni server će biti izabran i automatski će postati primaran.
Primer
Da bi se omogućilo repliciranje, prvo je potrebno da se naprave replika setovi MongoDB instance.
Pretpostavimo da imamo 3 servera, Serve1, Server2, Server3. Server1 će biti naš primarni server, do će preostala dva biti sekundarni.
Dodavanje prvog člana
Koraci za kreiranje replika seta sa postavljanjem primarnog servera su sledeći:
Korak 1) Osigurati da sve mongod.exe instance koje će biti dodate replika setu su instalirane na različitim serverima. Ovo se radi da bi se osiguralo da i ako jedan server "padne", ostali budu dostupni i tako i instance MongoDB budu dostupne.
Korak 2) Osigurati da se sve mongo.eve instance mogu konektovati međusobno. Ovo bi se učinilo tako što vbi se sa Server1 izvršile sledeće komande
mongo -host Server2 -port 27017
mongo -host Server3 -port 27017
A zatim je potrebno da se ove dve komande ponove sa ostalih servera (i tako se međusobno sve povežu).
Korak 3) Pokrenuti prvi mongod.exe instancu sa "replSet" opcijom. Ova opcija omogućava grupisanje svih servera koji će biti deo replica seta.
mongo -replSet "ReplikaSet1"
U ovom slučaju replika set bi se zvao "ReplikaSet1", ime je proizvoljno.
Korak 4) Kada je prvi server dodat replika setu, sledeći korak bi bila inicijalizacija seta koristeći sledeću komandu
rs.initiate()
Korak 5) Zatim treba izvršiti verifikaciju replika seta i proveriti da li je set postavljen pravilno. To se izvršava komandom
rs.conf()
Dodavanje sekundarnih servera
Dodavanje sekundarnih servera se jednostavno izvršava korišćenjem rs.add
komande. Komanda prima ime servera i dodaje ga replikacionom setu.
Kako je Server1 definisan kao primarni server, dodajemo Server2 i Server3 kao sekundarne
rs.add("Server2")
rs.add("Server3")
Rekonfiguracija i brisanje servera
Ukoliko želimo da uklonimo server iz konfiguracionog seta, koristićemo rs.remove()
komandu.
Korak 1) Prvo treba ugasiti instancu koju želimo da obrišemo. To se čini tako što se izvrši komanda db.shutdownserver()
komanda unutar mongo shell-a te instance.
Korak 2) Zatim se konektujemo na primarni server, i sa primarnog servera koristimo rs.remove()
komandu koja prima ime servera koji želimo da obrišemo. Na primer ako želimo da obrišemo Server3 kucamo:
rs.remove("Server3")
Replikacija se koristi da bi se osigurala dostupnost data-e unutar MongoDB servera u svakom scenariju. Unutar replikacionog seta mogu se dodati proizvoljni broj MongoDB instanci, uglavnom broj zavisi od potreba sistema.