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"
}
-
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.
-
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
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:
-
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
-
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
-
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:
-
Start filen mongod.conf i din yndlingseditor.
-
Tilføj disse linjer i slutningen af konfigurationsfilen.
security: authorization: enabled
-
Tilføj disse linjer i slutningen af konfigurationsfilen.
service mongod restart
-
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
-
Åbn din Mongo-skal og skift til admin-databasen:
use admin
-
Opret en bruger til admin database
db.createUser({ user: "admin", pwd: "admin_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
-
Godkend nyoprettet bruger
db.auth("admin", "admin_password")
-
Oprettelse af specifik instansbruger:
use database_1 db.createUser({ user: "user_1", pwd: "your_password", roles: [{ role: "dbOwner", db: "database_1" }] })
-
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.