Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Implemente um cluster fragmentado autogerenciado

Nesta página

  • Visão geral
  • Considerações
  • Procedimento

Este tutorial envolve a criação de um novo cluster fragmentado que consiste em um mongos, o conjunto de réplicas do servidor de configuração e dois conjuntos de réplicas de fragmento.

Cada nó de um cluster fragmentado deve ser capaz de se conectar a todos os outros nós do cluster. Isso inclui todos os shards e servidores de configuração. Certifique-se de que os sistemas de rede e de segurança, incluindo todas as interfaces e firewalls, permitam essas conexões.

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.

Se você usar localhost ou seu endereço IP como a parte do nome do host de qualquer identificador de host, deverá usar esse identificador como a configuração de host para qualquer outro componente do MongoDB no cluster.

Por exemplo, o método sh.addShard() usa um parâmetro host para o nome do host do shard de destino. Se você definir host como localhost, será necessário usar localhost como o host de todos os outros shards no cluster.

Este tutorial não inclui as etapas necessárias para configurar a autenticação interna/de associação autogerenciada nem o controle de acesso baseado em função em implantações autogerenciadas.

Em ambientes de produção, clusters fragmentados devem empregar no mínimo segurança x.509 para autenticação interna e acesso do cliente.

As seguintes etapas distribuem um conjunto de réplicas do servidor de configuração.

Para um sistema de produção, implemente um conjunto de réplicas de servidor de configuração definido com pelo menos três membros. Para fins de teste, você pode criar um conjunto de réplicas de membro único.

Observação

O conjunto de réplicas do servidor de configuração não deve usar o mesmo nome que qualquer um dos conjuntos de réplicas de shard.

Para este tutorial, os membros do conjunto de réplicas do servidor de configuração estão associados com os seguintes hosts:

Nó do conjunto de réplicas do servidor de configuração
nome de anfitrião
Membro 0
cfg1.example.net
Membro 1
cfg2.example.net
Membro 2
cfg3.example.net
1

Ao iniciar cada mongod, especifique as configurações mongod através de um arquivo de configuração ou da linha de comando.

Se estiver usando um arquivo de configuração, defina:

sharding:
clusterRole: configsvr
replication:
replSetName: <replica set name>
net:
bindIp: localhost,<hostname(s)|ip address(es)>
  • sharding.clusterRole a configsvr,

  • replication.replSetName ao nome desejado do conjunto de réplicas do servidor de configuração,

  • net.bindIp opção para o nome de host/endereço IP ou lista delimitada por vírgula de nomes de host ou endereços IP que clientes remotos (incluindo os outros membros da réplica do servidor de configuração definidos, bem como outros membros do cluster fragmentado) podem usar para se conectar à instância.

    Aviso

    Antes de vincular a um não localhost (por exemplo, acessível IP ), 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.

  • Configurações adicionais conforme apropriado para seu sistema, como storage.dbPath e net.port. Para mais informações sobre o arquivo de configuração, consulte opções de configuração.

Inicie o mongod com a opção --config definida para o caminho do arquivo de configuração.

mongod --config <path-to-config-file>

Se utilizar as opções da linha de comando, inicie o mongod com o --configsvr, --replSet, --bind_ip e outras opções conforme apropriado para seu sistema. Por exemplo:

Aviso

Antes de vincular a um não localhost (por exemplo, acessível IP ), 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.

mongod --configsvr --replSet <replica set name> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)>

Para obter mais informações sobre parâmetros de inicialização, consulte a página de referência do mongod.

2

Conecte o mongosh a um dos membros do servidor de configuração.

mongosh --host <hostname> --port <port>
3

A partir do mongosh, execute o método rs.initiate().

rs.initiate() pode pegar um documento opcional de configuração do conjunto de réplicas. No documento de configuração do conjunto de réplicas, inclua:

  • O _id definido como o nome do conjunto de réplicas especificado na opção replication.replSetName ou --replSet.

  • O campo configsvr configurado como true para o conjunto de réplicas do servidor de configuração.

  • A array members com um documento por cada membro do conjunto de réplicas.

Importante

Execute rs.initiate() em apenas uma e apenas uma instânciamongod para o conjunto de réplicas.

rs.initiate(
{
_id: "myReplSet",
configsvr: true,
members: [
{ _id : 0, host : "cfg1.example.net:27019" },
{ _id : 1, host : "cfg2.example.net:27019" },
{ _id : 2, host : "cfg3.example.net:27019" }
]
}
)

Consulte Configuração do conjunto de réplicas autogerenciadas para mais informações sobre documentos de configuração do conjunto de réplicas.

Observação

O comando rs.initiate() pode levar alguns segundos para ser concluído. Para usar o conjunto de réplicas do servidor de configuração (CSRS) nesse procedimento, você deve aguardar até que ele conclua a inicialização. Se o CSRS não tiver sido inicializado, você verá NotYetInitialized erros ao tentar executar operações em um membro do CSRS.

Depois que o conjunto de réplicas do servidor de configuração (CSRS) for iniciado e ativado, prossiga para criar os conjuntos de réplicas de shards.

Para um sistema de produção, use um conjunto de réplicas com pelo menos três membros. Para fins de teste, você pode criar um conjunto de réplicas de um único membro.

Observação

Os conjuntos de réplicas do shard não devem usar o mesmo nome que o conjunto de réplicas do servidor de configuração.

Para cada shard, use as seguintes etapas para criar o conjunto de réplicas do shard:

1

Ao iniciar cada mongod, especifique as configurações mongod através de um arquivo de configuração ou da linha de comando.

Se estiver usando um arquivo de configuração, defina:

sharding:
clusterRole: shardsvr
replication:
replSetName: <replSetName>
net:
bindIp: localhost,<ip address>

