Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Learn why MongoDB was selected as a leader in the 2024 Gartner® Magic Quadrant™
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

MongoDB 3.6: Aqui para o SRV com conexões de conjunto de réplicas mais fáceis

Joe Drumgoole4 min read • Published Dec 17, 2021 • Updated Sep 23, 2022
MongoDB
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse anúncio
star-empty
star-empty
star-empty
star-empty
star-empty
Sevocê se conectou ao MongoDB Atlas recentemente - e você deveria, a camada de nível básico é gratuita! - talvez tenha notado uma nova e estranha sintaxe nas strings de conexão 3.6.
Captura de tela do Atlas SRV Address

Listas de sementes do MongoDB

O que é essa sintaxe mongodb+srv?
Bem, no MongoDB 3.6 introduzimos o conceito de uma lista de sementes que é especificada usando registros DNS, especificamente registros SRV e TXT. Você se lembrará do uso de conjuntos de réplicas com o MongoDB de que o cliente deve especificar pelo menos um membro do conjunto de réplicas (e pode especificar vários deles) ao se conectar. Isso permite que um cliente se conecte a um conjunto de réplicas mesmo se um dos nós especificados pelo cliente não estiver disponível.
Você pode ver um exemplo deste URL em uma string de conexão do cluster 3.4:
Captura de tela do Atlas: usando o driver 3.4 ou anterior
Observe que, sem a configuração do registro SRV, devemos listar vários nós (no caso do Atlas, sempre incluímos todos os membros do cluster, embora isso não seja necessário). Também temos que especificar as opções ssl e replicaSet.
Com o driver 3.4 ou anterior, temos que especificar todas as opções na linha de comando usando a sintaxe do URI do MongoDB.
O uso de registros SRV elimina a necessidade de cada cliente passar um conjunto completo de informações de estado para o cluster. Em vez disso, um único registro SRV identifica todos os nós associados ao cluster (e seus números de porta) e um registro TXT associado define as opções para o URI.

Leitura de registros SRV e TXT

Podemos ver como isso funciona na prática em um cluster MongoDB Atlas com um script Python simples.
1import srvlookup #pip install srvlookup
2import sys
3import dns.resolver #pip install dnspython
4
5host = None
6
7if len(sys.argv) > 1 :
8 host = sys.argv[1]
9
10if host :
11 services = srvlookup.lookup("mongodb", domain=host)
12 for i in services:
13 print("%s:%i" % (i.hostname, i.port))
14 for txtrecord in dns.resolver.query(host, 'TXT'):
15 print("%s: %s" % ( host, txtrecord))
16
17else:
18 print("No host specified")
Podemos executar esse script usando o nó especificado na string de conexão 3.6 como um parâmetro.
O nó é especificado na string de conexão
1$ python mongodb_srv_records.py
2freeclusterjd-ffp4c.mongodb.net
3freeclusterjd-shard-00-00-ffp4c.mongodb.net:27017
4freeclusterjd-shard-00-01-ffp4c.mongodb.net:27017
5freeclusterjd-shard-00-02-ffp4c.mongodb.net:27017
6freeclusterjd-ffp4c.mongodb.net: "authSource=admin&replicaSet=FreeClusterJD-shard-0"
7$
Você também pode fazer essa pesquisa com o nslookup:
1JD10Gen-old:~ jdrumgoole$ nslookup
2> set type=SRV > \_mongodb._tcp.rs.joedrumgoole.com
3Server: 10.65.141.1
4Address: 10.65.141.1#53
5
6Non-authoritative answer:
7\_mongodb._tcp.rs.joedrumgoole.com service = 0 0 27022 rs1.joedrumgoole.com.
8\_mongodb._tcp.rs.joedrumgoole.com service = 0 0 27022 rs2.joedrumgoole.com.
9\_mongodb._tcp.rs.joedrumgoole.com service = 0 0 27022 rs3.joedrumgoole.com.
10
11Authoritative answers can be found from:
12> set type=TXT
13> rs.joedrumgoole.com
14Server: 10.65.141.1
15Address: 10.65.141.1#53
16
17Non-authoritative answer:
18rs.joedrumgoole.com text = "authSource=admin&replicaSet=srvdemo"
Veja como isso pode ser usado para construir uma string de conexão de estilo 3.4 comparando-a com a string de conexão 3.4 acima.
Como você pode ver, a complexidade do cluster e seus parâmetros de configuração são armazenados no servidor DNS e ocultos do usuário final. Se o endereço IP ou nome de um nó mudar, ou quisermos alterar o nome do conjunto de réplicas, tudo agora pode ser feito de forma totalmente transparente da perspectiva do cliente. Também podemos adicionar e remover nós de um cluster sem afetar os clientes.
Portanto, agora, sempre que você vir mongodb+srv, saberá que está esperando um registro SRV e TXT para fornecer a string de conexão do cliente.

