Conexões avançadas
Nesta página
O guia a seguir contém informações específicas para determinados tipos de configurações do MongoDB.
Para ver um exemplo de conexão com um servidor autônomo simples, consulte oTutorial . Para estabelecer uma conexão com as opções de autenticação habilitadas, consulte a página Autenticação . Para ver um exemplo de uma conexão com compressão de dados, consulte a página Compressão de dados .
Conexão com conjunto de réplicas
A conexão a umconjunto de réplicas é muito parecida com a conexão a um servidor MongoDB autônomo . Basta especificar o nome do conjunto de réplicas usando a opção ?replicaSet=myreplset
URI.
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; }
Dica
Vários nomes de host podem ser especificados no URI da connection string do MongoDB, com uma vírgula separando os hosts na lista de sementes.
É recomendável usar uma lista de sementes de membros do conjunto de réplicas para permitir que o driver se conecte a qualquer nó.
Conectando-se a um cluster fragmentado
Para se conectar a um cluster fragmentado, especifique os nós mongos
aos quais o cliente deve se conectar. O Driver C detectará automaticamente que se conectou a um servidor de fragmentação mongos
.
Se mais de um nome de host for especificado, uma lista de sementes será criada para tentar o failover entre as instâncias do mongos
.
Aviso
A especificação do parâmetro replicaSet
ao conectar a um servidor de fragmentação mongos
é inválida.
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; }
Conectando-se a um endereço IPv6
O driver C do MongoDB resolverá automaticamente os endereços IPv6 dos nomes de host. No entanto, para especificar um endereço IPv6 diretamente, envolva o endereço em []
.
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://[::1]:27017");
Conexão com IPv4 e IPv6
Se estiver conectando a um nome de host que tenha registros4 DNS IPv e IPv6 , o comportamento segue RFC-6555. Uma conexão com o endereço IPv6 é tentada primeiro. Se o IPv6 falhar, será tentada uma conexão com o endereço IPv4 . Se a tentativa de conexão com o IPv6 não for concluída dentro 250ms, o IPv4 será tentado em paralelo. O que tiver sucesso na conexão primeiro cancela o outro. O resultado de DNS bem-sucedido é armazenado em cache por 10 minutos.
Como consequência, as tentativas de se conectar a um mongod apenas escutando em IPv4 podem ser atrasadas se houver registros DNS A (IPv4) e AAAA (IPv6) associados ao host.
Para evitar atrasos, configure os nomes de host para corresponder à configuração do MongoDB . Ou seja, crie somente um registro A se o mongod estiver escutando apenas no IPv4.
Conectando-se a um soquete de domínio UNIX
Em sistemas do tipo UNIX, o C Driver pode se conectar diretamente a um servidor MongoDB usando um soquete de domínio UNIX. Passe o caminho codificado da URL para o soquete, que deve ser sufixado com .sock
. Por exemplo, para conectar a um soquete de domínio em /tmp/mongodb-27017.sock
:
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://%2Ftmp%2Fmongodb-27017.sock");
Inclua nome de usuário e senha da seguinte forma:
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://user:pass@%2Ftmp%2Fmongodb-27017.sock");
Conectar a um servidor por TLS
Estas são instruções para configurar conexões TLS/SSL.
Para executar um servidor localmente (na porta 27017, por exemplo):
$ mongod --port 27017 --tlsMode requireTLS --tlsCertificateKeyFile server.pem --tlsCAFile ca.pem
Adicione /?tls=true
ao final do URI de um cliente .
mongoc_client_t *client = NULL; client = mongoc_client_new ("mongodb://localhost:27017/?tls=true");
O MongoDB exige certificados de cliente por padrão, a menos que o --tlsAllowConnectionsWithoutCertificates
seja fornecido. O Driver C pode ser configurado para apresentar um certificado de cliente usando a opção URI tlsCertificateKeyFile
, que pode ser referenciada por meio da 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);
O certificado de cliente fornecido pelo tlsCertificateKeyFile
deve ser emitido por uma das Autoridades de Certificado confiáveis do servidor listadas no --tlsCAFile
ou emitida por uma CA no armazenamento de certificado nativo no servidor quando omitido.
Consulte Configuração do TLS para obter mais informações sobre as várias opções relacionadas ao TLS.
Compactando dados de e para MongoDB
Este conteúdo foi realocado para a página Compressão de dados .
Opções adicionais de conexão
A lista completa de opções de conexão pode ser encontrada em mongoc_uri_t Docs.
Algumas opções relacionadas a soquete/conexão não são configuráveis:
Opção | Descrição | Valor |
---|---|---|
SO_KEEPALIVE | TCP Keep Alive | Enabled |
TCP_KEEPIDLE | Quanto tempo uma conexão precisa permanecer ociosa antes que o TCP comece a enviar sondagens de keepalive | 120 segundos |
TCP_KEEPINTVL | The time in seconds between TCP probes | 10 seconds |
TCP_KEEPCNT | Quantas sondas enviar, sem confirmação, antes de encerrar a conexão | 9 probes |
TCP_NODELAY | Send packets as soon as possible or buffer small packets (Nagle algorithm) | Enabled (no buffering) |