Inicio » Uncategorized » Sincronización en mongodb

Sincronización en mongodb

Cuando un secundario opera de forma normal, elige un miembro conque sincronizarse y empieza a coger las operaciones de la colección local.oplog.rs . Cuando coge un una op hace los siguientes pasos:

  1. Aplica el op
  2. Escribe el op es su propio oplog (también oplog.rs)
  3. Solicita el siguiente op

Si la base de datos se cae entre el 1 y el 2, cuando se recupera piensa que no la ha hecho y lo vuelve a repetir. Lo hace de tal manera que se puede reaplicar.

Por ejemplo en un document como este {counter:1} si se hace algo así {$inc:{counter:1}} el documento se convertiría en algo así {counter:2} y en el oplog se almacena algo así {$set:{counter:2}}. Que es lo que se replicara a los secundarios.

  • w

Para asegurarnos que un cando está presente en los dos nodos utilizamos aslgo así:

> db.foo.runCommand({getLastError:1, w:2})

La sintaxis varia en función del lenguaje, pero lo que hace es asegurarse que este escrito en ambos nodos.

  1. Escribe en el primario.
  2. La escritura se escribe en el oplog del primario, con un campo ts que indica que la escrituta se a producido en tiempo t.
  3. {getLastError:1,w:2} se llama desde el primario, este ha haecho la escritura, pero le queda otro nodo w:2.
  4. El secundarioconsulta el oplog del primario para obtener el op
  5. El secundarioaplica el op desde el momento t
  6. El secundario pide las ops con {ts:{$gt:t}}al oplog del primario.
  7. El primarioactualiza que el secondario ha aplicado hasta has  t, porque está pidiendo ops > t.
  8. getLastError se da cuenta que ha sido actualizado en ambos nodos, así que w:2 se cumple y da por buena la inserción.
  • Starting up

Cuando se reinicia un nodo, revisa la colección local.oplog.rs para ver la última entrada. Esto se llama lastOpTimeWritten y es la última op que el secundario ha aplicado.

Para obtener está información via shell se puede utilizar el comando:

> rs.debug.getLastOpWritten()

El campo “ts” es el último optime escrito.

Si el miembro se reinicia y no hay entradas en el oplog, se iniciara un poceso de sincronía incial.

  • Con quien se sincroniza

Los servidores se sincronizan con el servidor más cercano en función de una media en el tiempo de respuesta de los servidores que están al día (sanos).

Se puede ver desde que servidor se sincroniza desde corriendo el comando db.adminCommand({replSetGetStatus:1}) y buscando el campo “syncingTo” (solamente presente en los secundarios).

  • Cambio de la sincronizacion…

La opción replSetSyncFrom, permite cambiar desde que miembro te quieres resincronizar.

> db.adminCommand({replSetSyncFrom:”otherHost:27017″})

 

Fuente:

 

https://dzone.com/articles/get-familiar-mongodb-replica

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s