Me interesa utilizar la función de conjunto de réplicas en Mongo como método para migrar sin problemas entre máquinas. Mi base de datos Mongo es actualmente una instancia independiente. Me doy cuenta de que la práctica recomendada es tener tres instancias independientes ejecutándose como un conjunto de réplicas. Pero nuestros requisitos de disponibilidad actualmente no son lo suficientemente altos como para justificar el costo de ejecutar tres instancias independientes. Dicho esto, quiero evitar el tiempo de inactividad tanto como sea posible.
Al realizar un gran cambio en un servidor, lo ideal que me gustaría hacer es iniciar un nuevo servidor con los cambios necesarios (quizás clonado del original o quizás creado desde cero con los cambios deseados realizados). Este servidor aloja la base de datos mongo.
Mientras pruebo este nuevo servidor quiero que sea un secundario oculto. De esta manera tiene los datos pero en realidad no responde a las solicitudes de los clientes. Una vez que me sienta cómodo con el nuevo servidor, quiero cambiar las cosas para que el nuevo servidor sea el principal y el antiguo servidor sea el secundario oculto. De esta manera, el servidor anterior continúa obteniendo datos pero no maneja las solicitudes de los clientes. Si se detecta un problema, puedo volver a invertir el servidor primario y el secundario para enviar a los clientes de regreso al servidor anterior. Suponiendo que no haya problemas después de varios días, puedo cerrar el servidor antiguo.
Mis preguntas son:
- ¿Qué problemas puedo encontrar con este método?
- ¿Logrará mi objetivo de mover los datos de un servidor a otro (y los clientes de un servidor a otro) con suerte, sin tiempo de inactividad?
- Como es posible que desee hacer esto para cambios futuros, probablemente dejaría el nuevo servidor como una réplica configurada con 0 miembros. Me doy cuenta de que esto no ofrece la alta disponibilidad que ofrecen al menos tres miembros. Pero, ¿le dolerá algo dejarlo así? ¿O sería mejor volver a cambiarlo a una instancia independiente?
Respuesta1
Necesitará al menos 3 servidores en un conjunto de réplicas para que se elija un Primario. Puede usar su servidor existente, el nuevo servidor y un árbitro que se ejecuta en uno de ellos para ser el tercero. No puede ejecutar un único conjunto de réplicas de servidor. Sin una primaria, no podrás realizar ninguna escritura.
No puede cambiar de independiente a conjunto de réplicas sin detener/iniciar el servicio mongod. Debe reiniciar mongo --replSet replica_set_name
o agregar la replSet=replica_set_name
opción a su mongod.conf.
Una vez que se sincronice, sería un proceso similar volver a convertirlo a un sistema independiente (detener mongo, eliminar la configuración de replSet, iniciar mongo).
Si su cliente está configurado para "primario" como preferencia de lectura, ninguna de sus lecturas irá a los secundarios (este suele ser el valor predeterminado, ya que los secundarios se usan principalmente para durabilidad, no para escalamiento horizontal).
http://docs.mongodb.org/manual/tutorial/convert-standalone-to-replica-set/