MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Parametry połączenia w MongoDB (z przykładami)

Aby aplikacje mogły łączyć się z serwerem bazy danych, muszą używać parametrów połączenia, które są wyrażeniem zawierającym wszystkie wymagane parametry. Ciągi połączenia zapewniają instancję serwera, nazwę bazy danych, szczegóły uwierzytelniania i inne parametry do interakcji z serwerem bazy danych.

Formaty parametrów połączenia

Każda z podanych metod skonfiguruje ciąg połączenia MongoDB. Format połączenia listy nasion DNS lub standardowy format ciągu połączenia.

Standardowy format łączenia ciągów

Istnieją trzy podstawowe typy wdrożeń MongoDB:autonomiczne, zestaw replik i klaster sharded, wszystkie opisane tutaj.

To typowy sposób dołączania do identyfikatorów URI.

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

Przykłady:

Samodzielny
mongodb://mongodb0.example.com:27017
Samodzielny, który wymusza kontrolę dostępu:
mongodb://myDBReader:D1fficultP%[email protected]:27017/?authSource=admin
Zestaw replik
mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
Zestaw replik, który wymusza kontrolę dostępu:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
Klaster podzielony
mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
Sharded Klaster, który wymusza kontrolę dostępu:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin

Komponenty ciągu połączenia

Składniki standardowego ciągu połączenia URI:

  1. mongodb:// – Niezbędny przedrostek wskazujący standardowe parametry połączenia.
  2. nazwa użytkownika:hasło@ – Poświadczenia uwierzytelniania są opcjonalne. Jeśli podano authSource, klient spróbuje uwierzytelnić użytkownika. Bez określania authSource klient zweryfikuje użytkownika względem defaultauthdb. Dodatkowo baza danych administratora jest używana, jeśli nie podano domyślnej bazy danych.
  3. host[:port] – Host (i opcjonalnie numer portu), na którym działa instancja mongod (lub instancja mongos w przypadku klastra podzielonego na fragmenty). Możesz podać nazwę hosta, adres IP lub gniazdo w domenie UNIX. Wskaż liczbę hostów wymaganych dla topologii wdrożenia:
    W przypadku pojedynczej instancji mongod podaj nazwę hosta instancji mongod.
    Podaj nazwę hosta określonej instancji mongod w ustawieniach zestawu replik dla zestawu replik.
    Wskaż nazwy hostów instancji mongos dla klastra podzielonego na fragmenty. Bez określenia numeru portu używany jest ogólny port 27017.
  4. /defaultauthdb – Opcjonalny. Jeśli ciąg połączenia zawiera poświadczenia username:password@, ale nie podano opcji authSource, używana jest baza danych uwierzytelniania. Klient używa bazy danych administratora do uwierzytelnienia użytkownika, jeśli nie podano zarówno authSource, jak i defaultauthdb.
  5. ? Opcjonalny. Parametry specyficzne dla połączenia są określone w parach nazwa>=wartość> w ciągu zapytania. Listę dostępnych opcji można zobaczyć w sekcji Opcje parametrów połączenia. Ukośnik (/) musi być zawarty między hostem a znakiem zapytania (?), aby rozpocząć ciąg opcji, jeśli w ciągu połączenia nie określono bazy danych.

Format połączenia dla listy początkowej DNS

Istnieje również skonstruowana przez DNS lista nasion dla połączeń MongoDB. Używanie DNS do budowania listy dostępnych serwerów zapewnia większą elastyczność wdrażania i możliwość cyklicznego przełączania serwerów bez ponownej konfiguracji klientów.

Użyj prefiksu mongodb+srv zamiast zwykłego prefiksu parametrów połączenia MongoDB, aby użyć listy nasion DNS. Aby poinformować użytkownika, że ​​następująca nazwa hosta jest rekordem DNS SRV, użyj prefiksu +srv. Następnie mongosh lub sterownik zapyta system nazw domen (DNS), aby odkryć, które hosty wykonują instancje mongod.

Uwaga: Opcja tls (lub odpowiedni ssl) jest ustawiona na wartość true, jeśli używana jest zmienna ciągu połączenia +srv. Określając jawnie opcję tls na false w ciągu zapytania, możesz zastąpić to zachowanie i zamiast tego użyć tls=false.

Ciągi połączeń listy nasion DNS często wyglądają jak w następującym przykładzie:

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

Konfiguracja DNS może wyglądać tak:

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.

Łączenie się z członkami listy początkowej daje klientom dostęp do katalogu innych członków zestawu replik w celu nawiązania połączenia. Host może utworzyć listę serwerów różną od listy początkowej, ponieważ klienci często używają aliasów DNS na swoich listach początkowych. Dostęp do członków zestawu replik można uzyskać tylko za pośrednictwem ich nazw hostów; dlatego, jeśli tak się stanie, użytkownicy będą używać nazw hostów podanych przez replikację, a nie tych podanych na liście źródeł.

Uwaga: Rekordy SRV dostarczone przez określoną nazwę hosta muszą mieć tę samą domenę nadrzędną (example.com), co sama nazwa hosta. Nie będziesz mógł się połączyć, jeśli domeny nadrzędne i nazwy hostów nie będą pasować.

Ponadto parametry połączenia listy inicjatorów DNS umożliwiają podanie parametrów jako części adresu URL w taki sam sposób, jak zwykłe. Możesz również użyć rekordu TXT, aby wskazać następujące ustawienia podczas korzystania z ciągu połączenia listy źródeł DNS:

authSource
replicaSet

Dla każdej instancji mongod można określić tylko jeden rekord TXT. Klient zwróci błąd, jeśli DNS ma wiele wpisów TXT lub jeśli wpis TXT zawiera atrybut inny niż repliceSet lub authSource.

Rekord TXT dla server.example.com wyglądałby tak:

Record              TTL   Class    Text

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

Ten ciąg połączenia jest generowany na podstawie wpisów DNS SRV oraz ustawień rekordu TXT w następujący sposób:

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

Wybór rekordu TXT można zastąpić, podając parametr ciągu zapytania adresu URL. Ciąg zapytania w następującym scenariuszu zastępuje opcję authSource ustawioną w rekordzie TXT wpisu DNS.

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

Używając nadpisania authSource, typowy ciąg połączenia wygląda tak:

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

Uwaga: Jeśli z nazwą hosta określoną w ciągu połączenia nie są powiązane żadne rekordy DNS, parametr mongodb+srv zakończy się niepowodzeniem. Na koniec, podczas korzystania z modyfikacji ciągu połączenia +srv, opcja korzystania z TLS (lub równoważnego zabezpieczenia SSL) jest ustawiona na wartość true dla połączenia. Określając jawnie opcję tls na false w ciągu zapytania, możesz zastąpić to zachowanie i zamiast tego użyć tls=false.

Pobierz parametry połączenia MongoDB

Będziesz potrzebować ciągu URI, aby połączyć się z MongoDB. Jeśli łączysz się z wdrożeniem MongoDB za pomocą powłoki mongo, Compass lub sterowników MongoDB, zostaniesz poproszony o podanie identyfikatora URI (Uniform Resource Identifier).

Zakłada się, że skonfigurowałeś już uwierzytelnianie w MongoDB i wygenerowałeś nazwę użytkownika i hasło dla praw odczytu i zapisu do bazy danych MongoDB przy użyciu dostarczonego ciągu URI.

W takim przypadku możesz użyć loginu i hasła utworzonego dla roli readWriteAnyDatabase, a także nazwy bazy danych administratora w ciągu połączenia, aby połączyć się z MongoDB.

Opcje parametrów połączenia

Ta sekcja wyjaśnia różne sposoby łączenia się z Internetem.

  1. W postaci pary nazwa=wartość dostępne są opcje połączenia.
  2. W przypadku korzystania ze sterownika, w nazwie opcji nie jest rozróżniana wielkość liter.
  3. W nazwie opcji nie jest rozróżniana wielkość liter podczas używania mongosh lub tradycyjnej powłoki mongo (wersja 4.2 lub nowsza).
  4. W nazwie opcji rozróżniana jest wielkość liter podczas korzystania ze starszej powłoki mongo w wersji 4.0 lub starszej.
  5. Sprawa nigdy nie stanowi problemu podczas wyświetlania wartości.

Znak ampersand (&) może oddzielać opcje, takie jak nazwa1=wartość1&nazwa2=wartość2. Parametry ReplicaSet i connectTimeoutMS są zawarte w następującym połączeniu:

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

Uwaga: Sterowniki akceptują teraz średniki (;) jako separatory opcji, aby zachować zgodność ze starszym oprogramowaniem.

Przykłady ciągów połączeń

W poniższych przykładach znajdziesz przykłady URI dla popularnych punktów połączeń.

Uruchom serwer bazy danych lokalnie

