Cvičenie 5 - Distribuované nasadenie MongoDB

Cieľom piateho cvičenia je naučiť sa konfigurovať databázu MongoDB v distribuovanom prostredí.

Architektúra distribuovanej databázy

Distribuovaná databáza sa skladá z dátových uzlov na ktorých sú uložené rozdelené dáta a smerovacieho uzla, na ktorý sa prihlasujú klienti. Dopyt je najprv poslaný na smerovací uzol ktorý ho prepošle na dátové uzly, tie vrátia čiastkové výsledky, ktoré potom smerovací uzol skombinuje do celkového výsledku. Aby smerovací uzol vedel ako sú dáta rozdelené na jednotlivé dátové uzly, všetky konfigurácie a nastavenia sú uložené na konfiguračnom serveri. Aby sa zachovala spoľahlivosť systému, konfiguračné dáta sú uložené na 3 nezávislých serveroch.

Na cvičení budete pracovať v dvojiciach na jednom serveri a rozdelíte sa na dve podskupiny po 5 serveroch (tzn. v jednej podskupine bude 10 študentov). Každá podskupina si bude budovať svoju vlastnú inštaláciu zloženú z jedného smerovacieho uzla, 3 konfiguračných uzlov a 4 dátových uzlov.

Napr. pre 1 cvičiacu skupinu, ktorá má priradené adresy 147.232.202.61147.232.202.70 bude mať inštalácia prvej podskupiny konfiguráciu:

a pre inštaláciu druhej podskupiny:

Rovnako sú rozdelené adresy pre druhú cvičiacu skupinu 147.232.202.71-147.232.202.80 a pre tretiu 147.232.202.81-147.232.202.90.

Skontrolujte si akú máte priradenú IP adresu servera. Ak vaša adresa končí číslom:

  • 1 alebo 6 - budete konfigurovať smerovací uzol
  • 2,3,4,7,8,9 - budete konfigurovať konfiguračný uzol
  • 0 alebo 5 - otestujete konfiguračné uzly vo vašej podskupine (dátový uzol je štandardná konfigurácia, ktorú ste si nainštalovali na minulom cvičení)

Pracujete v dvojiciach na jednom serveri a každý príkaz je potrebné vykonať iba raz!

Postup bude nasledovný:

  1. Každá dvojica urobí spoločné nastavenia.
  2. Skonfigurujete konfiguračné servery.
  3. Otestujete konfiguračné servery.
  4. Skonfigurujete smerovací server.
  5. Každý si zvlášť samostatne vytvorí distribuovanú kolekciu a vyskúša si dopytovanie.

Spoločné nastavenia

Prihláste sa s klientom mongo na lokálny server a zmažte testovaciu databázu z minulého cvičenia. V príkazovom riadku monga zadajte príkazy:

use tsvd
db.runCommand( { dropDatabase: 1 } )
quit()

Je potrebné spustiť službu mongod na verejne dostupnej adrese. Zmeňte konfiguračný súbor /etc/mongod.conf a zakomentujte riadok s nastavením bindIp.

sudo nano /etc/mongod.conf
...
#  bindIp 127.0.0.1

Pre distribuovanú komunikáciu je potrebné vypnúť zabezpečenie systému Linux. Otvorte súbor /etc/selinux/config a zmeňte nastavenie premennej SELINUX na disabled.

sudo nano /etc/selinux/config
...
SELINUX=disabled

Vypnite spúšťanie služby firewallu iptables. Zmeny zabezpečenia sa prejavia až po reštarte. Reštartujte server a znova sa prihláste.

sudo chkconfig iptables off
sudo reboot now

Konfigurácia konfiguračných serverov

Najprv je potrebné vytvoriť adresár pre konfiguračnú databázu a nastaviť jeho prístupové práva.

sudo mkdir /var/lib/mongo-conf
sudo chown mongod:mongod /var/lib/mongo-conf/

Spustite konfiguračný server.

sudo mongod --configsvr --replSet configReplSet --port 27019  --dbpath /var/lib/mongo-conf/
Server sa spustí priamo v okne. Okno terminálu v ktorom beží konfiguračná služba nezatvárajte, spustite si ďalšie okno terminálu PuTTY a znovu sa prihláste na server.

Testovanie konfiguračných serverov

Keď budú všetky tri konfiguračné servery vo vašej podskupine bežať, otestuje ich pripojením cez klienta mongo. Pri volaní musíte nastaviť port konfiguračného servera 27019. (dosaďte IP vašej konfigurácie)

mongo --host 147.232.202.X2/7  --port 27019
...
quit()
mongo --host 147.232.202.X3/8  --port 27019
...
quit()
mongo --host 147.232.202.X4/9  --port 27019
...
quit()

Po otestovaní pripojenia sa pripojte na jeden z konfiguračných serverov a spustite príkaz na inicializáciu konfiguračnej databázy. (Inicializačný príkaz musí byť zapísaný v jednom riadku)

mongo --host 147.232.202.X3/7  --port 27019
...
rs.initiate( { _id: "configReplSet", configsvr: true, members: [
  { _id: 0, host: "147.232.202.X2/7:27019" },
  { _id: 1, host: "147.232.202.X3/8:27019" },
  { _id: 2, host: "147.232.202.X4/9:27019" }
] } )
quit()

Konfigurácia smerovacieho servera

Po nakonfigurovaní konfiguračnej databázy môžete spustiť smerovací server. Najprv však musíte vypnúť lokálny server mongod.

sudo service mongod stop
sudo mongos --configdb configReplSet/147.232.202.X2/7:27019;147.232.202.X3/8:27019;147.232.202.X4/9:27019
Server sa spustí priamo v okne. Okno terminálu v ktorom beží smerovací server nezatvárajte, spustite si ďalšie okno terminálu PuTTY a znovu sa prihláste na server.

Cez klienta mongo sa pripojte na bežiaci smerovací server a pridajte do konfigurácie dátové uzly, ktoré budú uchovávať rozdelené dáta.

mongo 147.232.202.X1/6
...
sh.addShard("147.232.202.X2/7:27017”)
sh.addShard("147.232.202.X3/8:27017”)
sh.addShard("147.232.202.X4/9:27017”)
sh.addShard("147.232.202.X5/0:27017”)

Ďalej je potrebné povoliť sharding (distribuovanie dát) pre databázu.

sh.enableSharding("tsvd")

Práca s distribuovanou databázou

S distribuovanou databázou sa pracuje podobne ako s pripojením k jednému serveru, pripája sa však na smerovací server.

mongo --host 147.232.202.X1/6

Všetci budete pracovať s jednou databázou tsvd, ale vytvoríte si vlastnú kolekciu s názvom podľa vášho priezviska (s malými písmenami bez diakritiky). Najprv nakonfigurujete distribuovanie kolekcie:

sh.shardCollection("tsvd.priezvisko", { "_id": "hashed" } )

Skončite klient mongo a importujte dáta do vašej kolekcie.

mongoimport --host 147.232.202.X1/6 --db tsvd --collection priezvisko --file restaurants.json

Znovu sa prihláste a zobrazte informácie o vašej distribuovanej kolekcii.

mongo --host 147.232.202.X1/6
...
use tsvd
sh.status()

Úlohy

Vyskúšajte si dopyty z predchádzajúceho cvičenia na distribuovanej databáze.