sql >> Databáze >  >> NoSQL >> MongoDB

Jak se dostat do výroby s MongoDB - deset tipů

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"
}
  1. 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ě.

  2. 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 je vyjádřena v šestnáctkové soustavě (např. 120000 je 0x1d4c0):

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:

  1. 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
  2. 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
  3. 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:

  1. Spusťte soubor mongod.conf ve svém oblíbeném editoru.

  2. Připojte tyto řádky na konec konfiguračního souboru.

    security:
          authorization: enabled
  3. Připojte tyto řádky na konec konfiguračního souboru.

    service mongod restart
  4. 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

  1. Otevřete svůj Mongo shell a přepněte se do databáze administrátorů:

    use admin
  2. Vytvořte uživatele pro administrátorskou databázi

    db.createUser({ user: "admin", pwd: "admin_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
  3. Ověřit nově vytvořeného uživatele

    db.auth("admin", "admin_password")
  4. 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" }] })
  5. 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.


  1. Jak opravit svůj mongodb?

  2. Instalace Redis na CentOS 8

  3. Proč záleží na směru indexu v MongoDB?

  4. Čas vytvoření klíče v redis