Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Menu Docs
Página inicial do Docs
/ /

Transição de servidor de configuração incorporado para dedicado

Para fazer a transição de um servidor de configuração incorporado para um servidor de configuração dedicado, você deve garantir que os dados do fragmento de configuração sejam migrados para os fragmentos restantes no cluster. Este procedimento descreve como migrar dados com segurança e concluir a transição.

  1. Este procedimento utiliza o método sh.moveCollection() para mover as coleções para fora do fragmento de configuração. Antes de iniciar este procedimento, revise as moveCollection considerações e requisitos para entender o comportamento do comando.

  2. Para fazer a transição para um servidor de configuração dedicado, primeiro conecte-se a uma das instâncias mongos do cluster usando mongosh.

1

Para migrar dados do fragmento de configuração, o processo do balanceador deve estar habilitado. Para verificar o estado do balanceador, use o método sh.getBalancerState():

sh.getBalancerState()

Se a operação retornar true, o balanceador estará habilitado.

Se a operação retornar false, consulte Habilitar o Balancer.

2

Execute listShards para confirmar que o fragmento de configuração aparece na lista de fragmentos:

db.adminCommand( { listShards: 1 } )

Na saída, o campo shards._id contém os nomes dos fragmentos. O fragmento de configuração normalmente tem um _id de "config":

{
shards: [
{
_id: 'config',
...
},
...
],
ok: 1
...
}
3

A partir do banco de dados do admin, execute o comando transitionToDedicatedConfigServer:

use admin
db.adminCommand( { transitionToDedicatedConfigServer: 1 } )

O fragmento de configuração entra no estado de drenagem e o balanceador começa a migrar partes do fragmento de configuração para os fragmentos restantes no cluster. Dependendo da capacidade da rede e da quantidade de dados, essa operação pode levar de minutos a dias para ser concluída.

4

Use o estágio de agregação $listClusterCatalog para identificar coleções não fragmentadas que ainda residem no fragmento de configuração:

use admin
db.aggregate([
{ $listClusterCatalog: { shards: true } },
{
$match: {
sharded: false,
shards: "config",
type: { $nin: ["timeseries", "view"] },
ns: { $not: { $regex: "^enxcol_\\..*(\\.esc|\\.ecc|\\.ecoc|\\.ecoc\\.compact)$" } },
$or: [
{ ns: { $not: { $regex: "\\.system\\." } } },
{ ns: { $regex: "\\.system\\.buckets\\." } }
],
db: { $nin: ["config", "admin"] }
}
},
{ $project: { _id: 0, ns: 1 } }
])

Para cada namespace na saída, use sh.moveCollection() para mover a coleção não fragmentada do fragmento de configuração para um fragmento de destinatário:

sh.moveCollection(
"<database>.<collection>",
"<ID of recipient shard>"
)

Repita esta etapa até que nenhuma coleção não fragmentada permaneça no fragmento de configuração.

5

A partir do banco de dados do admin, execute db.printShardingStatus():

use admin
db.printShardingStatus()

Na seção databases da saída, verifique o campo primary de cada banco de dados. Para quaisquer bancos de dados de aplicação (bancos de dados diferentes de config e admin) cujo primário seja o fragmento de configuração, altere o fragmento primário para outro fragmento.

Para alterar o fragmento primário de um banco de dados, execute movePrimary:

db.adminCommand({
movePrimary: "<dbName>",
to: "<recipientShard>"
})

As collections que não foram movidas na etapa anterior não estarão disponíveis enquanto o movePrimary estiver em execução.

6

Para verificar o progresso da transição, execute novamente transitionToDedicatedConfigServer a partir do banco de dados admin:

use admin
db.adminCommand( { transitionToDedicatedConfigServer: 1 } )

Continue verificando o status até que a transição seja concluída com êxito e a saída seja semelhante ao exemplo a seguir:

{
state: 'completed',
msg: 'removeshard completed successfully',
shard: 'config',
ok: 1
}
7

Depois que o fragmento de configuração relatar um state de 'completed', confirme a transição de um servidor de configuração incorporado para um servidor de configuração dedicado :

use admin
db.adminCommand( { commitTransitionToDedicatedConfigServer: 1 } )

Um commit bem-sucedido retorna a seguinte saída:

{
ok: 1,
'$clusterTime': {
...
},
operationTime: ...
}

Quando bem-sucedido, o MongoDB remove o fragmento config dos metadados do cluster e finaliza a transição para um servidor de configuração dedicado. Se o fragmento de configuração não for completamente drenado, o comando falhará e você deverá continuar verificando o status de transição para { state: 'completed' } antes de tentar novamente.

Após a transição ser confirmada, listShards não inclui mais o fragmento de configuração na lista de fragmentos. O cluster agora usa um servidor de configuração dedicado e o servidor de configuração não armazena mais dados do aplicativo como um fragmento.

Voltar

Remover fragmentos

Nesta página