MongoDB 3.6: Aqui para o SRV com conexões de conjunto de réplicas mais fáceis
Avalie esse anúncio
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.
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:
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.
Podemos ver como isso funciona na prática em um cluster MongoDB Atlas com um script Python simples.
1 import srvlookup #pip install srvlookup 2 import sys 3 import dns.resolver #pip install dnspython 4 5 host = None 6 7 if len(sys.argv) > 1 : 8 host = sys.argv[1] 9 10 if 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 17 else: 18 print("No host specified")
Podemos executar esse script usando o nó especificado na string de conexão 3.6 como um parâmetro.
1 python mongodb_srv_records.py 2 freeclusterjd-ffp4c.mongodb.net 3 freeclusterjd-shard-00-00-ffp4c.mongodb.net:27017 4 freeclusterjd-shard-00-01-ffp4c.mongodb.net:27017 5 freeclusterjd-shard-00-02-ffp4c.mongodb.net:27017 6 freeclusterjd-ffp4c.mongodb.net: "authSource=admin&replicaSet=FreeClusterJD-shard-0" 7
Você também pode fazer essa pesquisa com o nslookup:
1 JD10Gen-old:~ jdrumgoole$ nslookup 2 set type=SRV > \_mongodb._tcp.rs.joedrumgoole.com 3 Server: 10.65.141.1 4 Address: 10.65.141.1#53 5 6 Non-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 11 Authoritative answers can be found from: 12 set type=TXT 13 rs.joedrumgoole.com 14 Server: 10.65.141.1 15 Address: 10.65.141.1#53 16 17 Non-authoritative answer: 18 rs.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.É 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
1 rs1.joedrumgoole.com 2 rs2.joedrumgoole.com 3 rs3.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.
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:
O que leva à seguinte entrada no arquivo de zona para Route 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:
Isso criará o seguinte registro TXT.
Agora podemos acessar este serviço como :
1 mongodb+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:
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.
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.