Efter den framgångsrika utvecklingen av applikationen och innan du ägnar dig åt produktionen av MongoDB, räkna med dessa snabba riktlinjer för att säkerställa ett smidigt och effektivt flöde samt för att uppnå optimal prestanda.
1) Implementeringsalternativ
Val av rätt hårdvara
För optimal prestanda är det att föredra att använda SSD istället för hårddisken. Det är nödvändigt att se till om din lagring är lokal eller fjärransluten och vidta åtgärder i enlighet med detta. Det är bättre att använda RAID för att skydda hårdvarufel och återställningsschema, men lita inte helt på det, eftersom det inte erbjuder något skydd mot negativa fel. För körning på diskar passar RAID-10 bra när det gäller prestanda och tillgänglighet, vilket ofta saknas i andra RAID-nivåer. Rätt hårdvara är byggstenen för din applikation för optimerad prestanda och för att undvika större debacle.
Cloud Hosting
En rad molnleverantörer finns tillgängliga som erbjuder förinstallerade MongoDB-databasvärdar. Valet av bästa val är grundsteget för att din applikation ska växa och göra första intryck på målmarknaden. MongoDB Atlas är ett av de möjliga valen som erbjuder en komplett lösning för molngränssnitt med funktioner som distribution av dina noder och en ögonblicksbild av dina data lagrade i Amazon S3. ClusterControl är ett annat bra tillgängligt alternativ för enkel distribution och skalning. Som erbjuder en mängd funktioner som enkelt tillägg och borttagning av noder, ändra storlek på instanser och kloning av ditt produktionskluster. Du kan prova ClusterControl här utan att bli debiterad. Andra tillgängliga alternativ är RackSpace ObjectRocket och MongoStitch.
2) RAM
Ofta åtkomliga objekt cachelagras i RAM, så att MongoDB kan ge optimal svarstid. RAM-minne beror vanligtvis på mängden data du ska lagra, antalet samlingar och index. Se till att du har tillräckligt med RAM-minne för att rymma dina index, annars kommer det att drastiskt påverka din applikationsprestanda i produktionen. Mer RAM betyder färre sidfel och bättre svarstid.
3) Indexering
För applikationer som inkluderar kroniska skrivförfrågningar, spelar indexering en avgörande roll. Enligt MongoDB-dokument:
"Om en skrivoperation ändrar ett indexerat fält, uppdaterar MongoDB alla index som har det ändrade fältet som nyckel"
Så var försiktig när du väljer index eftersom det kan påverka din DB-prestanda.
Indexeringsexempel:Exempel på inmatning i restaurangdatabasen
{
"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"
}
-
Skapa index på enstaka fält
> db.restaurants.createIndex( { "cuisine": 1 } ); { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
I ovanstående exempel skapas stigande ordningsindex på köksfältet.
-
Skapa index på flera fält
> db.restaurants.createIndex( { "cuisine": 1 , "address.zipcode": -1 } ); { "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
Här skapas ett sammansatt index på mat- och postnummerfält. -ve-numret definierar fallande ordning.
4) Var beredd på delning
MongoDB partitionerar data i olika maskiner med en mekanism som kallas sharding. Det rekommenderas inte att lägga till sharding i början om du inte förväntar dig rejäla datamängder. Kom ihåg att hålla din applikations prestanda i linje, du behöver en bra skärningsnyckel, enligt dina datamönster eftersom det direkt påverkar din svarstid. Balansering av data över skärvor sker automatiskt. Men det är bättre att vara förberedd och ha en ordentlig plan. Så du kan konsolidera närhelst din applikation kräver det.
5) Bästa metoder för OS-konfiguration
- XFS-filsystem
- Det är mycket skalbart, högpresterande 64-bitars journalfilsystem. Förnyar I/O-prestanda genom att tillåta färre och större I/O-operationer.
- Ange filbeskrivningsgräns.
- Inaktivera genomskinliga enorma sidor och Nonuniform Access Memory (NUMA).
- Ändra standardtiden för TCP Keepalive till 300 sekunder (för Linux) och 120 sekunder (för Azure).
Prova dessa kommandon för att ändra standard Keepalive-tid;
För Linux
sudo sysctl -w net.ipv4.tcp_keepalive_time=<value>
För Windows
Skriv detta kommando i kommandotolken som administratör, där
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ /t REG_DWORD /v KeepAliveTime /d <value>
6) Säkerställa hög tillgänglighet med hjälp av replikering
Att gå i produktion utan replikering kan orsaka plötsliga nedladdningsfel i din app. Replikering tar hand om problemet om en nod misslyckas. Hantera läs-, skrivoperationer för dina sekundära MongoDB-instanser enligt dina applikationsbehov.
Ha dessa saker i åtanke när du replikerar:
- För hög tillgänglighet, distribuera din replikuppsättning i minst tre datacenter.
- Se till att MongoDB-instanser har 0 eller 1 röst.
- Säkerställ fullständig dubbelriktad nätverksanslutning mellan alla MongoDB-instanser.
Exempel på att skapa en replikuppsättning med 4 lokala MongoDB-instanser:
-
Skapar 4 lokala MongoDB-instanser
Skapa först datakataloger
mkdir -p /data/m0 mkdir -p /data/m1 mkdir -p /data/m2 mkdir -p /data/m3
-
Starta 4 lokala instanser
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
-
Lägg till instanserna i klustret och initiera
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);
Säkerhetsåtgärder
7) Säkra maskiner
Öppna portar på maskiner som är värd för MongoDB är sårbara för olika skadliga attacker. Mer än 30 tusen MongoDB-databaser hade äventyrats i en ransomware-attack på grund av fördröjning i korrekt säkerhetskonfiguration. Stäng dina offentliga portar på MongoDB-servern medan du pågår produktion. Du bör dock hålla en port öppen för SSh-ändamål.
Aktivera autentisering på MongoDB-instans:
-
Starta filen mongod.conf i din favoritredigerare.
-
Lägg till dessa rader i slutet av konfigurationsfilen.
security: authorization: enabled
-
Lägg till dessa rader i slutet av konfigurationsfilen.
service mongod restart
-
Bekräfta statusen
service mongod status
Begränsa extern åtkomst
Öppna filen mongod.conf igen för att ställa in begränsade IP-adresser åt din server.
bind_ip=127.0.0.1
Genom att lägga till den här raden betyder det att du bara kan komma åt din server via 127.0.0. (som är localhost). Du kan också lägga till flera IP-adresser i bindningsalternativet.
bind_ip=127.0.0.1,168.21.200.200
Det betyder att du kan komma åt från localhost och ditt privata nätverk.
8) Lösenordsskydd
För att lägga till ett extra säkerhetslager till dina maskiner, aktivera åtkomstkontroll och framtvinga autentisering. Trots att du har hindrat MongoDB-servern att acceptera anslutningar från omvärlden, finns det fortfarande en möjlighet att eventuella skadliga skript kommer in på din server. Så var inte ovilliga att ange ett användarnamn/lösenord för din databas och tilldela nödvändiga behörigheter. Aktiverad åtkomstkontroll tillåter endast användare att utföra åtgärder som bestäms av deras roller.
Här är stegen för att skapa en användare och tilldela databasåtkomst med specifika roller.
I första hand kommer vi att skapa en användare (i det här fallet är det admin) för att hantera alla användare och databaser och sedan kommer vi att skapa en specifik databasägare som bara har läs- och skrivbehörigheter på en MongoDB-databasinstans.
Skapa en administratörsanvändare för att hantera andra användare för databasinstanser
-
Öppna ditt Mongo-skal och byt till admindatabasen:
use admin
-
Skapa en användare för admindatabas
db.createUser({ user: "admin", pwd: "admin_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
-
Autentisera nyskapad användare
db.auth("admin", "admin_password")
-
Skapar specifik instansanvändare:
use database_1 db.createUser({ user: "user_1", pwd: "your_password", roles: [{ role: "dbOwner", db: "database_1" }] })
-
Kontrollera nu om en användare har skapats framgångsrikt eller inte.
db.auth("user_1", "your_password") show collections
Det är allt! Du har framgångsrikt säkrat dina databasinstanser med korrekt autentisering. Du kan lägga till så många användare som du vill enligt samma procedur.
9) Kryptering och skydd av data
Om du använder Wiredtiger som en lagringsmotor kan du använda dess kryptering i vila-konfiguration för att kryptera dina data. Om inte, bör kryptering utföras på värden med hjälp av ett filsystem, enheter eller fysisk kryptering.
10) Övervaka din implementering
När du har avslutat installationen av MongoDB i produktion måste du spåra prestandaaktiviteten för att förhindra tidiga möjliga problem. Det finns en rad strategier du kan anpassa för att övervaka din dataprestanda i produktionsmiljön.
-
MongoDB inkluderar verktyg som returnerar statistik om instansprestanda och aktivitet. Verktyg används för att lokalisera problem och analysera normala funktioner.
-
Använd mongostat för att förstå arrangemanget av operationstyper och kapacitetsplanering.
-
Mongotop rekommenderas för spårning av rapporter och läs-skrivaktiviteter.
mongotop 15
Detta kommando returnerar utdata efter var 15:e 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) är ett annat tillgängligt alternativ som övervakar ditt MongoDB-kluster och gör det bekvämt för dig att ha en överblick över produktionsdriftsättningsaktiviteter.
Och naturligtvis finns det ClusterControl av Severalnines, automations- och hanteringssystemet för databaser med öppen källkod. ClusterControl möjliggör enkel distribution av kluster med automatiserade säkerhetsinställningar och gör det enkelt att felsöka din databas genom att tillhandahålla lättanvänd hanteringsautomatisering som inkluderar reparation och återställning av trasiga noder, automatiska uppgraderingar och mer. Du kan komma igång med dess (gratis för alltid) Community Edition, med vilken du kan distribuera och övervaka MongoDB samt skapa anpassade rådgivare för att anpassa dina övervakningsinsatser till de aspekter som är specifika för din installation. Ladda ner det gratis här.