Docs Menu
Docs Home
/ /

Conexiones avanzadas

La siguiente guía contiene información específica sobre ciertos tipos de configuraciones de MongoDB.

Para ver un ejemplo de conexión a un servidor independiente simple, consulte la Tutorial. Para establecer una conexión con las opciones de autenticación habilitadas, consulte la página Autenticación. Para ver un ejemplo de una conexión con compresión de datos, consulte la página Compresión de datos.

Conectando a un Elconjunto de réplicas es muy similar a conectarse a un servidor MongoDB independiente. Simplemente especifique el nombre del conjunto de réplicas usando ?replicaSet=myreplset Opción URI.

#include <bson/bson.h>
#include <mongoc/mongoc.h>
int
main (int argc, char *argv[])
{
mongoc_client_t *client;
mongoc_init ();
/* Create our MongoDB Client */
client = mongoc_client_new (
"mongodb://host01:27017,host02:27017,host03:27017/?replicaSet=myreplset");
/* Do some work */
/* TODO */
/* Clean up */
mongoc_client_destroy (client);
mongoc_cleanup ();
return 0;
}

Tip

Se pueden especificar varios nombres de host en la URI de la cadena de conexión de MongoDB, con una coma que separa los hosts en la lista de semillas.

Se recomienda utilizar una lista de miembros del conjunto de réplicas para permitir que el controlador se conecte a cualquier nodo.

Para conectarse a un clúster fragmentado, especifique los mongos nodos a los que debe conectarse el cliente. El controlador C detectará automáticamente que se ha conectado a un mongos servidor de fragmentación.

Si se especifica más de un nombre de host, se creará una lista de semillas para intentar la conmutación por error entre las instancias mongos.

Advertencia

Especificar el parámetro replicaSet al conectarse a un servidor de fragmentación mongos no es válido.

#include <bson/bson.h>
#include <mongoc/mongoc.h>
int
main (int argc, char *argv[])
{
mongoc_client_t *client;
mongoc_init ();
/* Create our MongoDB Client */
client = mongoc_client_new ("mongodb://myshard01:27017/");
/* Do something with client ... */
/* Free the client */
mongoc_client_destroy (client);
mongoc_cleanup ();
return 0;
}

El controlador C de MongoDB resolverá automáticamente las direcciones IPv6 a partir de los nombres de host. Sin embargo, para especificar una dirección IPv6 directamente, escríbala entre [].

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://[::1]:27017");

Si se conecta a un nombre de host con4 6 registros DNS IPv e IPv, el comportamiento sigue la norma RFC-.6555 6 Primero se intenta una conexión a la dirección IPv. Si6 falla la conexión IPv, se intenta una conexión a la4 dirección IPv. Si la conexión a IPv6 no se completa en 250ms, se intenta una conexión a IPv4 en paralelo. La conexión que se conecte primero cancela la otra. El resultado DNS correcto se almacena en caché durante 10 minutos.

Como consecuencia, los intentos de conectarse a un mongod que solo escucha en IPv4 pueden retrasarse si hay registros DNS A (IPv4) y AAAA (IPv6) asociados con el host.

Para evitar retrasos, configure los nombres de host para que coincidan con la configuración de MongoDB. Es decir, cree un registro A solo si MongoDB solo escucha en IPv4.

En sistemas tipo UNIX, el controlador C puede conectarse directamente a un servidor MongoDB mediante un socket de dominio UNIX. Pase la ruta URL codificada al socket, que debe tener el .sock sufijo. Por ejemplo, para conectarse a un socket de dominio /tmp/mongodb-27017.sock en:

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://%2Ftmp%2Fmongodb-27017.sock");

Incluya nombre de usuario y contraseña de la siguiente manera:

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://user:pass@%2Ftmp%2Fmongodb-27017.sock");

Estas son instrucciones para configurar conexiones TLS/SSL.

Para ejecutar un servidor localmente (en el puerto 27017, por ejemplo):

$ mongod --port 27017 --tlsMode requireTLS --tlsCertificateKeyFile server.pem --tlsCAFile ca.pem

Agregue /?tls=true al final de una URI de cliente.

mongoc_client_t *client = NULL;
client = mongoc_client_new ("mongodb://localhost:27017/?tls=true");

MongoDB requiere certificados de cliente por defecto, a menos que se proporcione --tlsAllowConnectionsWithoutCertificates. El controlador C se puede configurar para presentar un certificado de cliente mediante la opción URI tlsCertificateKeyFile, a la que se puede hacer referencia mediante la constante MONGOC_URI_TLSCERTIFICATEKEYFILE.

mongoc_client_t *client = NULL;
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost:27017/?tls=true");
mongoc_uri_set_option_as_utf8 (uri, MONGOC_URI_TLSCERTIFICATEKEYFILE, "client.pem");
client = mongoc_client_new_from_uri (uri);

El certificado de cliente proporcionado por tlsCertificateKeyFile debe ser emitido por una de las autoridades de certificación confiables del servidor enumeradas en --tlsCAFile, o emitido por una CA en el almacén de certificados nativos en el servidor cuando se omite.

Consulte Configuración de TLS para obtener más información sobre las distintas opciones relacionadas con TLS.

Este contenido se ha reubicado en la página Compresión de datos.

La lista completa de opciones de conexión se puede encontrar en la documentación de mongoc_uri_t.

Algunas opciones relacionadas con el socket/conexión no son configurables:

Opción
Descripción
Valor
SO_KEEPALIVE
TCP Keep Alive
Enabled

TCP_KEEPIDLE

¿Cuánto tiempo debe permanecer inactiva una conexión antes de que TCP comience a enviar sondas keepalive?

120 segundos

TCP_KEEPINTVL
The time in seconds between TCP probes
10 seconds

TCP_KEEPCNT

¿Cuántas sondas enviar, sin acuse de recibo, antes de perder la conexión?

9 probes

TCP_NODELAY
Send packets as soon as possible or buffer small packets (Nagle algorithm)
Enabled (no buffering)

Volver

Tareas comunes

En esta página