Po úspěšném vývoji aplikace a před tím, než se začnete věnovat produkci MongoDB, počítejte s těmito rychlými pokyny, abyste zajistili hladký a efektivní tok a také dosáhli optimálního výkonu.
1) Možnosti nasazení
Výběr správného hardwaru
Pro optimální výkon je vhodnější použít SSD místo HDD. Je třeba si pohlídat, zda je vaše úložiště lokální nebo vzdálené a podle toho přijmout opatření. Pro ochranu hardwarových defektů a schéma obnovy je lepší použít RAID, ale nespoléhejte se na to úplně, protože nenabízí žádnou ochranu proti nepříznivým poruchám. Pro spouštění na discích se RAID-10 hodí z hlediska výkonu a dostupnosti, která u jiných úrovní RAID často chybí. Správný hardware je stavebním kamenem vaší aplikace pro optimalizovaný výkon a pro zamezení jakéhokoli velkého debaklu.
Cloud Hosting
K dispozici je řada cloudových dodavatelů, kteří nabízejí předinstalované hostitele databáze MongoDB. Výběr nejlepší volby je základním krokem k tomu, aby vaše aplikace rostla a udělala první dojem na cílovém trhu. MongoDB Atlas je jednou z možných voleb, která nabízí kompletní řešení pro cloudové rozhraní s funkcemi, jako je nasazení vašich uzlů a snímek vašich dat uložených v Amazon S3. ClusterControl je další dobrá dostupná možnost pro snadné nasazení a škálování. Který nabízí řadu funkcí, jako je snadné přidávání a odebírání uzlů, změna velikosti instancí a klonování vašeho produkčního clusteru. Zde si můžete vyzkoušet ClusterControl bez poplatku. Další dostupné možnosti jsou RackSpace ObjectRocket a MongoStitch.
2) RAM
Často používané položky jsou ukládány do mezipaměti v paměti RAM, takže MongoDB může poskytnout optimální dobu odezvy. RAM obvykle závisí na množství dat, která chcete uložit, počtu kolekcí a indexů. Ujistěte se, že máte dostatek paměti RAM pro umístění vašich indexů, jinak to drasticky ovlivní výkon vaší aplikace v produkci. Více paměti RAM znamená méně chyb stránky a lepší dobu odezvy.
3) Indexování
U aplikací, které zahrnují chronické požadavky na zápis, hraje indexování zásadní roli. Podle dokumentů MongoDB:
„Pokud operace zápisu upraví indexované pole, MongoDB aktualizuje všechny indexy, které mají upravené pole jako klíč“
Buďte tedy opatrní při výběru indexů, protože to může ovlivnit výkon vaší DB.
Příklad indexování:Ukázkový záznam v databázi restaurace
{
"address": {
"building": "701",
"street": "Harley street",
"zipcode": "71000"
},
"cuisine": "Bakery",
"grades": [
{ "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
{ "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },
{ "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },
{ "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },
{ "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
],
"name": "Bombay Bakery",
"restaurant_id": "187521"
}
-
Vytvoření indexu na jednom poli
> db.restaurants.createIndex( { "cuisine": 1 } ); { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
Ve výše uvedeném příkladu je index vzestupného pořadí vytvořen na poli kuchyně.
-
Vytváření indexu pro více polí
> db.restaurants.createIndex( { "cuisine": 1 , "address.zipcode": -1 } ); { "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Zde je vytvořen složený index na polích kuchyně a PSČ. Číslo -ve definuje sestupné pořadí.
4) Buďte připraveni na Sharding
MongoDB rozděluje data do různých strojů pomocí mechanismu známého jako sharding. Nedoporučuje se přidávat sharding na začátku, pokud neočekáváte mohutné datové sady. Nezapomeňte, že k udržení výkonu vaší aplikace potřebujete dobrý shardingový klíč podle vašich datových vzorů, protože přímo ovlivňuje vaši dobu odezvy. Vyrovnávání dat mezi shardy je automatické. Je však lepší být připraven a mít správný plán. Můžete se tedy konsolidovat, kdykoli to vaše aplikace vyžaduje.
5) Doporučené postupy pro konfiguraci OS
- Souborový systém XFS
- Jedná se o vysoce škálovatelný a vysoce výkonný 64bitový systém souborů žurnálování. Vylepšuje výkon I/O tím, že umožňuje méně a větší I/O operace.
- Zadejte limit deskriptoru souboru.
- Zakažte průhledné velké stránky a paměť nonuniform Access Memory (NUMA).
- Změňte výchozí dobu udržování TCP na 300 sekund (pro Linux) a 120 sekund (pro Azure).
Vyzkoušejte tyto příkazy pro změnu výchozí doby udržení;
Pro Linux
sudo sysctl -w net.ipv4.tcp_keepalive_time=<value>
Pro Windows
Zadejte tento příkaz do příkazového řádku jako správce, kde
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ /t REG_DWORD /v KeepAliveTime /d <value>
6) Zajištění vysoké dostupnosti pomocí replikace
Pokračování v produkci bez replikace může způsobit náhlé selhání vaší aplikace. Replikace se postará o problém, pokud uzel selže. Spravujte operace čtení a zápisu pro sekundární instance MongoDB podle potřeb vaší aplikace.
Při replikaci mějte na paměti tyto věci:
- Pro vysokou dostupnost nasaďte sadu replik minimálně do tří datových center.
- Ujistěte se, že instance MongoDB mají 0 nebo 1 hlas.
- Zajistěte plné obousměrné síťové připojení mezi všemi instancemi MongoDB.
Příklad vytvoření sady replik se 4 místními instancemi MongoDB:
-
Vytvoření 4 místních instancí MongoDB
Nejprve vytvořte datové adresáře
mkdir -p /data/m0 mkdir -p /data/m1 mkdir -p /data/m2 mkdir -p /data/m3
-
Spusťte 4 místní instance
mongod --replSet cluster1 --port 27017 --dbpath /data/m0 mongod --replSet cluster2 --port 27018 --dbpath /data/m1 mongod --replSet cluster1 --port 27019 --dbpath /data/m2 mongod --replSet cluster1 --port 27020 --dbpath /data/m3
-
Přidejte instance do clusteru a spusťte
mongo myhost:34014 myConfig = {_id: ‘cluster1’, members: [ {_id: 0, host: ‘myhost1:27017’}, {_id: 1, host: ‘myhost2:27018’}, {_id: 2, host: ‘myhost3:27019’}, {_id: 3, host: ‘myhost4:27020’}] } rs.initiate(myConfig);
Bezpečnostní opatření
7) Zabezpečené stroje
Otevřené porty na počítačích hostujících MongoDB jsou zranitelné vůči různým škodlivým útokům. Více než 30 tisíc databází MongoDB bylo napadeno ransomwarovým útokem kvůli zpoždění ve správné konfiguraci zabezpečení. Během výroby zavřete své veřejné porty serveru MongoDB. Jeden port byste však měli ponechat otevřený pro účely SSh.
Povolení ověřování na instanci MongoDB:
-
Spusťte soubor mongod.conf ve svém oblíbeném editoru.
-
Připojte tyto řádky na konec konfiguračního souboru.
security: authorization: enabled
-
Připojte tyto řádky na konec konfiguračního souboru.
service mongod restart
-
Potvrďte stav
service mongod status
Omezení externího přístupu
Znovu otevřete soubor mongod.conf a nastavte omezený přístup IP k vašemu serveru.
bind_ip=127.0.0.1
Přidáním tohoto řádku to znamená, že k serveru máte přístup pouze přes 127.0.0. (což je localhost). Můžete také přidat více IP adres ve volbě vazby.
bind_ip=127.0.0.1,168.21.200.200
To znamená, že máte přístup z localhost a vaší privátní sítě.
8) Ochrana heslem
Chcete-li do svých počítačů přidat další vrstvu zabezpečení, povolte řízení přístupu a vynucení ověřování. Navzdory skutečnosti, že jste zakázali serveru MongoDB přijímat připojení z vnějšího světa, stále existuje možnost, aby se na váš server dostaly jakékoli škodlivé skripty. Neváhejte tedy nastavit uživatelské jméno/heslo pro vaši databázi a přiřadit požadovaná oprávnění. Povolená kontrola přístupu umožní uživatelům provádět pouze akce určené jejich rolemi.
Zde jsou kroky k vytvoření uživatele a přiřazení přístupu k databázi s konkrétními rolemi.
Nejprve vytvoříme uživatele (v tomto případě je to admin) pro správu všech uživatelů a databází a poté vytvoříme konkrétního vlastníka databáze, který bude mít oprávnění pouze pro čtení a zápis na jedné instanci databáze MongoDB.
Vytvořte administrátora pro správu ostatních uživatelů pro instance databáze
-
Otevřete svůj Mongo shell a přepněte se do databáze administrátorů:
use admin
-
Vytvořte uživatele pro administrátorskou databázi
db.createUser({ user: "admin", pwd: "admin_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
-
Ověřit nově vytvořeného uživatele
db.auth("admin", "admin_password")
-
Vytváření konkrétního uživatele instance:
use database_1 db.createUser({ user: "user_1", pwd: "your_password", roles: [{ role: "dbOwner", db: "database_1" }] })
-
Nyní ověřte, zda byl uživatel úspěšně vytvořen nebo ne.
db.auth("user_1", "your_password") show collections
A je to! Úspěšně jste zabezpečili instance databáze správným ověřením. Stejným postupem můžete přidat tolik uživatelů, kolik chcete.
9) Šifrování a ochrana dat
Pokud používáte Wiredtiger jako úložiště, můžete k šifrování dat použít jeho konfiguraci v klidu. Pokud ne, pak by mělo být šifrování provedeno na hostiteli pomocí souborového systému, zařízení nebo fyzického šifrování.
10) Sledujte své nasazení
Jakmile dokončíte nasazení MongoDB do produkce, musíte sledovat výkonnostní aktivitu, abyste předešli časným možným problémům. Existuje řada strategií, které můžete přizpůsobit, abyste mohli sledovat výkon dat v produkčním prostředí.
-
MongoDB obsahuje nástroje, které vracejí statistiky o výkonu a aktivitě instance. Nástroje se používají k určení problémů a analýze běžných operací.
-
Použijte mongostat k pochopení uspořádání typů operací a kapacitního plánování.
-
Pro sledování zpráv a čtení a zápisu se doporučuje mongotop.
mongotop 15
Tento příkaz vrátí výstup každých 15 sekund.
ns total read write 2018-04-22T15:32:01-05:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.me 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
local.replset.minvalid 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.indexes 0ms 0ms 0ms
local.system.namespaces 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
ns total read write 2018-04-22T15:32:16-05:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.me 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
local.replset.minvalid 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.indexes 0ms 0ms 0ms
local.system.namespaces 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
MongoDB Monitoring Service (MMS) je další dostupná možnost, která monitoruje váš MongoDB cluster a umožňuje vám mít přehled o aktivitách produkčního nasazení.
A samozřejmě je tu ClusterControl od společnosti Somenines, systém automatizace a správy pro open source databáze. ClusterControl umožňuje snadné nasazení clusterů s automatickým nastavením zabezpečení a usnadňuje odstraňování problémů s vaší databází tím, že poskytuje snadno použitelnou automatizaci správy, která zahrnuje opravu a obnovu poškozených uzlů, automatické upgrady a další. Můžete začít s jeho (vždy zdarma) Community Edition, s nímž můžete nasazovat a monitorovat MongoDB a také vytvářet vlastní poradce, abyste vyladili své monitorovací úsilí na ty aspekty, které jsou specifické pro vaše nastavení. Stáhněte si jej zdarma zde.