Cieľom piateho cvičenia je naučiť sa konfigurovať databázu MongoDB v distribuovanom prostredí.
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.61 až 147.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:
Pracujete v dvojiciach na jednom serveri a každý príkaz je potrebné vykonať iba raz!
Postup bude nasledovný:
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
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/
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()
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
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")
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()
Vyskúšajte si dopyty z predchádzajúceho cvičenia na distribuovanej databáze.