Come aggiungere un nodo a un cluster mnesia?
Domanda
Sono un Erlang e mnesia newbie ..
Come faccio ad aggiungere un nuovo nodo disc_only_copies a un database mnesia che ha già uno schema?
Grazie
Soluzione
Avviare il nuovo nodo (b@node
) erl -sname b -mnesia dir '"/path/to/storage"' -s mnesia
. Questo avvia un nuovo nodo ram_copies chiamato b@node
.
Sul nodo originale (a@node
), al prompt erlang eseguire mnesia:change_config(extra_db_nodes, ['b@node']).
In questo modo il nodo originale per collegare b
al cluster mnesia. A questo punto, b@node
si è unito al gruppo, ma ha solo una copia dello schema.
Per rendere nuovo il nodo b@node
in grado di memorizzare copie del disco, abbiamo bisogno di cambiare il tipo di tabella schema sulla b@node
da ram_copies
a disc_copies
. Eseguire mnesia:change_table_copy_type(schema, 'b@node', disc_copies).
su qualsiasi nodo.
b@node
ha solo una copia dello schema a questo punto. Per copiare tutte le tabelle da a@node
a b@node
e mantenere tipi di tabella, è possibile eseguire:
[{Tb, mnesia:add_table_copy(Tb, node(), Type)}
|| {Tb, [{'a@node', Type}]} <- [{T, mnesia:table_info(T, where_to_commit)}
|| T <- mnesia:system_info(tables)]].
Questo comando può prendere un po 'per l'esecuzione come sarà copiare il contenuto di ogni tabella sulla rete.
b@node
è ora una replica esatta di a@node
. Si potrebbe modificare tale dichiarazione -. Sostituire la variabile Type
con disc_only_copies
nella chiamata a mnesia:add_table_copy/3
per copiare le tabelle, ma assicurano che siano su disco solo
Il mnesia documentazione spiega come utilizzare le funzioni che ho mostrato qui .