If you have a secondary in a replica set that no longer needs to hold data but that needs to remain in the set to ensure that the set can elect a primary, you may convert the secondary to an arbiter using either procedure in this tutorial. Both procedures are operationally equivalent:
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 para á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.
Remove the secondary from the replica set by calling the
rs.remove()method. Perform this operation while connected to the current primary inmongosh: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
mongodpara 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 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 --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
mongodno 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 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 --port 27021 --dbpath /data/db-temp --replSet rs --bind_ip localhost,<hostname(s)|ip address(es)> Em
mongoshconectado ao primário atual, converta a nova instânciamongodem 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.
Remove the secondary from the replica set by calling the
rs.remove()method inmongosh: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.