Do nawiązania połączenia można użyć domyślnego portu lokalnego serwera bazy danych za pomocą następującego polecenia:

mongodb://localhost
Administracyjna baza danych

Aby zalogować się do bazy danych administratora jako foss przy użyciu hasła fosslinux, należy wykonać następujące polecenia:

mongodb://foss:fosslinux@localhost
Baza danych rekordów

Łączenie się i logowanie do bazy danych rekordów przy użyciu hasła fosslinux jako administrator systemu.

mongodb://foss:fosslinux@localhost/records
Gniazda domeny w systemie UNIX

Podłączając się do gniazda domeny UNIX, użyj ciągu połączenia zaszyfrowanego adresu URL.

MongoDB łączy się z punktem końcowym domeny UNIX z następującą ścieżką:

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

Uwaga: wszystkie sterowniki nie obsługują gniazd domeny UNIX. Aby dowiedzieć się więcej o sterowniku, przejdź do sekcji Dokumentacja sterownika.

Zestaw replik z użytkownikami na różnych maszynach

Poniżej znajduje się połączenie z dwuczłonową repliką ustawioną na db1.example.net i db2.example.net:

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

Uwaga: Instancje mongod podane w konfiguracji zestawu replik muszą być określone dla zestawu replik.

Zestaw replik z użytkownikami na hoście lokalnym

Porty 27017, 27018 i 27019 służą do nawiązania połączenia z zestawem replik działającym na hoście lokalnym:

mongodb://localhost,localhost:27018,localhost:27019/?replicaSet=test
Zestaw replik dystrybucji odczytu

Łączenie się z trzyelementowym zestawem replik i dystrybucja odczytów do drugorzędnych elementów członkowskich wiąże się z metodą wymienioną poniżej:

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&readPreference=secondary
Zestaw replik problemu zapisu wysokiego poziomu

Łączenie się z zestawem replik zawierającym problem z zapisem i dwusekundowym limitem czasu podczas oczekiwania na replikację przez większość członków głosujących posiadających dane odbywa się przy użyciu tej konfiguracji:

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=majority&wtimeoutMS=2000
Udostępniony klaster

Możliwe jest połączenie z wieloinstancyjnym klastrem podzielonym na fragmenty za pomocą:

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

Poniższe polecenie nawiązuje połączenie z klastrem MongoDB Atlas przy użyciu poświadczeń AWS IAM do uwierzytelniania:

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

Ten przykład pokazuje, jak wykorzystać metodę uwierzytelniania MONGODB-AWS i $external authSource, aby połączyć się z Atlasem za pomocą poświadczeń AWS IAM.

Wartość authMechanismProperties TOKEN SESJI AWS musi być podana, jeśli używasz tokena sesji AWS, w następujący sposób:

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>'

Uwaga: O ile identyfikator klucza dostępu AWS lub tajny klucz dostępu zawiera jeden z następujących znaków:(: / ? # [ ] @ ), musisz użyć kodowania procentowego, aby je zakodować.

Możesz również użyć zwykłych zmiennych środowiskowych AWS IAM, aby określić te poświadczenia na swojej platformie. Podczas korzystania z uwierzytelniania MONGODB-AWS mongosh sprawdza i upewnia się, czy występują następujące zmienne środowiskowe:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

Parametry połączenia nie muszą zawierać tych danych uwierzytelniających, jeśli są skonfigurowane.

W powłoce bash następujące zmienne są ustawione w następującym przykładzie:

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>'

Składnia do ustanawiania zmiennych środowiskowych będzie inna w innych powłokach, więc bądź tego świadomy. Aby uzyskać więcej informacji, przejdź do dokumentacji swojej platformy.

Następujące polecenie potwierdzi, czy określone zmienne środowiskowe zostały ustawione:

env | grep AWS

Poniższy kod pokazuje, jak nawiązać połączenie z klastrem MongoDB Atlas przy użyciu zmiennych wymienionych poniżej:

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

To wszystko, co musisz wiedzieć o parametrach połączenia w MongoDB. Mamy nadzieję, że przewodnik po artykułach okazał się pomocny. Jeśli tak, zostaw komentarz w sekcji komentarzy. Dziękuję za przeczytanie.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak usunąć indeks za pomocą Mongoose?

  2. Niebezpieczeństwa związane z indeksami budowlanymi na MongoDB

  3. Klucze obce w mongo?

  4. Indeks w MongoDB

  5. Samoobsługowa MongoDB