Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
Converter um conjunto de réplicas em um cluster fragmentado
Nesta página
- Sobre esta tarefa
- Arquitetura de servidor
- Antes de começar
- Passos
- 1. Implemente o Config Server Replica Set
- 2. Implemente o
mongos
- 3. Criar um Usuário Administrativo para o Cluster Fragmentado
- 4. Migre o banco de dados
admin
do conjunto de réplicas iniciais - 5. Reinicie o conjunto de réplicas iniciais como fragmento
- 6. Adicione o conjunto de réplicas iniciais como um fragmento
- 7. Atualize a string de conexão do seu aplicativo
- 8. Implemente um segundo conjunto de réplicas
- 9. Adicione o conjunto de segunda réplica ao cluster como fragmento
- 10. Mostrar uma Coleção
- Saiba mais
Os clusters fragmentados particionam dados em vários servidores com base em uma chave de fragmento. Um cluster fragmentado é melhor dimensionado do que um conjunto de réplicas para sistemas 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 interface do usuário para sistemas hospedados 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
mongod
emongos
.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 |
---|---|---|
mongodb0.example.net | 27017 | Membro do fragmento de suporte de dados inicial, rs0 . |
mongodb1.example.net | 27017 | Membro do fragmento de suporte de dados inicial, rs0 . |
mongodb2.example.net | 27017 | Membro do fragmento de suporte de dados inicial, rs0 . |
mongodb3.example.net | 27018 | Membro do segundo shard que contém dados, rs1 . |
mongodb4.example.net | 27018 | Membro do segundo shard que contém dados, rs1 . |
mongodb5.example.net | 27018 | Membro do segundo shard que contém dados, rs1 . |
mongodb6.example.net | 27017 | O mongos , utilizado para conectar ao agrupamento fragmentado. |
mongodb7.example.net | 27019 | Membro do conjunto de réplica do servidor de configuração. |
mongodb8.example.net | 27019 | Membro do conjunto de réplica do servidor de configuração. |
mongodb9.example.net | 27019 | 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 clusters em um horizonte de rede dividido. A partir do MongoDB 5.0, os nós que são configurados apenas com um endereço IP falham na validação de inicialização e não iniciam.
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/db
e/data/configdb
. Para usar caminhos diferentes, defina a configuraçãostorage.dbPath
no arquivo de configuração.
Passos
Para converter um conjunto de réplicas em um cluster fragmentado:
Implemente o conjunto de réplica do servidor de configuração.
Implemente um
mongos
.Criar um usuário administrativo para o cluster fragmentado.
Migre o banco de dados do
admin
do conjunto de réplica inicial para o cluster fragmentado.Reinicie os membros da réplica inicial definida como servidores de fragmento.
Adicione o conjunto de réplicas inicial como fragmento.
Atualize a connection string do seu aplicativo.
Crie um segundo fragmento e adicione-o ao cluster.
Fragmentar uma coleção.
1. 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
Implemente os membros do conjunto de réplica do servidor de configuração.
Selecione a guia do mecanismo de autenticaçã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ão 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.
2. Implemente o mongos
O mongos
fornece a interface entre os aplicativos do cliente e o cluster fragmentado.
Implemente os mongos.
Implemente o mongos
com sua configuração especificada:
mongos --config <PATH_TO_CONFIG_FILE>
3. Criar um Usuário Administrativo para o Cluster Fragmentado
Após implantar o mongos
, utilize a exceção do localhost para criar o primeiro usuário no cluster.
Conecte-se ao mongos
.
Use mongosh
para se conectar ao mongos
.
Crie um usuário administrativo.
Dica
Especifique um nome de usuário diferente para seu usuário administrativo do cluster fragmentado do que os nomes de usuário em seu conjunto de réplica inicial.
Usar nomes diferentes evita conflitos ao restaurar os usuários da réplica inicial definida para o cluster fragmentado.
O método db.createUser()
a seguir cria um usuário chamado admin01
com as funções clusterManager
e restore
:
use admin db.createUser( { user: "admin01", pwd: passwordPrompt(), roles: [ { role: "clusterManager", db: "admin" }, { role: "restore", db: "admin" } ] } )
Após executar o comando, o banco de dados solicita que você insira uma senha para o usuário do admin01
.
4. Migrar o banco de dados admin
do conjunto de réplicas inicial
O banco de dados admin
contém informações do usuário e do sistema. Para migrar o banco de dados admin
de seu conjunto de réplicas inicial para o cluster fragmentado, execute as seguintes etapas.
5. 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.
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 segundo 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 6. Adicionar o conjunto de réplicas inicial como um fragmento.
Você também pode reiniciar seu aplicativo para impedir que ele receba CannotVerifyAndSignLogicalTime
erros.
Reinicie o primary com a opção --shardsvr
.
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 6. Adicionar o conjunto de réplicas inicial como um fragmento.
Você também pode reiniciar seu aplicativo para impedir que ele receba CannotVerifyAndSignLogicalTime
erros.
6. 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.
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 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.
7. 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.
8. 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
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:
Inicie o conjunto de réplicas.
No mongosh
, execute o método rs.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 a primária for mongodb4.example.net
, execute este comando:
Crie um usuário administrativo.
Execute o seguinte método do db.createUser()
para criar um usuário denominado rs1Admin
com o papel userAdmin
:
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
.
9. Adicione o conjunto de segunda réplica ao cluster como fragmento
Adicione o novo conjunto de réplicas, rs1
, ao cluster fragmentado.
Conecte mongosh
ao mongos
.
Execute o seguinte comando a partir da linha de comando para se conectar à instância do mongos
executando no host mongodb6.example.net
:
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éplicas rs1
como um fragmento ao cluster com o método sh.addShard()
:
sh.addShard( "rs1/mongodb3.example.net:27018,mongodb4.example.net:27018,mongodb5.example.net:27018" )
10. Mostrar 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 tecla Shard 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ção test_collection
.
Fragmentar a coleção.
No banco de dados do test
, grite o test_collection
. Especifique number
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.
Dica
Agendamento da janela de balanceamento
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: