Implemente um cluster fragmentado autogerenciado
Nesta página
Visão geral
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.
Considerações
Conectividade
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.
Nomes de host e configuração
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.
Implementações do Localhost
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.
Segurança
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.
Procedimento
Criar o Conjunto de Réplicas do Servidor de Configuração
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 |
Inicie cada membro do conjunto de réplicas do servidor de configuração.
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
aconfigsvr
,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
enet.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
.
Conecte-se a um dos servidores de configuração.
Conecte o mongosh
a um dos membros do servidor de configuração.
mongosh --host <hostname> --port <port>
Inicie o conjunto de réplicas.
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çãoreplication.replSetName
ou--replSet
.O campo
configsvr
configurado comotrue
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.
Crie os conjuntos de réplicas shard
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:
Inicie cada nó do conjunto de réplicas do shard.
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>
replication.replSetName
ao nome desejado do conjunto de réplicas,opção
sharding.clusterRole
parashardsvr
,net.bindIp
opção para o IP ou uma lista delimitada por vírgula que clientes remotos (incluindo os outros membros do conjunto de réplicas do servidor de configuração, bem como outros membros do o cluster fragmentado) pode ser usada 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
enet.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 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
.
Conecte-se a um nó do conjunto de réplicas do shard.
Conecte mongosh
a um dos membros do conjunto de réplicas.
mongosh --host <hostname> --port <port>
Inicie o conjunto de réplicas.
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çãoreplication.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" } ] } )
Iniciar um mongos
para o cluster fragmentado
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-se ao cluster fragmentado
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.
Adicionar shards 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.
Habilitar o compartilhamento para um reconhecimento de data center
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.
Fragmentar uma Coleção
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, ... } )
Considerações sobre a chave de shard
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:
Para chaves de shard de fragmentação hasheada, consulteChave de shard de fragmentação hasheada
Para informações sobre chaves de shard à distância, consulte Seleção de chaves de shard