Criação de registros SRV e TXT

É claro que os registros SRV e TXT não são apenas para o Atlas. Você também pode criar seus próprios registros SRV e TXT para seus clusters MongoDB auto-hospedados. Para isso, basta ter acesso de edição ao seu servidor DNS para poder adicionar registros SRV e TXT. Nos exemplos a seguir, estamos usando o serviço DNS do AWS Route 53 .
Configurei um conjunto de réplicas de demonstração na AWS com uma configuração de três nós. São elas
1rs1.joedrumgoole.com
2rs2.joedrumgoole.com
3rs3.joedrumgoole.com
Cada um tem um processo mongod em execução na porta 27022. Configurei um grupo de segurança que permite acesso ao meu laptop local e aos próprios nós para que eles possam se ver.
Também configurei os nomes DNS para os nós acima no AWS Route 53.
Definindo nomes DNS no AWS Route 53
Podemos iniciar os processos mongod executando o seguinte comando em cada nó.
1$ sudo /usr/local/m/versions/3.6.3/bin/mongod --auth --port 27022 --replSet srvdemo --bind_ip 0.0.0.0 --keyFile mdb_keyfile"
Agora precisamos configurar os registros SRV e TXT para esse cluster.
O registro SRV aponta para o servidor ou servidores que formarão os nós do conjunto de réplicas. O registro TXT define as opções do conjunto de réplicas, especificamente o banco de dados que será usado para autorização e o nome do conjunto de réplicas. É importante observar que o URI de formato MongoDB+srv adiciona implicitamente "ssl=true". No nosso caso, SSL não é usado para a demonstração, então temos que anexar "&ssl=false" ao connector do cliente. Observe que o registro SRV foi projetado especificamente para consultar o serviço mongodb referenciado no início da URL.
As configurações no AWS Route 53 são:
Página de configurações do AWS Route 53 - Nome, Tipo, Alias: TTL e Valor
O que leva à seguinte entrada no arquivo de zona para Route 53.
Entrada gerada na rota 53
Agora podemos adicionar o registro TXT. Por convenção, usamos o mesmo nome do registro SRV (rs.joedrumgoole.com) para que o MongoDB saiba onde encontrar o registro TXT.
Podemos fazer isso no AWS Route 53 da seguinte maneira:
Editando a configuração do registro para definir 'rs.joedrumgoole.com' como nome
Isso criará o seguinte registro TXT.
Entrada do Route 53 atualizada
Agora podemos acessar este serviço como :
1mongodb+srv://rs.joedrumgoole.com/test
Isso recuperará um URL completo e uma string de conexão que podem ser usados para entrar em contato com o serviço.
O processo completo é descrito abaixo:
Processo de configuração da string de conexão SRV
Depois que seus registros forem configurados, você poderá alterar facilmente os números de porta sem afetar os clientes e também adicionar e remover membros do cluster.
Os registros SRV são outra maneira pela qual o MongoDB está facilitando a vida de desenvolvedores de banco de dados em todos os lugares.
Você pode se inscrever no nível gratuito do MongoDB Atlas, adequado para um único usuário.
Descubra como usar sua linguagem de programação favorita com o MongoDB por meio de nossos drivers do MongoDB.
Visite a MongoDB University para obter treinamento online gratuito sobre todos os aspectos do MongoDB.
Siga Joe Drumgoole no Twitter para mais notícias sobre o MongoDB.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse anúncio
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Artigo

3 Funcionalidades do MongoDB subutilizadas


Sep 11, 2024 | 6 min read
Tutorial

Unindo coleções no MongoDB com .NET Core e um pipeline de agregação


Feb 03, 2023 | 7 min read
Tutorial

Usando o LINQ para consultar o MongoDB em um aplicativo .NET Core


Jun 10, 2024 | 6 min read
Artigo

Orquestração do MongoDB com o Spring e Atlas Kubernetes Operator


Jun 12, 2024 | 13 min read
Sumário