sql >> Base de Datos >  >> NoSQL >> MongoDB

Cadena de conexión en MongoDB (con ejemplos)

Para que las aplicaciones se conecten a un servidor de base de datos, deben usar una cadena de conexión, que es una expresión que contiene todos los parámetros necesarios. Las cadenas de conexión proporcionan la instancia del servidor, el nombre de la base de datos, los detalles de autenticación y otros parámetros para interactuar con el servidor de la base de datos.

Formatos para cadenas de conexión

Cualquiera de los métodos proporcionados configurará una cadena de conexión MongoDB. El formato de conexión de la lista de semillas de DNS o el formato de cadena de conexión estándar.

El formato estándar para conectar cadenas

Hay tres tipos básicos de implementaciones de MongoDB:independiente, conjunto de réplicas y clúster fragmentado, todos los cuales se describen aquí.

Esta es la forma típica de unir URI.

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

Ejemplos:

Independiente
mongodb://mongodb0.example.com:27017
Independiente que aplica el control de acceso:
mongodb://myDBReader:D1fficultP%[email protected]:27017/?authSource=admin
Conjunto de réplicas
mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
Conjunto de réplicas que aplica el control de acceso:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
Clúster fragmentado
mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
Clúster fragmentado que aplica el control de acceso:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin

Componentes de una cadena de conexión

Componentes de la cadena de conexión URI estándar:

  1. mongodb:// – Un prefijo necesario que indica una cadena de conexión estándar.
  2. nombre de usuario:contraseña@ – Las credenciales de autenticación son opcionales. Si se proporciona authSource, el cliente intentará autenticar al usuario. Sin especificar un origen de autenticación, el cliente verificará al usuario con la base de datos de autenticación predeterminada. Además, la base de datos de administración se usa si no se proporciona la base de datos predeterminada.
  3. host[:puerto] – El host (y, opcionalmente, el número de puerto) en el que opera la instancia de mongod (o la instancia de mongos en el caso de un clúster fragmentado). Puede indicar un nombre de host, una dirección IP o un socket en un dominio UNIX. Indique la cantidad de hosts requeridos para su topología de implementación:
    En el caso de una única instancia de mongod, proporcione el nombre de host de la instancia de mongod.
    Proporcione los nombres de host de las instancias de mongod especificadas en la configuración del conjunto de réplicas para un conjunto de réplicas.
    Indique los nombres de host de la instancia mongos para un clúster fragmentado. Sin especificar un número de puerto, se utiliza el puerto genérico 27017.
  4. /defaultauthdb – Opcional. Si la cadena de conexión contiene nombre de usuario:contraseña@credenciales, pero no se proporciona la opción authSource, se utiliza la base de datos de autenticación. El cliente utiliza la base de datos de administración para autenticar al usuario si no se proporciona authSource ni defaultauthdb.
  5. ? Opcional. Los parámetros específicos de la conexión se especifican en pares nombre>=valor> en la cadena de consulta. La lista de opciones disponibles se puede ver en la sección Opciones de cadena de conexión. Se debe incluir una barra inclinada (/) entre el host y el signo de interrogación (?) para comenzar la cadena de opciones si no se especifica ninguna base de datos en la cadena de conexión.

Formato de conexión para la lista de semillas de DNS

También hay una lista de semillas construida por DNS para conexiones MongoDB. El uso de DNS para crear la lista de servidores accesibles ofrece una mayor flexibilidad de implementación y la capacidad de cambiar de servidor en ciclos sin volver a configurar los clientes.

Use el prefijo mongodb+srv en lugar del prefijo de cadena de conexión MongoDB normal para usar la lista de semillas de DNS. Para decirle al usuario que el siguiente nombre de host es un registro DNS SRV, use el prefijo +srv. Luego, mongosh o el controlador consultarán el sistema de nombres de dominio (DNS) para descubrir qué hosts están ejecutando las instancias de mongod.

Nota: La opción tls (o el ssl correspondiente) se establece en verdadero si se usa la variable de cadena de conexión +srv. Al especificar explícitamente la opción tls en false en la cadena de consulta, puede anular este comportamiento y usar tls=false en su lugar.

Las cadenas de conexión de la lista de semillas de DNS a menudo se parecen al siguiente ejemplo:

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

La configuración de DNS puede verse así:

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.

La conexión con los miembros de la lista de semillas da a los clientes acceso a un directorio de otros miembros del conjunto de réplicas para establecer una conexión. El host puede producir una lista de servidores diferente de la lista de semillas, ya que los clientes suelen utilizar alias de DNS en sus listas de semillas. Solo se puede acceder a los miembros del conjunto de réplicas a través de sus nombres de host; por lo tanto, si esto ocurre, los usuarios utilizarán los nombres de host proporcionados por la replicación en lugar de los indicados en la lista de semillas.

Nota: Los registros SRV proporcionados por el nombre de host especificado deben tener el mismo dominio principal (example.com) que el propio nombre de host. No se le permitirá conectarse si los dominios principales y los nombres de host no coinciden.

Además, las cadenas de conexión de la lista de semillas de DNS le permiten proporcionar parámetros como parte de una URL de la misma manera que lo hacen los ordinarios. También puede usar un registro TXT para indicar las siguientes configuraciones cuando usa una cadena de conexión de lista de semillas de DNS:

authSource
replicaSet

Solo se puede especificar un registro TXT para cada instancia de mongod. El cliente devolverá un error si el DNS tiene varias entradas TXT o si la entrada TXT contiene un atributo que no sea replicaSet o authSource.

El registro TXT para server.example.com se vería así:

Record              TTL   Class    Text

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

Esta cadena de conexión se genera a partir de las entradas SRV de DNS, así como de la configuración del registro TXT, de la siguiente manera:

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

Las opciones de un registro TXT se pueden anular proporcionando el parámetro de cadena de consulta de la URL. La cadena de consulta en el siguiente escenario anula la opción authSource establecida en el registro TXT de la entrada DNS.

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

Usando la anulación de authSource, la cadena de conexión típica se vería así:

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

Nota: Si el nombre de host especificado en la cadena de conexión no tiene ningún registro DNS asociado, el parámetro mongodb+srv fallará. Como última nota, cuando se utiliza la modificación de la cadena de conexión +srv, la opción para utilizar TLS (o la seguridad SSL equivalente) se establece en verdadero para la conexión. Al especificar explícitamente la opción tls en false en la cadena de consulta, puede anular este comportamiento y usar tls=false en su lugar.

Obtenga su cadena de conexión MongoDB

Necesitará una cadena URI para conectarse a MongoDB. Si se vincula a una implementación de MongoDB mediante el shell de mongo, Compass o los controladores de MongoDB, se le solicitará el URI (identificador uniforme de recursos).

Se supone que ya configuró la autenticación en MongoDB y generó un nombre de usuario y una contraseña para los derechos de lectura y escritura en una base de datos MongoDB al usar la cadena URI provista.

En este caso, puede utilizar el nombre de usuario y la contraseña que creó para la función readWriteAnyDatabase así como el nombre de la base de datos de administrador en su cadena de conexión para conectarse a MongoDB.

Opciones para la cadena de conexión

Esta sección explica las diversas formas en que puede conectarse a Internet.

  1. En forma de un par nombre=valor, las opciones de conexión están disponibles.
  2. Cuando se utiliza un controlador, el nombre de la opción no distingue entre mayúsculas y minúsculas.
  3. El nombre de la opción no distingue entre mayúsculas y minúsculas cuando se usa mongosh o el shell mongo tradicional (versión 4.2 o posterior).
  4. El nombre de la opción distingue entre mayúsculas y minúsculas cuando se usa una versión 4.0 o una versión anterior del shell mongo heredado.
  5. El caso nunca es un problema cuando se muestra el valor.

La letra ampersand (&) puede separar opciones, como nombre1=valor1&nombre2=valor2. Los parámetros ReplicaSet y connectTimeoutMS se incluyen en la siguiente conexión:

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

Nota: Los controladores ahora aceptan puntos y comas (;) como separadores de opciones para preservar la compatibilidad con software anterior.

Ejemplos de cadenas de conexión

Encontrará ejemplos de URI para puntos de conexión populares en los siguientes ejemplos.

Ejecute el servidor de base de datos localmente

El puerto predeterminado de un servidor de base de datos local se puede usar para establecer una conexión con el siguiente comando:

mongodb://localhost
Base de datos administrativa

Para iniciar sesión en la base de datos de administración como foss con la contraseña fosslinux, se deben seguir los siguientes comandos:

mongodb://foss:fosslinux@localhost
Una base de datos de registros

Conexión e inicio de sesión en la base de datos de registros utilizando la contraseña fosslinux como administrador del sistema.

mongodb://foss:fosslinux@localhost/records
Sockets de dominio en UNIX

Cuando se conecte a un socket de dominio UNIX, use una cadena de conexión cifrada con URL.

MongoDB se vincula a un punto final de dominio UNIX con la siguiente ruta:

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

Nota: todos los controladores no admiten sockets de dominio UNIX. Para obtener más información sobre su controlador, vaya a la sección de documentación del controlador.

Conjunto de réplicas con usuarios en distintas máquinas

A continuación se muestra una conexión a un conjunto de réplicas de dos miembros en db1.example.net y db2.example.net:

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

Nota: Las instancias de mongod proporcionadas en la configuración del conjunto de réplicas deben especificarse para un conjunto de réplicas.

Conjunto de réplicas con usuarios en localhost

Los puertos 27017, 27018 y 27019 se utilizan para establecer una conexión con un conjunto de réplicas que opera en localhost:

mongodb://localhost,localhost:27018,localhost:27019/?replicaSet=test
Conjunto de réplicas de distribución de lectura

Conectarse a un conjunto de réplicas de tres miembros y distribuir las lecturas a los miembros secundarios implica el método que se indica a continuación:

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&readPreference=secondary
Conjunto de réplicas de problemas de escritura de alto nivel

La conexión a un conjunto de réplicas que contiene un problema de escritura y un tiempo de espera de dos segundos mientras se espera la replicación en la mayoría de los miembros con derecho a voto que contienen datos se logra mediante esta configuración:

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

Es posible conectarse a un clúster fragmentado de múltiples instancias usando lo siguiente:

mongodb://router1.example.com:27017,router2.example2.com:27017,router3.example3.com:27017/
Clúster Atlas de MongoDB

Lo siguiente establece una conexión a un clúster de MongoDB Atlas utilizando las credenciales de AWS IAM para la autenticación:

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

Este ejemplo muestra cómo utilizar el método de autenticación MONGODB-AWS y $external authSource para conectarse a Atlas a través de las credenciales de IAM de AWS.

Se debe proporcionar el valor de AWS SESSION TOKEN authMechanismProperties si está utilizando un token de sesión de AWS, de la siguiente manera:

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

Nota: Siempre que el ID de clave de acceso de AWS o la clave de acceso secreta contenga alguno de los siguientes caracteres:(: /? # [ ] @ ), debe usar la codificación porcentual para codificarlos.

También puede utilizar variables de entorno de AWS IAM regulares para especificar estas credenciales en su plataforma. Al usar la autenticación MONGODB-AWS, mongosh verifica y determina si las siguientes variables de entorno están presentes:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

Una cadena de conexión no necesita incluir estas credenciales si está configurada.

En el shell bash, las siguientes variables se establecen en el siguiente ejemplo:

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

La sintaxis para establecer variables de entorno diferirá en otros shells, así que tenga esto en cuenta. Para más información, consulta la documentación de tu plataforma.

El siguiente comando confirmará si se han establecido o no ciertas variables de entorno:

env | grep AWS

El siguiente código muestra cómo establecer una conexión a un clúster de MongoDB Atlas mediante el uso de las variables que se enumeran a continuación:

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

Eso es todo lo que necesita saber sobre las cadenas de conexión en MongoDB. Esperamos que la guía de artículos le haya resultado útil. En caso afirmativo, deje un comentario en la sección de comentarios. Gracias por leer.