Si tienes un secundario en un set de réplicas que ya no necesita contener datos, pero que debe permanecer en el conjunto para garantizar que este pueda elegir un primario, puede convertir el secundario en un árbitro utilizando cualquiera de los procedimientos de este tutorial. Ambos procedimientos son operativamente equivalentes:
Puede operar el árbitro en el mismo puerto que el antiguo secundario. En este procedimiento, debes apagar el secundario y remover sus datos antes de reiniciarlo y reconfigurarlo como árbitro.
Para este procedimiento, consulte Convertir a secundario en árbitro y reutilizar el número de puerto.
Ejecuta el árbitro en un nuevo puerto. En este procedimiento, puedes reconfigurar el servidor como árbitro antes de apagar la instancia que está funcionando como secundaria.
Para este procedimiento, consulte Convertir un secundario en árbitro en funcionamiento en un nuevo puerto.
Convertir un secundario en árbitro y reutilizar el número de puerto
Si tu aplicación se conecta directamente a la secundaria, modifica la aplicación para que las consultas de MongoDB no lleguen a la secundaria.
Apaga el secundario.
Elimina el secundario del set de réplicas realizando la
rs.remove()método. Realiza esta operación mientras estés conectado a la principal en elmongosh:actualrs.remove("<hostname><:port>") Verifique que el set de réplicas ya no incluya el secundario llamando al método
rs.conf()enmongosh:rs.conf() Mueva el directorio de datos del secundario a una carpeta de fichero. Por ejemplo:
mv /data/db /data/db-old Nota
Opcional
También puedes remover los datos.
Cree un nuevo directorio de datos vacío para señalar al reiniciar la instancia
mongod. Puedes reutilizar el nombre anterior. Por ejemplo:mkdir /data/db Reinicie la instancia
mongodpara el secundario, especificando el número de puerto, el directorio de datos vacío y el set de réplicas. Puede usar el mismo número de puerto que usó anteriormente. Emita un comando similar al siguiente:Advertencia
Antes de vincular la instancia a una dirección IP de acceso público, se debe asegurar el clúster contra accesos no autorizados. Para obtener una lista completa de recomendaciones de seguridad, se debe consultar Checklist de seguridad para implementaciones autogestionadas. Como mínimo, se debe considerar habilitar la autenticación y reforzar la infraestructura de red.
mongod --port 27021 --dbpath /data/db --replSet rs --bind_ip localhost,<hostname(s)|ip address(es)> En
mongosh, convierte el secundario en un árbitro utilizando el métodors.addArb():rs.addArb("<hostname><:port>") Verifique que el árbitro pertenezca al set de réplicas llamando al método
rs.conf()enmongosh.rs.conf() El nodo árbitro debe incluir lo siguiente:
"arbiterOnly" : true
Convertir secundario en árbitro ejecutándose en un nuevo número de puerto
Si tu aplicación se conecta directamente al secundario o tiene una cadena de conexión que hace referencia al secundario, modifica la aplicación para que las consultas de MongoDB no lleguen al secundario.
Cree un nuevo directorio de datos vacío para usarlo con el nuevo número de puerto. Por ejemplo:
mkdir /data/db-temp Inicia una nueva instancia
mongoden el nuevo número de puerto, especificando el nuevo directorio de datos y el set de réplicas existente. Emite un comando similar al siguiente:Advertencia
Antes de vincular la instancia a una dirección IP de acceso público, se debe asegurar el clúster contra accesos no autorizados. Para obtener una lista completa de recomendaciones de seguridad, se debe consultar Checklist de seguridad para implementaciones autogestionadas. Como mínimo, se debe considerar habilitar la autenticación y reforzar la infraestructura de red.
mongod --port 27021 --dbpath /data/db-temp --replSet rs --bind_ip localhost,<hostname(s)|ip address(es)> En
mongoshconectado al primario actual, convierta la nueva instanciamongoden un árbitro usando el métodors.addArb():rs.addArb("<hostname><:port>") Verifica que el árbitro se haya agregado al set de réplicas llamando al método
rs.conf()enmongosh.rs.conf() El nodo árbitro debe incluir lo siguiente:
"arbiterOnly" : true Apaga el secundario.
Elimina el secundario del set de réplicas llamando al método
rs.remove()enmongosh:rs.remove("<hostname><:port>") Verifica que el set de réplicas ya no incluya el antiguo secundario llamando al método
rs.conf()enmongosh:rs.conf() Mueva el directorio de datos del secundario a una carpeta de fichero. Por ejemplo:
mv /data/db /data/db-old Nota
Opcional
También puedes remover los datos.