Я пишу распределенное приложение mnesia и использую схему. Когда новый узел присоединяется к кластеру, он добавляется в схему Mnesia с помощью RPC вызов (от masternode который начал схему), которая выполняет следующие функции:Erlang: Как удалить узел из кластера Mnesia
start_Mnesia(MasterNode) ->
mnesia:start(),
mnesia:change_config(extra_db_nodes, [MasterNode]),
Tabs=mnesia:system_info(tables) -- [schema],
[mnesia:add_table_copy(Tab, node(), ram_copies) || Tab <- Tabs].
Когда узел аварии или разорвано, главный узел получает событие nodedown
, и узел должен быть удален из кластера. Как я могу это достичь?
EDIT: Я получил следующее решение: TabList - это список всех таблиц в моей схеме, которые использует мой узел.
Mnesia: del_table_copy (TabList, узел)
Почему вы хотите удалить этот узел? Когда он вернется, он снова присоединится к кластеру mnesia. – user425720
Когда узел выходит из строя, запускается другой (резервный) узел и выполняет свою работу. Таким образом, мне нужен старый узел (который пошел вниз), чтобы покинуть кластер, и он должен быть настроен чистым, когда он снова присоединяется. (Тогда он будет резервным узлом до тех пор, пока другой узел не сработает) – muehsi
у вас есть один ответ - так что я ничего не добавлю. Дело в том, что у меня сложилось впечатление, что вы можете злоупотреблять mnesia в этом случае. локальных таблиц будет недостаточно? Вам нужен кластер? – user425720