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 5.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.net
mongodb8.example.net
mongodb9.example.net
Configure os servidores de configuração
Configure uma instância
mongod
em cada host do servidor de configuração. Especifique essas opções no arquivo de configuração para cada instânciamongod
:OpçãoValorconfigReplSet
configsvr
localhost
, seguido por quaisquer outros nomes de host nos quaismongod
deve escutar conexões de cliente.replication: replSetName: configReplSet sharding: clusterRole: configsvr net: bindIp: localhost,<hostname(s)> Inclua opções adicionais conforme apropriado para seu sistema.
Inicie os servidores de configuração.
Implemente o
mongod
com sua configuração especificada:mongod --config <PATH_TO_CONFIG_FILE> Os servidores de configuração usam o directoria de dados padrão
/data/configdb
e a porta padrão27019
.Conecte-se a um dos servidores de configuração.
Utilize o
mongosh
para 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ânciamongod
para 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
mongod
em cada um destes hosts:mongodb7.example.net
mongodb8.example.net
mongodb9.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,<hostname(s)> Inclua opções adicionais conforme apropriado para seu sistema.
Reinicie uma instância
mongod
em cada um destes hosts:mongodb7.example.net
mongodb8.example.net
mongodb9.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çãoValorx509
requireTLS
O caminho absoluto para o arquivo
.pem
que contém o certificado e a chave TLS.O caminho absoluto para o arquivo
.pem
que contém a sequência de certificados raiz da autoridade de certificação.localhost
, seguido por quaisquer outros nomes de host nos quaismongod
deve 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,<hostname(s)> Inclua opções adicionais conforme apropriado para sua implantação, como
net.tls.certificateKeyFilePassword
se o arquivo de chave de certificado TLS estiver criptografado com uma senha.Reinicie o MongoDB.
Reinicie o
mongod
com 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 quaismongos
deve 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,<hostname(s)> 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.x509
requireTLS
O caminho absoluto para o arquivo
.pem
que contém o certificado e a chave TLS.O caminho absoluto para o arquivo
.pem
que contém a sequência de certificados raiz da autoridade de certificação.localhost
, seguido por quaisquer outros nomes de host nos quaismongos
deve 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,<hostname(s)> Inclua quaisquer opções adicionais apropriadas para sua implantação.
Implemente os mongos.
Implemente o
mongos
com 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:27017
mongodb1.example.net:27017
mongodb2.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
mongosh
para 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
mongosh
opçõ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].stateStr
indica 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.
Após reiniciar uma secundária, todos os aplicativos conectados a essa secundária retornarão um erro
CannotVerifyAndSignLogicalTime
até que você execute as etapas em Adicionar o conjunto de réplicas iniciais como um fragmento.Você também pode reiniciar seu aplicativo para impedir que ele receba
CannotVerifyAndSignLogicalTime
erros.Conecte-se a um secundário.
Utilize
mongosh
para 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.clusterRole
parashardsvr
:security: keyFile: <PATH_TO_KEYFILE> replication: replSetName: rs0 sharding: clusterRole: shardsvr net: port: 27017 bindIp: localhost,<hostname(s)> 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
mongosh
para se conectar a um dos secundários.Se sua implantação usar a autenticação x.509, especifique estas
mongosh
opçõ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.clusterRole
parashardsvr
: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,<hostname(s)> Inclua opções adicionais conforme apropriado para sua implantação, como
net.tls.certificateKeyFilePassword
se 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.
Depois de reiniciar o primário, todos os aplicativos conectados ao primário retornarão um erro CannotVerifyAndSignLogicalTime
até que você execute as etapas em Adicionar o conjunto de réplicas iniciais como um fragmento.
Você também pode reiniciar seu aplicativo para impedir que ele receba CannotVerifyAndSignLogicalTime
erros.
Conecte-se ao primary.
Use
mongosh
para 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.clusterRole
parashardsvr
:security: keyFile: <PATH_TO_KEYFILE> replication: replSetName: rs0 sharding: clusterRole: shardsvr net: port: 27017 bindIp: localhost,<hostname(s)> 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
mongosh
para se conectar a um dos secundários.Se sua implantação usar a autenticação x.509, especifique estas
mongosh
opções:Se sua implantação usar a autenticação x.509, especifique estas
mongosh
opçõ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.clusterRole
parashardsvr
: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,<hostname(s)> Inclua opções adicionais conforme apropriado para sua implantação, como
net.tls.certificateKeyFilePassword
se 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
mongos
como o usuário administrativo do seu cluster.A instância do
mongos
está sendo executada no hostmongodb6.example.net
.Para conectar
mongosh
aomongos
, execute o seguinte comando:mongosh "mongodb://admin01@mongodb6.example.net:27017" Esse comando autentica você como o usuário
admin01
que 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" ) Aviso
Após o novo fragmento estar ativo, o
mongosh
e outros clientes devem sempre conectar à instância domongos
. Não se conecte diretamente às instânciasmongod
. Se seus clientes se conectarem diretamente aos fragmentos, você poderá criar inconsistências de dados ou metadados.
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.
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.net
mongodb4.example.net
mongodb5.example.net
Inicie cada membro do conjunto de réplicas.
Para cada instância do
mongod
no 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.
rs1
shardsvr
localhost
, seguido por quaisquer outros nomes de host nos quaismongod
deve escutar conexões de cliente.security: keyFile: <PATH_TO_KEYFILE> replication: replSetName: rs1 sharding: clusterRole: shardsvr net: bindIp: localhost,<hostname(s)> Inclua opções adicionais conforme apropriado para seu sistema.
Para cada membro, inicie um
mongod
com as seguintes opções:OpçãoValorrs1
shardsvr
x509
requireTLS
O caminho absoluto para o arquivo
.pem
que contém o certificado e a chave TLS.O caminho absoluto para o arquivo
.pem
que contém a sequência de certificados raiz da autoridade de certificação.localhost
, seguido por quaisquer outros nomes de host nos quaismongod
deve 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,<hostname(s)> Implemente o
mongod
com sua configuração especificada:mongod --config <PATH_TO_CONFIG_FILE> Observação
Quando você especifica a opção
--shardsvr
para uma instância domongod
, a instância é executada na porta27018
por padrão.Inicie cada membro do conjunto de réplicas.
Conecte a um membro do conjunto de réplicas.
Use
mongosh
para 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ânciamongod
para 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].stateStr
indica 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 denominadors1Admin
com 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
mongosh
aomongos
.Execute o seguinte comando a partir da linha de comando para se conectar à instância do
mongos
executando 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
admin01
que 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éplicasrs1
como 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
number
como 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
. Especifiquenumber
como 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
mongos
roteia 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: