Hlavní navigace

PC-BSD jails – serverové aplikace a služby (ukončení)

9. 9. 2013
Doba čtení: 8 minut

Sdílet

Jails představují velmi užitečný způsob oddělení serverových aplikací v jednom operačním systému. V minulém díle byly popsány instalace a zprovoznění jailů s XMPP serverem, DMS systémem a prostředím pro vývoj aplikací v Javě. Celý seriál o jailech v dnešním díle ukončíme popisem jedné zajímavé NoSQL databáze.

PC-BSD jails – serverové aplikace a služby – ukončení

V minulém díle byly popsány instalace a zprovoznění jailů s XMPP serverem, DMS systémem a prostředím pro vývoj aplikací v Javě. Celý seriál o jailech v dnešním díle ukončíme popisem jedné zajímavé NoSQL databáze.

K. Databázový systém MongoDB

V tomto jailu bude instalována aktuální verze NoSQL databáze MongoDB. V dnešní době je k dispozici mnoho tzv. „dokumentových“ nebo „klíč-hodnota“ databází. Mezi nejznámější patří kromě MongoDB také CouchDB, Redis a Cassandra. Jejich využití je sice trochu specifické a je třeba více přemýšlet nad jejich nasazením, ale pro některé účely jsou vhodné. Konkrétně MongoDB má několik dost zajímavých vlastností:

  • jednoduchá instalace, spuštění a možnost využití silného shellového klienta
  • asi největší „podobnost“ s RDBMS databázemi
  • vyspělý a jednoduše ovladatelný Java konektor
  • rozsáhlá kolekce funkcí Java konektoru
  • jednoduchá aktivace konektoru v aplikaci
  • dostatek administračních aplikací
  • dostupnost dokumentace, literatury, návodů a zkušeností z provozu
  • dostupnost různých pluginů, rozšíření a dalších pomocných aplikací
  • možnosti ukládání libovolných dokumentů přímo do databáze, konkrétně u MongoDB do velikosti cca 16,7 MB
  • rychlý přístup k datům při čtení, ukládání a dotazech
  • ukládání velkých objemů dat
  • struktura tabulky, která jednoduše umožní ukládání více možností do jednoho pole a záznamu
  • jednoduchá replikace Master/Slave
  • snadná možnost vertikálního i horizontálního škálování
  • dostupná firemní podpora a Enterprise verze včetně podpůrných nástrojů
  • bohaté API ke všem funkcím
  • hodně užívaná v rámci NoSQL
  • dokumentový typ, dynamické schéma
  • možnosti indexování
  • vyspělý dotazovací systém, možnost využití QBE
  • full-text vyhledávání
  • vyspělá bezpečnost, autorizace a přístupové role
  • agregační framework a Map/Reduce funkce
  • integrované úložiště velkých souborů GridFS včetně možnosti využití v Java konektoru

Více podrobností a informací je možné zjistit na stránkách
www.10gen.com
www.mongodb.org

K2) instalace programů a aplikací

Vlastní databáze se instaluje pomocí jediného balíčku mongodb-2.4.4 (na webu je k dispozici stabilní verze 2.4.5 a vývojová 2.5.1). Pro potřeby podpůrných nástrojů je nutné instalovat ještě další balíčky:

  • PHP-5.4.16
  • Apache-2.2.24
  • PHP5-Extensions-1.7
  • pecl-mongo-1.4.1

K3) zprovoznění a zpřístupnění služby

  • upraví se soubor /etc/rc.conf a vloží se do něj dva řádky:
    apache22_enable=“YES“
    mongod_enable=“YES“
  • dříve popsaným způsobem se zprovozní Apache + PHP včetně zkoušky připojení a funkčnosti
  • nakopíruje se PHP inicializační soubor: # cp /usr/local/etc/php.ini-development /usr/local/etc/php.ini
  • soubor php.ini se upraví a vloží do něj nový řádek:
    date.timezone=“Europe/Prague“
  • spustí se server Apache
  • spustí se databázový server: # service mongod start
  • vyzkouší se funkčnost shellového klienta příkazem:  # mongo
  • vyzkouší se jednoduchý HTTP klient, který nabízí základní přehled o serveru a instanci MongoDB. Klient se otevře v prohlížeči na <a>http://x.y.z.IPv4-jailu:28017 – viz obrázek
  • v základním nastavení tento klient nenabízí skoro žádné funkce. Pokud bychom ho chtěli (ale opravdu jenom v nouzi…) použít, je nutné MongoDB daemona nastartovat s volbou - -rest. Více je o možnostech klienta napsáno v dokumentaci.
  • k administraci a tvorbě databází je možné využít poměrně velké množství aplikací jak placených, tak volně dostupných. Jejich podrobnější přehled je v dokumentaci.
  • pro konkrétní účel je výběr omezený kvůli využití OS PC-BSD na hostitelském stroji, takže se nakonec vyzkoušejí tři aplikace: phpMoAdminRockMongo – obě na PHP a UMongo – Java. Zajímavou aplikací je MongoBird, který slouží hlavně jako nástroj pro management a monitoring. Problém je u něj dvojí licence – tu svobodnou je možné využít pouze pro osobní a nevýdělečné účely
  • z příslušných webů se stáhnou komprimované soubory pro phpMoAdminRockMomgo
  • balíčky se rozbalí, vzniklé adresáře nebo soubory se přejmenují a překopírují do jailu: /usr/local/www/apache22/data
  • otevře se <a>http://x.y.z.IPv4-jailu/phpmoadmin.php a vyzkouší jeho funkčnost – viz obrázek
  • otevře se <a>http://x.y.z.IPv4-jailu/rockmongo – přihlášení na obrázku
  • přihlášení je nastavené na uživatele admin a heslo admin, po přihlášení se vyzkouší funkčnost, hlavní stránka po přihlášení – viz obrázek
  • z příslušného webu se stáhne komprimovaný soubor UMongo
  • tento soubor se rozbalí do příslušného adresáře hostitelského stroje
  • aplikace se spustí příkazem # sh launch-mongo.sh
  • po spuštění se otevře menu File → Connect a vyplní se příslušné údaje – viz obrázek
  • po připojení serveru vypadá aplikace podle obrázku
  • instalace a spuštění aplikace MongoBird je o něco složitější. Potřebuje totiž ke svému běhu aplikační server
  • instaluje se balíček tomcat-7.0.40
  • upraví se soubor /etc/rc.conf a přidá do něj řádek
    tomcat7_enable=“YES“
  • Tomcat se podle uvedeného popisu připraví na spuštění a deploy aplikace
  • z příslušného webu se stáhne instalační komprimovaný balíček MongoBird
  • balíček se rozbalí do nějakého adresáře na hostitelském stroji. Balíček obsahuje několik souborů a adresářů. Pro naše účely je ale zajímavý pouze soubor /mongobird_inst/warinst/tetrad.war
  • otevře se administrátorská aplikace Tomcat příkazem <a>http://x.y.z.IPv4-jailu:8080
  • otevře se formulář Manager App a přihlásíme se vytvořeným jménem a heslem pro roli manager-gui, v příkladu je to tomcat/tomcat
  • provede se deploy souboru tetrad.war a po úspěšném provedení se pokračuje v nastavení aplikace
  • vytvoří se tři adresáře:
    /usr/local/tetrad/rrd/data
    /usr/local/tetrad/rrd/img
    /usr/local/tetrad/rrd/xml
  • upraví se soubor /usr/local/apache-tomcat-7.0/webapps/tetrad/WEB-INF/classes/tetrad_rrd.properties, kde se aktualizují nebo doplní cesty k výše vytvořeným adresářům
  • upraví se soubor /usr/local/apache-tomcat-7.0/webapps/tetrad/WEB-INF/classes/monad.properties a doplní nebo zkontrolují se položky:
    mongo.host=127.0.0.1
    mongo.port=27017
    mongo.username=admin
    mongo.password=admin
  • spustí se aplikace přes <a>http://x.y.z.IPv4-jailu:8080/tetrad
  • přihlašovací údaje jsou admin/admin – viz obrázek
  • po přihlášení vypadá úvodní stránka jako na obrázku
  • jak je z obrázku zřejmé, jedná se o velmi mocný nástroj. Ke své funkci ale potřebuje další nastavení a to už je mimo záběr našeho textu. Jak může nastavená aplikace vypadat, je vidět na webu.
  • po krátkém exkurzu a zkoušení uvedených aplikací bych je podle využitelnosti seřadit takto: UMongo, RockMongo, phpMoAdmin, MongoBird
  • nastaví se FW dle pokynů Krok 4, přístupné jsou pouze porty 8080, 27017 a 28017
  • vyzkouší se vzdálené připojení z prohlížeče na porty 8080 (Tomcat), 8080/tetrad (MongoBird) a 28017 (administrace MongoDB)
  • přes Umongo se vyzkouší vzdálené připojení přímo k databázi na portu 27017
  • pokud není vzdálené připojení možné, je třeba znovu projít nastavení serveru a FW a případné nedostatky doladit

Velikost jailu a exportovaného souboru jsou následující:

