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

Distribuir um conjunto de réplicas autogerenciado

Nesta página

  • Visão geral
  • Requisitos
  • Considerações ao implantar um conjunto de réplicas
  • Implantar um conjunto de réplicas no terminal

Três conjuntos de réplicas de membros fornecem redundância suficiente para sobreviver à maioria das partições de rede e outras falhas do sistema. Esses conjuntos também têm capacidade suficiente para muitas operações de leitura distribuída. Os conjuntos de réplicas devem sempre ter um número ímpar de membros. Isso garante que as eleições ocorram sem problemas. Para saber mais sobre como projetar conjuntos de réplica, consulte a visão geral da replicação.

Esta página aborda como implantar um conjunto de réplicas para implantações autogerenciadas .

Para saber mais sobre como implantar um conjunto de réplica para implantações hospedadas no MongoDB Atlas, consulte Criar um cluster.

Para sistemas de produção, você deve manter o máximo de separação entre membros possível hospedando as instâncias do mongod em máquinas separadas. Ao utilizar máquinas virtuais para sistemas de produção, você deve colocar cada instância do mongod em um servidor host separado atendido por circuitos de energia redundantes e caminhos de rede redundantes.

Antes de implementar um conjunto de réplicas, você deve instalar o MongoDB em cada sistema que fará parte do seu conjunto de réplicas. Se você ainda não instalou o MongoDB, consulte os tutoriais de instalação.

Na produção, implemente cada membro da réplica definida em sua própria máquina. Se possível, certifique-se de que o MongoDB escuta na porta padrão do 27017.

Observação

Fora de uma atualização contínua, todos os membros mongod de um conjunto de réplicas devem usar a mesma versão principal do MongoDB.

Para obter mais informações, consulte Arquiteturas de sistema de conjunto de réplicas.

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.

Use a opção --bind_ip para garantir que o MongoDB escute as conexões dos aplicativos nos endereços configurados.

Aviso

Antes de vincular sua instância a um endereço IP acessível publicamente, você deve proteger seu cluster contra o acesso não autorizado. Para obter uma lista completa de recomendações de segurança, consulte Lista de verificação de segurança para implantações autogerenciadas. No mínimo, considere habilitar a autenticação e fortalecer a infraestrutura de rede.

Os binários do MongoDB, mongod e mongos, são vinculados ao host local por padrão. Se a configuração do arquivo de configuração net.ipv6 ou a opção de linha de comando --ipv6 estiver definida para o binário, o binário também será vinculado ao endereço IPv6 do host local.

Por padrão, mongod e mongos que estão vinculados a localhost só aceitam conexões de clientes executados no mesmo computador. Este comportamento vinculativo inclui mongosh e outros membros do seu conjunto de réplica ou cluster fragmentado. Clientes remotos não podem se conectar a binários vinculados apenas ao localhost.

Para substituir a associação padrão e vincular a outros endereços IP, use a net.bindIp configuração do arquivo de configuração ou a --bind_ip opção de linha de comando para especificar uma lista de nomes de host ou endereços IP.

Aviso

A partir do MongDB 5.0, DNS de horizonte dividido nós que são configurados apenas com um endereço IP falham na validação de inicialização e relatam um erro. Consulte disableSplitHorizonIPCheck.

Por exemplo, a instância mongod a seguir é vinculada ao host local e ao nome de host My-Example-Associated-Hostname, que está associado ao endereço IP 198.51.100.1:

mongod --bind_ip localhost,My-Example-Associated-Hostname

Para se conectar a esta instância, os clientes remotos devem especificar o nome do host ou seu endereço IP associado 198.51.100.1:

mongosh --host My-Example-Associated-Hostname
mongosh --host 198.51.100.1

Certifique-se de que o tráfego de rede possa passar com segurança entre todos os membros do conjunto e todos os clientes da rede.

Considere o seguinte:

  • Estabeleça uma rede virtual privada. Certifique-se de que sua topologia de rede roteie todo o tráfego entre membros em um único site pela rede local.

  • Configure o controle de acesso para evitar conexões de clientes desconhecidos ao conjunto de réplicas.

  • Configure as regras de rede e de firewall para que os pacotes de entrada e saída sejam permitidos somente na porta padrão do MongoDB e somente a partir da sua implantação. Consulte as considerações de ligação de IP.

Certifique-se de que cada membro de um conjunto de réplicas esteja acessível por meio de DNS ou nomes de host resolvíveis. Você deve configurar seus nomes de DNS adequadamente ou configurar o arquivo /etc/hosts de seus sistemas para refletir essa configuração.

Cada membro deve ser capaz de se conectar a todos os outros membros. Para obter instruções sobre como verificar sua conexão, consulte Testar conexões entre todos os membros.

Crie o diretório onde o MongoDB armazena arquivos de dados antes de implantar o MongoDB.

Especifique a configuração do mongod em um arquivo de configuração armazenado no /etc/mongod.conf ou em um local relacionado.

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

Este tutorial descreve como criar um conjunto de réplica de três membros a partir de três instâncias do mongod existentes executando com o controle de acesso desabilitado.

Para implantar um set com controle de acesso ativado, consulte Implantar conjunto de réplica autogerenciado com autenticação de arquivo-chave. Se você quiser implantar um conjunto de réplicas a partir de uma única instância do MongoDB, consulte Converter um mongod autônomo autogerenciado em um conjunto de réplicas. Para obter mais informações sobre sistemas de conjunto de réplicas, consulte a documentação de Replicação e de Arquiteturas de implantação de conjunto de réplicas.

1

Para cada membro, inicie uma instância do mongod com as seguintes configurações:

  • Defina a opção replication.replSetName como o nome do conjunto de réplicas. Se seu aplicativo se conectar a mais de um conjunto de réplicas, cada conjunto deverá ter um nome distinto.

  • Defina a opção net.bindIp como o nome do host/ip ou uma lista delimitada por vírgulas de nomes de host/ips.

  • Defina quaisquer outras configurações conforme apropriado para seu sistema.

Neste tutorial, as três instâncias do mongod são associadas com os seguintes hosts:

Membro do conjunto de réplicas
nome de anfitrião

Membro 0

mongodb0.example.net

Membro 1

mongodb1.example.net

Membro 2

mongodb2.example.net

O exemplo a seguir especifica o nome do conjunto de réplicas e a associação ip por meio das opções de linha de comando --replSet e --bind_ip:

Aviso

Antes de vincular sua instância a um endereço IP acessível publicamente, você deve proteger seu cluster contra o acesso não autorizado. Para obter uma lista completa de recomendações de segurança, consulte Lista de verificação de segurança para implantações autogerenciadas. No mínimo, considere habilitar a autenticação e fortalecer a infraestrutura de rede.

mongod --replSet "rs0" --bind_ip localhost,<hostname(s)|ip address(es)>

Para <hostname(s)|ip address(es)>, especifique o(s) nome(s) de host e/ou endereço(s) IP da instância mongod que os clientes remotos (incluindo os outros membros do conjunto de réplicas) podem usar para se conectar à instância.

Como alternativa, você pode especificar o replica set name e o ip addresses em um arquivo de configuração:

replication:
replSetName: "rs0"
net:
bindIp: localhost,<hostname(s)|ip address(es)>

Para iniciar o mongod com um arquivo de configuração, especifique o caminho do arquivo de configuração com a opção --config:

mongod --config <path-to-config>

Em implantações de produção, você pode configurar um script de entrada para gerenciar este processo. Os scripts de inicialização estão além do escopo deste documento.

2

Na mesma máquina em que um dos mongod está sendo executado (neste tutorial, mongodb0.example.net), inicie o mongosh. Para se conectar ao mongod escutando localhost na porta padrão do 27017, basta emitir:

mongosh

Dependendo do seu caminho, você pode precisar especificar o caminho para o binário mongosh.

Se o seu mongod não estiver executando na porta padrão, especifique a opção --port para mongosh.

3

No mongosh, execute rs.initiate() no membro do conjunto de réplicas 0.

Importante

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

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.

rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "mongodb0.example.net:27017" },
{ _id: 1, host: "mongodb1.example.net:27017" },
{ _id: 2, host: "mongodb2.example.net:27017" }
]
})

O MongoDB inicia um conjunto de réplicas, usando a configuração padrão do conjunto de réplicas.

4

Utilize o rs.conf() para exibir o objeto de configuração do conjunto de réplicas:

rs.conf()

O objeto de configuração do conjunto de réplicas é semelhante ao seguinte:

{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb1.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb2.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("585ab9df685f726db2c6a840")
}
}
5

Utilize o rs.status() para identificar a primária no conjunto de réplicas.

Dica

Veja também:

Voltar

Distribuir