Inicie o mongod com a opção --config definida para o caminho do arquivo de configuração.

mongod --config <path-to-config-file>

Se estiver usando a opção de linha de comando, inicie o mongod com as opções --replSet e --shardsvr, --bind_ip e outras opções conforme apropriado para sua implementação. Por exemplo:

mongod --shardsvr --replSet <replSetname> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)>

Para obter mais informações sobre parâmetros de inicialização, consulte a página de referência do mongod.

2

Conecte mongosh a um dos membros do conjunto de réplicas.

mongosh --host <hostname> --port <port>
3

A partir do mongosh, execute o método rs.initiate().

rs.initiate() pode pegar um documento opcional de configuração do conjunto de réplicas. No documento de configuração do conjunto de réplicas, inclua:

  • O campo _id definido com o nome do conjunto de réplicas especificado na opção replication.replSetName ou --replSet.

  • A array members com um documento por cada membro do conjunto de réplicas.

O exemplo a seguir inicia um conjunto de réplicas de três membros.

Importante

Execute rs.initiate() em apenas uma e apenas uma instânciamongod para o conjunto de réplicas.

rs.initiate(
{
_id : "myReplSet",
members: [
{ _id : 0, host : "s1-mongo1.example.net:27018" },
{ _id : 1, host : "s1-mongo2.example.net:27018" },
{ _id : 2, host : "s1-mongo3.example.net:27018" }
]
}
)

Inicie um mongos utilizando um arquivo de configuração ou um parâmetro da linha de comando para especificar os servidores de configuração.

Se estiver utilizando um arquivo de configuração, defina sharding.configDB como o nome do conjunto de réplicas do servidor de configuração e pelo menos um membro do conjunto de réplicas no formato <replSetName>/<host:port>.

Aviso

Antes de vincular a um não localhost (por exemplo, acessível IP ), 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:
configDB: <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019
net:
bindIp: localhost,<hostname(s)|ip address(es)>

Inicie o mongos especificando a opção --config e o caminho para o arquivo de configuração.

mongos --config <path-to-config>

Para obter mais informações sobre o arquivo de configuração, consulte opções de configuração.

Se utilizar parâmetros da linha de comando, inicie o mongos e especifique o --configdb, --bind_ip e outras opções conforme apropriado para seu sistema. Por exemplo:

Aviso

Antes de vincular a um não localhost (por exemplo, acessível IP ), 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.

mongos --configdb <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,cfg3.example.net:27019 --bind_ip localhost,<hostname(s)|ip address(es)>

Inclua quaisquer outras opções, conforme apropriado para seu sistema.

Neste ponto, seu cluster fragmentado consiste no mongos e nos servidores de configuração. Agora você pode se conectar ao cluster fragmentado usando mongosh.

Conecte mongosh a mongos. Especifique host e port em que mongos está sendo executado:

mongosh --host <hostname> --port <port>

Depois de conectar mongosh ao mongos, continue com o próximo procedimento para adicionar fragmentos ao cluster.

Em uma sessão mongosh conectada ao mongos, use o método sh.addShard() para adicionar cada fragmento ao cluster.

A seguinte operação adiciona um conjunto de réplica de shard único ao cluster:

sh.addShard( "<replSetName>/s1-mongo1.example.net:27018,s1-mongo2.example.net:27018,s1-mongo3.example.net:27018")

Repita essas etapas até que o cluster inclua todos os shards desejados.

Antes de fragmentar uma collection, você deve habilitar a fragmentação para o reconhecimento de data center da collection. Habilitar a fragmentação para um reconhecimento de data center não redistribui os dados, mas possibilita a fragmentação das collection nesse reconhecimento de data center.

Em uma sessão do mongosh que está conectada ao mongos, utilize o método sh.enableSharding() para habilitar a fragmentação no banco de dados de destino. Habilitar a fragmentação em um banco de dados torna possível fragmentar collections dentro de um banco de dados.

sh.enableSharding("<database>")

Depois de habilitar a fragmentação para um banco de dados, o MongoDB atribui um fragmento primário para esse banco de dados, onde o MongoDB armazena todos os dados desse banco de dados.

Importante

Antes de fragmentar uma collection, você deve primeiro habilitar a fragmentação para o banco de dados de dados onde a collection reside.

Para fragmentar uma coleção, conecte mongosh ao mongos e use o método sh.shardCollection().

Observação

Fragmentação e índices

Se a collection já contiver dados, você deverá criar um índice que suporte a chave de shard antes de fragmentar a collection. Se a collection estiver vazia, o MongoDB criará o índice como parte do sh.shardCollection().

O MongoDB oferece duas estratégias para fragmentar as collections:

  • A fragmentação por hash usa um índice hash baseado em um único campo como a chave de shard para dividir os dados em seu cluster fragmentado.

    sh.shardCollection("<database>.<collection>", { <shard key field> : "hashed" } )
  • A fragmentação baseada em faixas pode usar vários campos como a chave de shard e divide os dados em faixas contínuas determinadas pelos valores da chave de shard.

    sh.shardCollection("<database>.<collection>", { <shard key field> : 1, ... } )

Sua seleção de chave de shard afeta a eficiência da fragmentação, bem como sua capacidade de aproveitar certos recursos de fragmentação, como zonas. Para saber como escolher uma chave de shard eficaz, consulte Escolher uma Chave de Shard.

O mongosh fornece o método convertShardKeyToHashed(). Este método utiliza a mesma função de hash que o índice com hash e pode ser usado para ver qual seria o valor de hash para uma chave.

Dica

Veja também:

Voltar

Implemente e gerencie clusters fragmentados autogerenciados