sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan går du i produktion med MongoDB - Top ti tips

Efter den vellykkede udvikling af applikationen og før du dedikerer dig til produktionen af ​​MongoDB, skal du regne med disse hurtige retningslinjer for at sikre et jævnt og effektivt flow samt for at opnå optimal ydeevne.

1) Implementeringsmuligheder

Valg af den rigtige hardware

For optimal ydeevne er det at foretrække at bruge SSD frem for HDD. Det er nødvendigt at passe på, om dit lager er lokalt eller fjernt, og træffe foranstaltninger i overensstemmelse hermed. Det er bedre at bruge RAID til beskyttelse af hardwarefejl og gendannelsesskema, men stol ikke helt på det, da det ikke giver nogen beskyttelse mod uønskede fejl. Til udførelse på diske er RAID-10 en god pasform med hensyn til ydeevne og tilgængelighed, som ofte mangler i andre RAID-niveauer. Den rigtige hardware er byggestenen til din applikation for optimeret ydeevne og for at undgå større debacle.

Cloud Hosting

En række cloud-leverandører er tilgængelige, som tilbyder forudinstallerede MongoDB-databaseværter. Udvælgelsen af ​​det bedste valg er det grundlæggende skridt for, at din ansøgning kan vokse og gøre førstehåndsindtryk på målmarkedet. MongoDB Atlas er et af de mulige valg, som tilbyder en komplet løsning til cloud-interface med funktioner som implementering af dine noder og et øjebliksbillede af dine data gemt i Amazon S3. ClusterControl er en anden god tilgængelig mulighed for nem implementering og skalering. Som tilbyder en række funktioner som nem tilføjelse og fjernelse af noder, ændre størrelse på forekomster og kloning af din produktionsklynge. Du kan prøve ClusterControl her uden at blive opkrævet. Andre tilgængelige muligheder er RackSpace ObjectRocket og MongoStitch.

2) RAM

Ofte tilgåede elementer cachelagres i RAM, så MongoDB kan give optimal responstid. RAM afhænger normalt af mængden af ​​data, du vil gemme, antallet af samlinger og indekser. Sørg for, at du har nok RAM til at rumme dine indekser, ellers vil det drastisk påvirke din applikations ydeevne i produktionen. Mere RAM betyder færre sidefejl og bedre responstid.

3) Indeksering

For applikationer, der inkluderer kroniske skriveanmodninger, spiller indeksering en afgørende rolle. Ifølge MongoDB-dokumenter:

"Hvis en skriveoperation ændrer et indekseret felt, opdaterer MongoDB alle indekser, der har det ændrede felt som en nøgle"

Så vær forsigtig, når du vælger indekser, da det kan påvirke din DB-ydelse.

Indekseringseksempel:Eksempel på indtastning i restaurantdatabasen

{
  "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. Oprettelse af indeks på enkelt felt

    > db.restaurants.createIndex( { "cuisine": 1 } );
    {
         "createdCollectionAutomatically" : false,
         "numIndexesBefore" : 1,
         "numIndexesAfter" : 2,
         "ok" : 1
    }

    I ovenstående eksempel oprettes et stigende indeks på køkkenfeltet.

  2. Oprettelse af indeks på flere felter

    > db.restaurants.createIndex( { "cuisine": 1 , "address.zipcode": -1 } );
    {
            "createdCollectionAutomatically" : false,
            "numIndexesBefore" : 2,
            "numIndexesAfter" : 3,
            "ok" : 1
    }

    Her oprettes sammensat indeks på køkken- og postnummerfelter. -ve-tallet definerer faldende rækkefølge.

4) Vær forberedt på deling

MongoDB opdeler dataene i forskellige maskiner ved hjælp af en mekanisme kendt som sharding. Det anbefales ikke at tilføje sharding i begyndelsen, medmindre du forventer store datasæt. Husk at holde din applikations ydeevne på linje, du har brug for en god skæringsnøgle i henhold til dine datamønstre, da det direkte påvirker din responstid. Balancering af data på tværs af shards er automatisk. Det er dog bedre at være forberedt og have en ordentlig plan. Så du kan konsolidere, når som helst din ansøgning kræver det.

5) Bedste praksis for OS-konfiguration

  • XFS-filsystem
    • Det er meget skalerbart, højtydende 64-bit journaliseringsfilsystem. Fornyer I/O-ydeevnen ved at tillade færre og større I/O-operationer.
  • Sæt grænse for filbeskrivelse.
  • Deaktiver gennemsigtige enorme sider og Nonuniform Access Memory (NUMA).
  • Skift standard TCP Keepalive-tiden til 300 sekunder (for Linux) og 120 sekunder (for Azure).

Prøv disse kommandoer for at ændre standard keepalive-tid;

Til Linux

sudo sysctl -w net.ipv4.tcp_keepalive_time=<value>

For Windows

Indtast denne kommando i kommandoprompt som administrator, hvor er udtrykt i hexadecimal (f.eks. 120000 er 0x1d4c0):

reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ /t REG_DWORD /v KeepAliveTime /d <value>

6) Sikring af høj tilgængelighed ved hjælp af replikering

At gå i produktion uden replikering kan forårsage pludselige nedbrud i din app. Replikering tager sig af problemet, hvis en node fejler. Administrer læse-, skriveoperationer for dine sekundære MongoDB-instanser i henhold til dine applikationsbehov.

Husk disse ting, mens du replikerer:

  • For høj tilgængelighed skal du implementere dit replikasæt i mindst tre datacentre.
  • Sørg for, at MongoDB-instanser har 0 eller 1 stemmer.
  • Sørg for fuld tovejs netværksforbindelse mellem alle MongoDB-instanser.

