Os clusters fragmentados particionam dados em vários servidores com base em uma chave de fragmento. Um cluster fragmentado é mais bem dimensionado do que um conjunto de réplicas para implantações com grandes conjuntos de dados e operações de alta taxa de transferência.
Este tutorial converte uma única réplica de três membros definida em um cluster fragmentado com dois fragmentos. Cada fragmento no novo cluster é um conjunto independente de réplica de três membros.
Você pode converter em um cluster fragmentado na IU para implantações hospedadas no MongoDB Atlas.
Sobre esta tarefa
Algumas etapas deste tutorial causam tempo de inatividade para seu sistema. Etapas individuais indicam quando o tempo de inatividade ocorrerá.
Este tutorial é para sistemas que têm autenticação habilitada.
Neste tutorial, você especifica as configurações do servidor com arquivos de configuração. Os arquivos de configuração contêm configurações que são equivalentes às opções de linha de comando
mongodemongos.O cluster fragmentado que você implementa com este tutorial contém dez servidores:
Um servidor para o
mongos.Três servidores cada para os dois fragmentos no cluster (seis servidores no total).
Três servidores para o conjunto de réplicas do servidor de configuração.
Arquitetura de servidor
Este tutorial utiliza os seguintes servidores:
nome de anfitrião | Porta | Descrição |
|---|---|---|
|
| Membro do fragmento de suporte de dados inicial, |
|
| Membro do fragmento de suporte de dados inicial, |
|
| Membro do fragmento de suporte de dados inicial, |
|
| Membro do segundo shard que contém dados, |
|
| Membro do segundo shard que contém dados, |
|
| Membro do segundo shard que contém dados, |
|
| O |
|
| Membro do conjunto de réplica do servidor de configuração. |
|
| Membro do conjunto de réplica do servidor de configuração. |
|
| Membro do conjunto de réplica do servidor de configuração. |
Os nomes de host utilizados neste tutorial são exemplos. Substitua os nomes de host utilizados nos comandos de exemplo pelos nomes de host utilizados em seus sistemas.
Importante
Para evitar atualizações de configuração devido a alterações de endereço IP, use nomes de host DNS em vez de endereços IP. É particularmente importante usar um nome de host DNS em vez de um endereço IP ao configurar membros de conjunto de réplicas ou membros de cluster fragmentado.
Use nomes de host em vez de endereços IP para configurar cluster em um horizonte de rede dividido. Começando no MongoDB 5.0, nós configurados apenas com um endereço IP falham na validação de inicialização e não são iniciados.
Antes de começar
Para concluir este tutorial, você deve ter um conjunto de réplica que utilize um arquivo de chave ou autenticação de certificado X.509. Para implementar um conjunto de réplicas seguro que utiliza um destes métodos de autenticação, consulte:
Este tutorial utiliza os diretórios de dados padrão
/data/dbe/data/configdb. Para usar caminhos diferentes, defina a configuraçãostorage.dbPathno arquivo de configuração.O MongoDB oferece suporte à transição online de um conjunto de réplicas para um cluster 1-shard, permitindo que os comandos sejam executados diretamente em um shard. No entanto, quando o cluster tiver mais de um shard, somente os comandos listados poderão ser executados diretamente no shard sem a função
directShardOperationssomente de manutenção.
Passos
Observação
A partir do MongoDB,8.0 você só pode executar determinados comandos em nós em clusters fragmentados. Se você tentar se conectar diretamente a um nó e executar um comando não suportado, o MongoDB retornará um erro:
"You are connecting to a sharded cluster improperly by connecting directly to a shard. Please connect to the cluster via a router (mongos)."
Para executar um comando de banco de dados não suportado diretamente em um nó em um cluster fragmentado, você deve se conectar a mongos ou ter a função directShardOperations somente de manutenção.
Implemente o Config Server Replica Set
Implemente um conjunto de réplica de três membros para os servidores de configuração. Neste exemplo, os servidores de configuração usam os seguintes hosts:
mongodb7.example.netmongodb8.example.netmongodb9.example.net
Configure os servidores de configuração
Configure uma instância
mongodem cada host do servidor de configuração. Especifique essas opções no arquivo de configuração para cada instânciamongod:OpçãoValorconfigReplSetconfigsvrlocalhost, seguido por quaisquer outros nomes de host nos quaismongoddeve escutar conexões de cliente.replication: replSetName: configReplSet sharding: clusterRole: configsvr net: bindIp: localhost,<ipaddress> Inclua opções adicionais conforme apropriado para seu sistema.
Inicie os servidores de configuração.
Implemente o
mongodcom sua configuração especificada:mongod --config <PATH_TO_CONFIG_FILE> Os servidores de configuração usam o directoria de dados padrão
/data/configdbe a porta padrão27019.Conecte-se a um dos servidores de configuração.
Utilize o
mongoshpara conectar a um dos servidores de configuração. Por exemplo:mongosh "mongodb://mongodb7.example.net:27019" Inicie o conjunto de réplica do servidor de configuração.
Para iniciar o conjunto de réplicas, execute
rs.initiate():rs.initiate( { _id: "configReplSet", configsvr: true, members: [ { _id: 0, host: "mongodb7.example.net:27019" }, { _id: 1, host: "mongodb8.example.net:27019" }, { _id: 2, host: "mongodb9.example.net:27019" } ] } ) O comando anterior utiliza a exceção Localhost para executar ações administrativas sem autenticação.
Importante
Execute
rs.initiate()em apenas uma instânciamongodpara o conjunto de réplicas.
Restaurar usuários e roles existentes para a nova configuração
Restaure os usuários e as funções existentes que você obteve ao executar mongodump.
mongorestore ./adminDump --nsInclude "admin.*" --host <configPrimaryURI>
O comando anterior utiliza a exceção Localhost para executar ações administrativas sem autenticação.
A saída da execução desse comando pode ser semelhante a:
0 document(s) restored successfully
Essa mensagem não indica um problema. Essa saída significa que os documentos 0, exceto os usuários e as funções, foram restaurados.
Conjunto de réplicas do servidor de configuração segura
Reconfigurar e reiniciar o conjunto de réplicas do servidor de configuração.
Reconfigurar os servidores de configuração
Selecione a guia do mecanismo de autenticação:
Reinicie uma instância
mongodem cada um destes hosts:mongodb7.example.netmongodb8.example.netmongodb9.example.net
Especifique estas opções no arquivo de configuração para cada instância
mongod:OpçãoValorO caminho para o arquivo-chave usado para seu conjunto de réplicas inicial.
security: keyFile: <PATH_TO_KEYFILE> replication: replSetName: configReplSet sharding: clusterRole: configsvr net: bindIp: localhost,<ipaddress> Inclua opções adicionais conforme apropriado para seu sistema.
Reinicie uma instância
mongodem cada um destes hosts:mongodb7.example.netmongodb8.example.netmongodb9.example.net
Especifique essas opções no arquivo de configuração para cada instância
mongod, além das opções que você já configurou:OpçãoValorx509requireTLSO caminho absoluto para o arquivo
.pemque contém o certificado e a chave TLS.O caminho absoluto para o arquivo
.pemque contém a sequência de certificados raiz da autoridade de certificação.localhost, seguido por quaisquer outros nomes de host nos quaismongoddeve escutar conexões de cliente.AVISO: antes de vincular sua instância a um endereço IP acessível publicamente, você deve proteger seu cluster contra o acesso não autorizado. Para obter uma lista completa de recomendações de segurança, consulte a Lista de verificação de segurança para implementações autogerenciadas. No mínimo,procure habilitar a autenticação e fortalecer a infraestrutura de rede.
sharding: clusterRole: configsvr replication: replSetName: configReplSet security: clusterAuthMode: x509 net: tls: mode: requireTLS certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY> CAFile: <CA_FILE> bindIp: localhost,<ipaddress> Inclua opções adicionais conforme apropriado para sua implantação, como
net.tls.certificateKeyFilePasswordse o arquivo de chave de certificado TLS estiver criptografado com uma senha.Reinicie o MongoDB.
Reinicie o
mongodcom sua configuração especificada:mongod --config <PATH_TO_CONFIG_FILE> --shutdown mongod --config <PATH_TO_CONFIG_FILE>
Implemente o mongos
O mongos fornece a interface entre os aplicativos do cliente e o cluster fragmentado.
Crie um arquivo de configuração para os mongos.
Especifique estas opções em seu arquivo de configuração do
mongos:OpçãoValorconfigReplSet, seguido por uma barra/e pelo menos um dos nomes de host e portas do servidor de configuração.O caminho para o arquivo-chave usado para seu conjunto de réplicas inicial.
localhost, seguido por quaisquer outros nomes de host nos quaismongosdeve escutar conexões de cliente.sharding: configDB: configReplSet/mongodb7.example.net:27019,mongodb8.example.net:27019,mongodb9.example.net:27019 security: keyFile: <PATH_TO_KEYFILE> net: bindIp: localhost,<ipaddress> Inclua opções adicionais conforme apropriado para seu sistema.
Especifique estas opções em seu arquivo de configuração do
mongos:OpçãoValorconfigReplSet, seguido por uma barra/e pelo menos um dos nomes de host e portas do servidor de configuração.x509requireTLSO caminho absoluto para o arquivo
.pemque contém o certificado e a chave TLS.O caminho absoluto para o arquivo
.pemque contém a sequência de certificados raiz da autoridade de certificação.localhost, seguido por quaisquer outros nomes de host nos quaismongosdeve escutar conexões de cliente.sharding: configDB: configReplSet/mongodb7.example.net:27019,mongodb8.example.net:27019,mongodb9.example.net:27019 security: clusterAuthMode: x509 net: tls: mode: requireTLS certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY> CAFile: <CA_FILE> bindIp: localhost,<ipaddress> Inclua quaisquer opções adicionais apropriadas para sua implantação.
Implemente os mongos.
Implemente o
mongoscom sua configuração especificada:mongos --config <PATH_TO_CONFIG_FILE>
Reinicie o conjunto de réplicas iniciais como fragmento
Neste exemplo, seu conjunto de réplicas inicial é um conjunto de réplicas de três membros. Essa etapa atualiza o conjunto inicial de réplicas para que ele possa ser adicionado como um fragmento ao seu cluster fragmentado.
O conjunto de réplicas é executado nestes hosts:
mongodb0.example.net:27017mongodb1.example.net:27017mongodb2.example.net:27017
Para clusters fragmentados, você deve definir a função de cada instância mongod no fragmento como shardsvr. Para especificar a função do servidor, defina a configuração sharding.clusterRole no arquivo de configuração mongod.
Observação
Conecte-se a um membro do seu conjunto de réplicas inicial.
Use
mongoshpara se conectar a um dos membros do seu conjunto de réplicas inicial.mongosh "mongodb://<username>@mongodb0.example.net:27017" Se sua implantação usar a autenticação x.509, especifique estas
mongoshopções:Por exemplo:
mongosh "mongodb://<username>@mongodb0.example.net:27017" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> Determine o primário e os secundários do conjunto de réplicas.
Execute
rs.status()para determinar a primária e as secundárias:rs.status() Na saída de comando, o campo
replSetGetStatus.members[n].stateStrindica qual membro é o principal e quais membros são secundários.Reinicie os secundários com a opção
--shardsvr.Aviso
Essa etapa exige algum tempo de inatividade para os aplicativos conectados aos secundários do conjunto de réplicas.
Conecte-se a um secundário.
Utilize
mongoshpara se conectar a um dos secundários.mongosh "mongodb://<username>@<host>:<port>" Desative o secundário.
Execute os seguintes comandos:
use admin db.shutdownServer() Edite o arquivo de configuração do secundário.
No arquivo de configuração do secundário, defina
sharding.clusterRoleparashardsvr:security: keyFile: <PATH_TO_KEYFILE> replication: replSetName: rs0 sharding: clusterRole: shardsvr net: port: 27017 bindIp: localhost,<ipaddress> Inclua opções adicionais conforme apropriado para seu sistema.
Reinicie o secundário como um servidor shard.
Execute o seguinte comando no host que contém o secundário:
mongod --config <PATH_TO_CONFIG_FILE> Repita o desligamento e reinicie as etapas para o outro secundário.
Conecte-se a um secundário.
Utilize
mongoshpara se conectar a um dos secundários.Se sua implantação usar a autenticação x.509, especifique estas
mongoshopções:mongosh "mongodb://<username>@<host>:<port>" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> Desative o secundário.
Execute os seguintes comandos:
use admin db.shutdownServer() Edite o arquivo de configuração do secundário.
No arquivo de configuração do secundário, defina
sharding.clusterRoleparashardsvr:replication: replSetName: rs0 sharding: clusterRole: shardsvr security: clusterAuthMode: x509 net: port: 27017 tls: mode: requireTLS certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY> CAFile: <CA_FILE> bindIp: localhost,<ipaddress> Inclua opções adicionais conforme apropriado para sua implantação, como
net.tls.certificateKeyFilePasswordse o arquivo de chave de certificado TLS estiver criptografado com uma senha.Reinicie o secundário como um servidor shard.
Execute o seguinte comando no host que contém o secundário:
mongod --config <PATH_TO_CONFIG_FILE> Repita o desligamento e reinicie as etapas para o outro secundário.
Reinicie o primary com a --shardsvr opção.
Aviso
Esta etapa exige algum tempo de inatividade para aplicativos conectados à primária do conjunto de réplicas.
Conecte-se ao primary.
Use
mongoshpara se conectar ao primário:mongosh "mongodb://<username>@<host>:<port>" Rebaixe o primário.
Execute o seguinte comando:
rs.stepDown() Verifique se a redução foi concluída.
Execute
rs.status()para confirmar que o membro ao qual você está conectado foi rebaixado e agora é secundário:rs.status() Encerrar o primary antigo.
Execute os seguintes comandos:
use admin db.shutdownServer() Aguarde a conclusão do desligamento.
Edite o arquivo de configuração do primary.
No arquivo de configuração do primary, defina
sharding.clusterRoleparashardsvr:security: keyFile: <PATH_TO_KEYFILE> replication: replSetName: rs0 sharding: clusterRole: shardsvr net: port: 27017 bindIp: localhost,<ipaddress> Inclua opções adicionais conforme apropriado para seu sistema.
Reinicie o primary como um servidor fragmentado.
Execute o seguinte comando no host que contém o primary:
mongod --config <PATH_TO_CONFIG_FILE>
Conecte-se ao primary.
Utilize
mongoshpara se conectar a um dos secundários.Se sua implantação usar a autenticação x.509, especifique estas
mongoshopções:Se sua implantação usar a autenticação x.509, especifique estas
mongoshopções:mongosh "mongodb://<username>@<host>:<port>" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> Rebaixe o primário.
Execute o seguinte comando:
rs.stepDown() Verifique se a redução foi concluída.
Execute
rs.status()para confirmar que o membro ao qual você está conectado foi rebaixado e agora é secundário:rs.status() Encerrar o primary antigo.
Execute os seguintes comandos:
use admin db.shutdownServer() Aguarde a conclusão do desligamento.
Edite o arquivo de configuração do primary.
No arquivo de configuração do primary, defina
sharding.clusterRoleparashardsvr:replication: replSetName: rs0 sharding: clusterRole: shardsvr security: clusterAuthMode: x509 net: port: 27017 tls: mode: requireTLS certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY> CAFile: <CA_FILE> bindIp: localhost,<ipaddress> Inclua opções adicionais conforme apropriado para sua implantação, como
net.tls.certificateKeyFilePasswordse o arquivo de chave de certificado TLS estiver criptografado com uma senha.Reinicie o primary como um servidor fragmentado.
Execute o seguinte comando no host que contém o primary:
mongod --config <PATH_TO_CONFIG_FILE>
Adicione o conjunto de réplicas iniciais como um fragmento
Após converter o conjunto de réplica inicial (rs0) em um fragmento, adicione-o ao cluster fragmentado.
Conecte ao
mongoscomo o usuário administrativo do seu cluster.A instância do
mongosestá sendo executada no hostmongodb6.example.net.Para conectar
mongoshaomongos, execute o seguinte comando:mongosh "mongodb://admin01@mongodb6.example.net:27017" Esse comando autentica você como o usuário
admin01que você criou no cluster fragmentado. Depois de inserir o comando, digite a senha do usuário.Adicione o fragmento.
Para adicionar um fragmento ao cluster, execute o método
sh.addShard():sh.addShard( "rs0/mongodb0.example.net:27017,mongodb1.example.net:27017,mongodb2.example.net:27017" )
Atualize a string de conexão do seu aplicativo
Depois de adicionar o primeiro fragmento ao cluster, atualize a connection string usada pelos aplicativos para a connection string do cluster fragmentado. Em seguida, reinicie seus aplicativos.
Aviso
Após o novo fragmento estar ativo, o mongosh e outros clientes devem sempre conectar à instância do mongos. Não se conecte diretamente às instâncias mongod . Se seus clientes se conectarem diretamente aos fragmentos, você poderá criar inconsistências de dados ou metadados.
Implemente um segundo conjunto de réplicas
Implemente um novo conjunto de réplicas chamado rs1. Os membros do conjunto de réplica rs1 estão nos seguintes hosts:
mongodb3.example.netmongodb4.example.netmongodb5.example.net
Inicie cada membro do conjunto de réplicas.
Para cada instância do
mongodno conjunto de réplica, crie um arquivo de configuração com estas opções:OpçãoValorO caminho para o arquivo-chave usado para seu conjunto de réplicas inicial.
rs1shardsvrlocalhost, seguido por quaisquer outros nomes de host nos quaismongoddeve escutar conexões de cliente.security: keyFile: <PATH_TO_KEYFILE> replication: replSetName: rs1 sharding: clusterRole: shardsvr net: bindIp: localhost,<ipaddress> Inclua opções adicionais conforme apropriado para seu sistema.
Para cada membro, inicie um
mongodcom as seguintes opções:OpçãoValorrs1shardsvrx509requireTLSO caminho absoluto para o arquivo
.pemque contém o certificado e a chave TLS.O caminho absoluto para o arquivo
.pemque contém a sequência de certificados raiz da autoridade de certificação.localhost, seguido por quaisquer outros nomes de host nos quaismongoddeve escutar conexões de cliente.replication: replSetName: rs1 sharding: clusterRole: shardsvr security: clusterAuthMode: x509 net: tls: mode: requireTLS certificateKeyFile: <FILE_WITH_COMBINED_CERT_AND_KEY> CAFile: <CA_FILE> bindIp: localhost,<ipaddress> Implemente o
mongodcom sua configuração especificada:mongod --config <PATH_TO_CONFIG_FILE> Observação
Quando você especifica a opção
--shardsvrpara uma instância domongod, a instância é executada na porta27018por padrão.Inicie cada membro do conjunto de réplicas.
Conecte a um membro do conjunto de réplicas.
Use
mongoshpara se conectar a um dos membros do conjunto de réplicas. Por exemplo:mongosh "mongodb://mongodb3.example.net:27018" mongosh "mongodb://mongodb3.example.net:27018" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> Inicie o conjunto de réplicas.
No
mongosh, execute o métodors.initiate()para iniciar um conjunto de réplica que contém o membro atual:rs.initiate( { _id : "rs1", members: [ { _id: 0, host: "mongodb3.example.net:27018" }, { _id: 1, host: "mongodb4.example.net:27018" }, { _id: 2, host: "mongodb5.example.net:27018" } ] } ) O comando anterior exige que a exceção Localhost execute ações administrativas sem autenticação.
Importante
Execute
rs.initiate()em apenas uma instânciamongodpara o conjunto de réplicas.Adicione um usuário administrativo para o conjunto de réplicas.
Depois de implantar o conjunto de réplicas, use a exceção localhost para criar o primeiro usuário do conjunto de réplicas.
Determine o conjunto de réplicas primário.
Para determinar a primária, execute
rs.status():rs.status() Na saída do comando, o campo
replSetGetStatus.members[n].stateStrindica qual membro é o principal.Conecte-se ao conjunto de réplicas primário.
Conecte-se ao conjunto de réplicas primário com
mongosh. Por exemplo, se o primário formongodb4.example.net, execute este comando:mongosh "mongodb://mongodb4.example.net:27018" Crie um usuário administrativo.
Execute o seguinte método do
db.createUser()para criar um usuário denominadors1Admincom o papeluserAdmin:use admin db.createUser( { user: "rs1Admin", pwd: passwordPrompt(), roles: [ { role: "userAdmin", db: "admin" } ] } ) Após executar o comando, o banco de dados solicita que você insira uma senha para o usuário do
rs1Admin.
Adicione o conjunto de segunda réplica ao cluster como fragmento
Adicione o novo conjunto de réplicas, rs1, ao cluster fragmentado.
Conecte
mongoshaomongos.Execute o seguinte comando a partir da linha de comando para se conectar à instância do
mongosexecutando no hostmongodb6.example.net:mongosh "mongodb://admin01@mongodb6.example.net:27017/admin" mongosh "mongodb://admin01@mongodb6.example.net:27017/admin" --tls --tlsCAFile <CA_FILE> --tlsCertificateKeyFile <filename> Esse comando autentica você como o usuário
admin01que você criou no cluster fragmentado. Depois de inserir o comando, digite a senha do usuário.Adicione o segundo fragmento.
Após conectar ao
mongos, adicione o conjunto de réplicasrs1como um fragmento ao cluster com o métodosh.addShard():sh.addShard( "rs1/mongodb3.example.net:27018,mongodb4.example.net:27018,mongodb5.example.net:27018" )
Fragmentar uma Coleção
A etapa final do procedimento é fragmentar uma coleção no cluster fragmentado.
Determine a chave de fragmento.
Determine a chave fragmentada para a coleção. A chave de fragmento indica como o MongoDB distribui os documentos entre fragmentos. Boas chaves de fragmentos:
Ter valores distribuídos uniformemente entre todos os documentos.
Agrupe documentos que são frequentemente acessados ao mesmo tempo em chunks contíguas.
Permitir a distribuição eficaz da atividade entre os fragmentos.
Para mais informações, consulte Escolher uma chave de fragmento.
Este procedimento utiliza o campo
numbercomo a chave de fragmento para a coleçãotest_collection.Crie um índice na chave de fragmento.
Antes de fragmentar uma coleção não vazia, crie um índice na chave de fragmento:
use test db.test_collection.createIndex( { "number" : 1 } ) Fragmentar a coleção.
No banco de dados do
test, grite otest_collection. Especifiquenumbercomo a chave de fragmento.sh.shardCollection( "test.test_collection", { "number" : 1 } ) Da próxima vez que o balanceador for executado, ele redistribuirá blocos de documentos entre fragmentos. À medida que os clientes inserem documentos adicionais nessa coleção, o
mongosroteia os documentos para o fragmento apropriado.Quando o balanceador redistribui blocos, isso pode afetar negativamente o desempenho do seu aplicativo. Para minimizar o impacto no desempenho, você pode especificar quando o balanceador é executado para que ele não seja executado durante os horários de pico. Para saber mais, consulte Agendar a janela de equilíbrio.
Saiba mais
Para mais tutoriais e procedimentos de fragmentação, consulte estas páginas: