Estoy ejecutando dos nodos de erlang con una base de datos de mnesia replicada. Cada vez que intenté iniciar uno de ellos mientras mnesia NO se estaba ejecutando en el otro, mnesia: wait_for_tables (? TABS,? TIMEOUT), colgaría en el nodo desde el que se llamaba. Necesito tener una estructura donde (si ambos nodos no se están ejecutando), puedo empezar a trabajar con uno mientras que el otro está inactivo y luego decidir llevar el otro y seguir trabajando bien. Necesito estar seguro de que el primer nodo que se estaba ejecutando se actualizó más tarde cuando se levanta. ¿Esto necesariamente requiere que tenga uno como maestro?Cuál es la importancia de un Nodo maestro de Mnesia en un clúster
%%% Editado .......................................... .................................
Oh, lo tengo. La base de datos que estaba usando tenía un par de tablas fragmentadas. Algunos de los fragmentos se habían distribuido a través de la red para equilibrar la carga. Entonces, Mnesia en un host trataría de cargarlos a través de la red y fallaría ya que mnesia en el otro no funciona.
Supongo que esto no tiene nada que ver con un nodo maestro de mnesia. Pero todavía me gustaría entender el significado de lo mismo porque no lo he usado antes, sin embargo, siempre juego con esquemas distribuidos.
Gracias de nuevo ...
Gracias user6834 –
uwiger, gracias. ¿Cree que (en el futuro), mnesia tendrá una forma de fusionar dos réplicas basadas en un mecanismo de actualización reciente o algún tipo de firma de tiempo, especialmente cuando se detecta el error fatal "ejecución de red particionada"? –
Esto es posible de hacer hoy, aunque no está muy bien documentado o probado en todas partes. http://github.com/esl/unsplit es una biblioteca para la fusión automática de tablas de mnesia después de netsplits. Las versiones recientes de mnesia se han mejorado cuidadosamente para respaldar esto, y R14B03 también agrega una forma de verificación de quórum ('mayoría') para reducir el riesgo de incoherencias difíciles de resolver. – uwiger