# zfs list
NAME                                 USED  AVAIL  REFER  MOUNTPOINT
tank1/usr/jails/mongodb             1,19G   658G  1,58G  /usr/jails/mongodb

Velikost exportovaného WDN souboru: 490 MB

CS24_early

Samotný MongoDB server nabízí poměrně slušnou možnost nastavení přístupových práv k jednotlivým databázím. To je docela zajímavá možnost pro vážnější použití, proto se jí budu také krátce věnovat v několika bodech. Přístupy se řeší pro jednotlivé databáze a jejich uživatelům přiděluje definované role. Je k dispozici několik uživatelských i administrátorských rolí. Jejich úplný přehled je možné najít v dokumentaci.

K4) nastavení autorizace přístupu

  • server se spustí běžným způsobem uvedeným výše a přejde se do shellu příkazem:  # mongo
  • vytvoří se uživatele sysAdmin dvěma příkazy:
#  > use admin #  > db.addUser("sysAdmin","sysHeslo")
{
"user" : "sysAdmin",
"readOnly" : false,
"pwd" : "d73d4dbce3e921677cd7b55bc7e93b8a",
"_id" : ObjectId("520cb6ac4fceeed198cf34e6")
}
  • spuštění serveru se nastaví tak, aby se spouštěl s příznakem - -auth. To je možné dvojím způsobem:
    a) upravit soubor /usr/local/etc/mongodb.conf a přidat do něj řádek
    auth=true

    b) upravit soubor /usr/local/etc/rc.d/mongod a do řádku command_args přidat položku - -auth

    celý řádek vypadá defaultně takto:

    command_args="--config /usr/local/etc/mongodb.conf --dbpath $mongod_dbpath --fork >/dev/null 2>/dev/null"
  • restartuje se server a znovu se přejde do shellu
  • spustí se příkazy:
#  > use admin #  > db.auth(„sysAdmin“,“sysHeslo“) #  > db.system.users.find()
{ "_id" : ObjectId("520cba9693a9d0c9ebd79e5a"), "user" : "sysAdmin", "readOnly" : false, "pwd" : "d73d4dbce3e921677cd7b55bc7e93b8a" }
  • pokud je třeba uživatele odstranit, musí se znovu restartovat server bez autorizace a použít příkaz  #  > db.removeUser(„username“)
  • funkční jsou příkazy
#  > use test #  > show collections
  • nefunkční jsou příkazy:
#  > use test #  > db.auth(„sysAdmin“,“sysHeslo“)
  • pro nastavení přístupu k databázi test je nutné přidat uživatele také do ní:
#  > use test #  > db.addUser(„user“,“userpwd“) #  > db.addUser({user:“host“, pwd:“hostpwd“, roles:[„read“]})
  • pak jsou funkční příkazy:
#  > use test #  > db.auth(„user“,“userpwd“) #  > db.auth(„host“,“hostpwd“)
  • příkaz pro hledání systémových uživatelů je funkční pouze pro uživatele user, který má práva readWrite:
#  > db.system.users.find()
{ "_id" : ObjectId("520cbbc793a9d0c9ebd79e5b"), "user" : "user", "readOnly" : false, "pwd" : "9cbd1803884fd02a6cfe0258bbe6b8ea" }

{ "_id" : ObjectId("520cbc9993a9d0c9ebd79e5c"), "user" : "host", "pwd" : "2fdfaf7d976722de555cdabc55a27d7a", "roles" : [  "read" ] }
  • pro uživatele host s právy read bude výsledek dosti odlišný:
#  > db.system.users.find()
error: { "$err" : "not authorized for query on test.system.users", "code" : 16550 }
  • pro přihlášení z aplikace UMongo je nutné na přehledu databází pravou myší vybrat možnost Authenticate a zadat příslušné přihlašovací údaje k této databázi
  • pokud se přihlašuje uživatel s rolí Read, nevidí vůbec do kolekce system.users – je to i graficky zvýrazněno
  • pro využití aplikace RockMongo je nutné upravit konfiguraci v souboru $rockmongo/config.php příslušnou položku takto:
    $MONGO["servers"][$i]["mongo_auth"] = true;//enable mongo authentication?
  • pak je možné se přes uživatele sysAdmin přihlásit ke všem databázím. Pokusy o přihlášení jiného uživatele než databáze admin nejsou úspěšné

Tímto bych zakončil dnešní monotématický díl. Plánovaný popis jailu typu Ports se bohužel do tohoto dílu nevešel, takže ho přesunu na příští díl, který bude také závěrečným dílem celé dlouhé série.

Seriál: Jails v PC-BSD

Byl pro vás článek přínosný?

Autor článku