Converta um secundário autogerenciado em um árbitro
Nesta página
Se você tiver umsecundário em um conjunto de réplicas que não precisa mais manter os dados, mas que precisa permanecer no conjunto para garantir que o conjunto possa eleger um primário, você poderá converter o secundário em um árbitro usando qualquer procedimento nesta tutorial. Ambos os procedimentos são operacionalmente equivalentes:
Você pode operar o árbitro na mesma porta do antigo secundário. Neste procedimento, você deve desligar o secundário e remover seus dados antes de reiniciar e reconfigurá-lo como um árbitro.
Para este procedimento, consulte Converter secundário em árbitro e reutilizar o número da porta.
Execute o árbitro em uma nova porta. Neste procedimento, você pode reconfigurar o servidor como árbitro antes de desligar a instância em execução como secundária.
Para este procedimento, consulte Converter secundário para árbitro em execução em um novo número de porta.
Converter secundário para árbitro e reutilizar o número da porta
Se seu aplicativo estiver se conectando diretamente ao secundário, modifique o aplicativo para que as consultas do MongoDB não alcancem o secundário.
Desative o secundário.
Remova a secundária do conjunto de réplicas chamando o método
rs.remove()
. Execute esta operação enquanto conectado ao primário atual emmongosh
:rs.remove("<hostname><:port>") Verifique se o conjunto de réplicas não inclui mais o secundário chamando o método
rs.conf()
emmongosh
:rs.conf() Mova o diretório de dados do secundário para uma pasta de arquivo. Por exemplo:
mv /data/db /data/db-old Observação
Opcional
Você pode remover os dados.
Crie um novo diretório de dados vazio para apontar ao reiniciar a instância do
mongod
. Você pode reutilizar o nome anterior. Por exemplo:mkdir /data/db Reinicie a instância do
mongod
para o secundário, especificando o número da porta, o diretório de dados vazio e o conjunto de réplica. Você pode usar o mesmo número de porta que usou antes. Emita um comando semelhante ao seguinte: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 --port 27021 --dbpath /data/db --replSet rs --bind_ip localhost,<hostname(s)|ip address(es)> Em
mongosh
, converta o secundário em um árbitro usando o métodors.addArb()
:rs.addArb("<hostname><:port>") Verifique se o árbitro pertence ao conjunto de réplicas chamando o método
rs.conf()
emmongosh
.rs.conf() O membro árbitro deve incluir o seguinte:
"arbiterOnly" : true
Converter secundário para árbitro em execução em um novo número de porta
Se seu aplicativo estiver se conectando diretamente ao secundário ou tiver uma string de conexão fazendo referência ao secundário, modifique o aplicativo para que as consultas do MongoDB não alcancem o secundário.
Crie um novo diretório de dados vazio para ser usado com o novo número da porta. Por exemplo:
mkdir /data/db-temp Inicie uma nova instância do
mongod
no novo número da porta, especificando o novo diretório de dados e o conjunto de réplica existente. Emita um comando semelhante ao seguinte: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 --port 27021 --dbpath /data/db-temp --replSet rs --bind_ip localhost,<hostname(s)|ip address(es)> Em
mongosh
conectado ao primário atual, converta a nova instânciamongod
em um árbitro usando o métodors.addArb()
:rs.addArb("<hostname><:port>") Verifique se o árbitro foi adicionado ao conjunto de réplicas chamando o método
rs.conf()
emmongosh
.rs.conf() O membro árbitro deve incluir o seguinte:
"arbiterOnly" : true Desative o secundário.
Remova o secundário do conjunto de réplicas chamando o método
rs.remove()
emmongosh
:rs.remove("<hostname><:port>") Verifique se o conjunto de réplicas não inclui mais o secundário antigo chamando o método
rs.conf()
emmongosh
:rs.conf() Mova o diretório de dados do secundário para uma pasta de arquivo. Por exemplo:
mv /data/db /data/db-old Observação
Opcional
Você pode remover os dados.