Visão geral
Este tutorial converte uma única réplica de três membros definida em um cluster fragmentado com dois fragmentos. Cada shard é um conjunto independente de réplica de três membros. Este tutorial é específico para MongoDB 6.0. Para outras versões do MongoDB, consulte a versão correspondente do Manual MongoDB.
Você pode converter em um cluster fragmentado na IU para implantações hospedadas no MongoDB Atlas.
Considerações
Etapas individuais nesses procedimentos indicam quando o tempo de inatividade ocorrerá.
Importante
Esses procedimentos causam algum tempo de inatividade para seu sistema.
Pré-requisitos
Este tutorial utiliza um total de dez servidores: um servidor para o mongos e três servidores cada para o primeiro conjunto de réplicas, o segundo conjunto de réplicas e o conjunto de réplicas do servidor de configuração de configuração.
Cada servidor deve ter um domínio, nome de host ou endereço IP resolvível em seu sistema.
O tutorial usa os diretórios de dados padrão (por exemplo, /data/db e /data/configdb). Crie os diretórios apropriados com permissões apropriadas. Para usar caminhos diferentes, consulte Opções de arquivo de configuração autogerenciadas .
Procedimentos
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 e 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 a um host não local (por exemplo, acessívelIP publicamente), certifique-se de ter protegido 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 e 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: