sql >> Databasteknik >  >> NoSQL >> MongoDB

Anslutningssträng i MongoDB (med exempel)

För att appar ska kunna ansluta till en databasserver måste de använda en anslutningssträng, vilket är ett uttryck som innehåller alla parametrar som behövs. Anslutningssträngar tillhandahåller serverinstansen, databasnamn, autentiseringsdetaljer och andra parametrar för interaktion med databasservern.

Format för anslutningssträngar

Endera av de givna metoderna kommer att ställa in en MongoDB-anslutningssträng. DNS Seed List Connection Format eller Standard Connection String Format.

Standardformatet för att ansluta strängar

Det finns tre grundläggande typer av MongoDB-distributioner:fristående, replikuppsättning och splittrad kluster, som alla beskrivs här.

Detta är det typiska sättet att gå med i URI:er.

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

Exempel:

Fristående
mongodb://mongodb0.example.com:27017
Fristående som upprätthåller åtkomstkontroll:
mongodb://myDBReader:D1fficultP%[email protected]:27017/?authSource=admin
Replika uppsättning
mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
Replika uppsättning som upprätthåller åtkomstkontroll:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
Delat kluster
mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
Delat kluster som upprätthåller åtkomstkontroll:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin

Komponenter i en anslutningssträng

Komponenter i standard-URI-anslutningssträngen:

  1. mongodb:// – Ett nödvändigt prefix som indikerar en standardanslutningssträng.
  2. användarnamn:lösenord@ – Autentiseringsuppgifter är valfria. Om authSource ges kommer klienten att försöka autentisera användaren. Utan att ange en authSource kommer klienten att verifiera användaren mot defaultauthdb. Dessutom används admindatabasen om defaultauthdb inte anges.
  3. värd[:port] – Värden (och eventuellt portnumret) på vilken mongod-instansen är verksam (eller mongos-instans i fallet med ett fragmenterat kluster). Du kan ange ett värdnamn, en IP-adress eller en socket i en UNIX-domän. Ange antalet värdar som krävs för din utrullningstopologi:
    I fallet med en enskild mongod-instans, ange värdnamnet för mongod-instansen.
    Ange värdnamnet eller värdnamnen för den eller de angivna mongod-instanserna. i replikuppsättningsinställningarna för en replikuppsättning.
    Ange mongos-instansens värdnamn(en) för ett delad kluster. Utan att ange ett portnummer används den generiska porten 27017.
  4. /defaultauthdb – Frivillig. Om anslutningssträngen innehåller användarnamn:lösenord@, men alternativet authSource inte tillhandahålls, används autentiseringsdatabasen. Klienten använder admindatabasen för att autentisera användaren om både authSource och defaultauthdb inte anges.
  5. ? Frivillig. Anslutningsspecifika parametrar anges i namn>=värde>-par i frågesträngen. Listan över tillgängliga alternativ kan ses i avsnittet Connection String Options. Snedstreck (/) måste inkluderas mellan värden och frågetecknet (?) för att starta alternativsträngen om ingen databas anges i anslutningssträngen.

Anslutningsformat för DNS-frölistan

Det finns också en DNS-konstruerad frölista för MongoDB-anslutningar. Att använda DNS för att bygga upp listan över tillgängliga servrar ger mer flexibilitet i distributionen och möjligheten att byta servrar i cykler utan att konfigurera om klienter.

Använd prefixet mongodb+srv istället för det vanliga MongoDB-anslutningssträngsprefixet för att använda DNS-frölistan. För att tala om för användaren att värdnamnet som följer är en DNS SRV-post, använd +srv-prefixet. Efteråt kommer mongosh eller drivrutin att fråga efter domännamnssystemet (DNS) för att upptäcka vilka värdar som kör mongod-instanserna.

Obs! Alternativet tls (eller motsvarande ssl) är satt till sant om strängvariabeln +srv används. Genom att uttryckligen ange tls-alternativet till false i frågesträngen kan du åsidosätta detta beteende och använda tls=false istället.

Anslutningssträngar för DNS-frölista ser ofta ut som följande exempel:

mongodb+srv://server.example.com/

DNS-inställningen kan se ut så här:

Record                            TTL   Class    Priority Weight Port  Target

_mongodb._tcp.server.example.com. 86400 IN SRV   0        5      27317 mongodb1.example.com.

_mongodb._tcp.server.example.com. 86400 IN SRV   0        5      27017 mongodb2.example.com.

Genom att ansluta till medlemmar i frölistan får klienter tillgång till en katalog med andra replikuppsättningsmedlemmar för att upprätta en anslutning. Värden kan producera en serverlista som skiljer sig från frölistan eftersom klienter vanligtvis använder DNS-alias i sina frölistor. Medlemmar av replikuppsättningar kan endast nås via deras värdnamn; därför, om detta inträffar, kommer användarna att använda värdnamnen som ges av replikeringen snarare än de som anges i frölistan.

Obs! SRV-posterna som tillhandahålls av det angivna värdnamnet måste ha samma överordnade domän (example.com) som själva värdnamnet. Du kommer inte att tillåtas att ansluta om de överordnade domänerna och värdnamnen inte matchar.

Dessutom tillåter anslutningssträngar för DNS-frölista dig att tillhandahålla parametrar som en del av en URL på samma sätt som vanliga. Du kan också använda en TXT-post för att ange följande inställningar när du använder en anslutningssträng för DNS-frölista:

authSource
replicaSet

Endast en TXT-post kan specificeras för varje mongod-instans. Klienten kommer att returnera ett felmeddelande om DNS har flera TXT-poster eller om TXT-posten innehåller ett annat attribut än replicaSet eller authSource.

TXT-posten för server.example.com skulle se ut så här:

Record              TTL   Class    Text

server.example.com. 86400 IN TXT   "replicaSet=mySet&authSource=authDB"

Denna anslutningssträng genereras från DNS SRV-posterna samt TXT-postinställningarna enligt följande:

mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?replicaSet=mySet&authSource=authDB

En TXT-posts val kan åsidosättas genom att ange URL:ens frågesträngsparameter. Frågesträngen i följande scenario åsidosätter authSource-alternativet som anges i DNS-postens TXT-post.

mongodb+srv://server.example.com/?connectTimeoutMS=300000&authSource=aDifferentAuthDB

Med åsidosättningen av authSource skulle den typiska anslutningssträngen se ut så här:

mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?connectTimeoutMS=300000&replicaSet=mySet&authSource=aDifferentAuthDB

Obs! Om värdnamnet som anges i anslutningssträngen inte har några DNS-poster kopplade till sig, kommer parametern mongodb+srv att misslyckas. Som en sista anteckning, när du använder +srv-anslutningssträngändringen, är alternativet att använda TLS (eller motsvarande SSL-säkerhet) satt till sant för anslutningen. Genom att uttryckligen ange tls-alternativet till false i frågesträngen kan du åsidosätta detta beteende och använda tls=false istället.

Hämta din MongoDB-anslutningssträng

Du behöver en URI-sträng för att ansluta till MongoDB. Om du länkar till en MongoDB-distribution med mongo-skalet, Compass eller MongoDB-drivrutinerna kommer du att bli ombedd att ange URI (Uniform Resource Identifier).

Det antas att du redan har ställt in autentisering i MongoDB och genererat ett användarnamn och lösenord för läs- och skrivrättigheter till en MongoDB-databas när du använder den medföljande URI-strängen.

I det här fallet kan du använda inloggningen och lösenordet du skapade för rollen readWriteAnyDatabase samt administratörsdatabasens namn i din anslutningssträng för att ansluta till MongoDB.

Alternativ för anslutningssträngen

Det här avsnittet förklarar de olika sätten du kan ansluta till Internet.

  1. I form av ett namn=värde-par finns anslutningsalternativ tillgängliga.
  2. När du använder en drivrutin är alternativnamnet skiftlägeskänsligt.
  3. Alternativnamnet är skiftlägesokänsligt när man använder mongosh eller det traditionella mongoskalet (version 4.2 eller senare).
  4. Alternativnamnet är skiftlägeskänsligt när du använder en version 4.0 eller tidigare äldre mongo-skal.
  5. Höljet är aldrig ett problem när värdet visas.

Et-tecken (&) kan separera val, som namn1=värde1&namn2=värde2. Parametrarna ReplicaSet och connectTimeoutMS ingår i följande anslutning:

mongodb://db1.example.net:27017,db2.example.net:2500/?replicaSet=test&connectTimeoutMS=300000

Obs! Drivrutiner accepterar nu semikolon (;) som alternativavgränsare för att bevara kompatibiliteten med äldre programvara.

Exempel på anslutningssträngar

Du hittar URI-exempel för populära anslutningspunkter i exemplen nedan.

Kör databasservern lokalt

Standardporten för en lokal databasserver kan användas för att upprätta en anslutning med följande kommando:

mongodb://localhost
Administrativ databas

För att logga in på admindatabasen som foss med lösenordet fosslinux måste följande kommandon följas:

mongodb://foss:fosslinux@localhost
En databas med poster

Ansluter och loggar in på registerdatabasen med lösenordet fosslinux som systemadministratör.

mongodb://foss:fosslinux@localhost/records
Domänsockets i UNIX

När du ansluter till en UNIX-domänsocket, använd en URL-krypterad anslutningssträng.

MongoDB länkar till en UNIX-domänslutpunkt med följande sökväg:

mongodb://%2Ftmp%2Fmongodb-27017.sock

Obs! alla drivrutiner stöder inte UNIX-domänsockets. För att lära dig mer om din förare, gå till avsnittet Drivrutinsdokumentation.

Replika uppsättning med användare på distinkta maskiner

Nedan finns en anslutning till en replika med två medlemmar på db1.example.net och db2.example.net:

mongodb://db1.example.net,db2.example.com/?replicaSet=test

Obs! Mongod-instanserna som tillhandahålls i replikuppsättningskonfigurationen måste anges för en replikuppsättning.

Replica Set med användare på localhost

Portarna 27017, 27018 och 27019 används för att upprätta en anslutning till en replikuppsättning som fungerar på localhost:

mongodb://localhost,localhost:27018,localhost:27019/?replicaSet=test
Läs distributionsreplikuppsättning

Att ansluta till en replikuppsättning med tre medlemmar och distribuera läsningar till de sekundära medlemmarna innebär metoden som anges nedan:

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&readPreference=secondary
Replika för skrivning på hög nivå

Anslutning till en replikuppsättning som innehåller skrivproblem och en timeout på två sekunder i väntan på replikering över en majoritet av databärande röstande medlemmar görs med den här konfigurationen:

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=majority&wtimeoutMS=2000
Delat kluster

Det är möjligt att ansluta till ett fragmenterat kluster med flera instanser med hjälp av följande:

mongodb://router1.example.com:27017,router2.example2.com:27017,router3.example3.com:27017/
MongoDB Atlas Cluster

Följande upprättar en anslutning till ett MongoDB Atlas-kluster med hjälp av AWS IAM-referenser för autentisering:

mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

Det här exemplet visar hur man använder MONGODB-AWS-autentiseringsmetoden och $external authSource för att ansluta till Atlas via AWS IAM-uppgifter.

AWS SESSION TOKEN authMechanismProperties-värdet måste anges om du använder en AWS-sessionstoken, enligt följande:

mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<aws session token>'

Obs! Så länge som AWS-åtkomstnyckel-ID eller hemlig åtkomstnyckel innehåller något av följande tecken:(: / ? # [ ] @ ), måste du använda procentkodning för att koda dem.

Du kan också använda vanliga AWS IAM-miljövariabler för att ange dessa referenser på din plattform. När du använder MONGODB-AWS-autentisering kontrollerar mongosh och säkerställer om följande miljövariabler är närvarande:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

En anslutningssträng behöver inte inkludera dessa autentiseringsuppgifter om den är konfigurerad.

I bash-skalet ställs följande variabler in i följande exempel:

export AWS_ACCESS_KEY_ID='<aws access key id>'

export AWS_SECRET_ACCESS_KEY='<aws secret access key>'

export AWS_SESSION_TOKEN='<aws session token>'

Syntaxen för att etablera miljövariabler kommer att skilja sig åt i andra skal, så var medveten om detta. För ytterligare information, gå till din plattforms dokumentation.

Följande kommando kommer att bekräfta om vissa miljövariabler har ställts in eller inte:

env | grep AWS

Följande kod visar hur man upprättar en anslutning till ett MongoDB Atlas-kluster genom att använda variabler som anges nedan:

mongosh 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'

Det är allt du behöver veta om anslutningssträngar i MongoDB. Vi hoppas att du tyckte att artikelguiden var användbar. Om ja, vänligen lämna en kommentar i kommentarsfältet. Tack för att du läste.


  1. MongoDB $slice

  2. Åldras automatiskt MongoDB Collection Documents

  3. ClusterControl Prestanda och hälsoövervakning

  4. pymongo - dnspython-modulen måste installeras för att använda mongodb+srv:// URIs