Eksempel på oprettelse af et replikasæt med 4 lokale MongoDB-instanser:

  1. Oprettelse af 4 lokale MongoDB-instanser

    Først skal du oprette datamapper

    mkdir -p /data/m0
    mkdir -p /data/m1
    mkdir -p /data/m2
    mkdir -p /data/m3
  2. Start 4 lokale forekomster

    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. Tilføj forekomsterne til klyngen, og start

    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);

Sikkerhedsforanstaltninger

7) Sikre maskiner

Åbne porte på maskiner, der hoster MongoDB, er sårbare over for forskellige ondsindede angreb. Mere end 30 tusinde MongoDB-databaser var blevet kompromitteret i et ransomware-angreb på grund af forsinkelse i korrekt sikkerhedskonfiguration. Mens du er i gang med produktion, luk dine offentlige porte på MongoDB-serveren. Du bør dog holde én port åben til SSh-formål.

Aktivering af godkendelse på MongoDB-instans:

  1. Start filen mongod.conf i din yndlingseditor.

  2. Tilføj disse linjer i slutningen af ​​konfigurationsfilen.

    security:
          authorization: enabled
  3. Tilføj disse linjer i slutningen af ​​konfigurationsfilen.

    service mongod restart
  4. Bekræft status

    service mongod status

Begrænsning af ekstern adgang

Åbn filen mongod.conf igen for at indstille begrænsede IP-adresser til din server.

bind_ip=127.0.0.1

Ved at tilføje denne linje betyder det, at du kun kan få adgang til din server gennem 127.0.0. (som er localhost). Du kan også tilføje flere IP'er i bindeindstillingen.

bind_ip=127.0.0.1,168.21.200.200

Det betyder, at du kan få adgang fra localhost og dit private netværk.

8) Adgangskodebeskyttelse

For at tilføje et ekstra sikkerhedslag til dine maskiner skal du aktivere adgangskontrol og håndhæve godkendelse. På trods af at du har tilbageholdt MongoDB-serveren til at acceptere forbindelser fra omverdenen, er der stadig mulighed for, at eventuelle ondsindede scripts kan komme ind på din server. Så vær ikke tilbageholdende med at angive et brugernavn/adgangskode til din database og tildele de nødvendige tilladelser. Aktiveret adgangskontrol vil kun tillade brugere at udføre handlinger bestemt af deres roller.

Her er trinene til at oprette en bruger og tildele databaseadgang med specifikke roller.

For det første vil vi oprette en bruger (i dette tilfælde er det admin) til at administrere alle brugere og databaser, og derefter vil vi oprette en specifik databaseejer, der kun har læse- og skriverettigheder på én MongoDB-databaseinstans.

Opret en administratorbruger til at administrere andre brugere til databaseforekomster

  1. Åbn din Mongo-skal og skift til admin-databasen:

    use admin
  2. Opret en bruger til admin database

    db.createUser({ user: "admin", pwd: "admin_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
  3. Godkend nyoprettet bruger

    db.auth("admin", "admin_password")
  4. Oprettelse af specifik instansbruger:

    use database_1
    db.createUser({ user: "user_1", pwd: "your_password", roles: [{ role: "dbOwner", db: "database_1" }] })
  5. Bekræft nu, om en bruger er blevet oprettet eller ej.

    db.auth("user_1", "your_password")
    show collections

Det er det! Du har sikret dine databaseforekomster med korrekt godkendelse. Du kan tilføje så mange brugere, som du vil, ved at følge den samme procedure.

9) Kryptering og beskyttelse af data

Hvis du bruger Wiredtiger som en lagringsmotor, kan du bruge dens kryptering i hvile-konfiguration til at kryptere dine data. Hvis ikke, skal kryptering udføres på værten ved hjælp af et filsystem, enheder eller fysisk kryptering.

10) Overvåg din implementering

Når du er færdig med implementeringen af ​​MongoDB i produktion, skal du spore ydeevneaktiviteten for at forhindre tidlige mulige problemer. Der er en række strategier, du kan tilpasse for at overvåge din dataydelse i produktionsmiljøet.

  • MongoDB inkluderer hjælpeprogrammer, som returnerer statistikker om forekomstens ydeevne og aktivitet. Hjælpeprogrammer bruges til at lokalisere problemer og analysere normal drift.

  • Brug mongostat til at forstå arrangement af operationstyper og kapacitetsplanlægning.

  • Mongotop anbefales til at spore rapporter og læse-skrive-aktiviteter.

mongotop 15

Denne kommando returnerer output efter hvert 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) er en anden tilgængelig mulighed, der overvåger din MongoDB-klynge og gør det bekvemt for dig at få et overblik over produktionsimplementeringsaktiviteterne.

Og selvfølgelig er der ClusterControl by Severalnines, automatiserings- og administrationssystemet til open source-databaser. ClusterControl muliggør nem implementering af klynger med automatiserede sikkerhedsindstillinger og gør det nemt at fejlfinde din database ved at levere brugervenlig administrationsautomatisering, der inkluderer reparation og gendannelse af ødelagte noder, automatiske opgraderinger og mere. Du kan komme i gang med dens (gratis for evigt) Community Edition, med hvilken du kan implementere og overvåge MongoDB samt oprette brugerdefinerede rådgivere for at tilpasse din overvågningsindsats til de aspekter, der er specifikke for din opsætning. Download det gratis her.


  1. Absolut værdi med MongoDB aggregeringsramme

  2. Sådan begrænser du antallet af opdateringsdokumenter i mongodb

  3. Kan nogen forklare redis setbit kommando?

  4. Udfyld en mangustmodel med et felt, der ikke er et id