Предположим, что у вас есть таблица mnesia, реплицируемая на узлах A и B. Если на узле C, который не содержит копии таблицы, я делаю mnesia:change_config(extra_db_nodes, [NodeA, NodeB])
, а затем на узле CI do mnesia:dirty_read(user, bob)
, как узел C выбирает экземпляр узла таблицы для выполнения запроса?В кластере mnesia, какой узел запрашивается?
ответ
Согласно моему собственному исследовательскому ответу на вопрос - он выберет последний подключенный узел. Я буду благодарен за указание ошибок, если они обнаружены - mnesia - действительно сложная система!
Как Dan Gudmundsson pointed out в алгоритме списка рассылки выбора удаленного узла для запроса определяется в mnesia_lib:set_remote_where_to_read/2
. Это следующая
set_remote_where_to_read(Tab, Ignore) ->
Active = val({Tab, active_replicas}),
Valid =
case mnesia_recover:get_master_nodes(Tab) of
[] -> Active;
Masters -> mnesia_lib:intersect(Masters, Active)
end,
Available = mnesia_lib:intersect(val({current, db_nodes}), Valid -- Ignore),
DiscOnlyC = val({Tab, disc_only_copies}),
Prefered = Available -- DiscOnlyC,
if
Prefered /= [] ->
set({Tab, where_to_read}, hd(Prefered));
Available /= [] ->
set({Tab, where_to_read}, hd(Available));
true ->
set({Tab, where_to_read}, nowhere)
end.
Так он получает список active_replicas (т.е. списка кандидатов), при необходимости сокращает список освоить узлы для таблицы, удалять таблицы, которые должны быть проигнорированы (по любой причине), сужает список в настоящее время подключены узлы, а затем выбирает в следующем порядке:
- первого не
disc_only_copies
- Любой доступный узел
The Самая важная часть - это фактически список active_replicas
, так как он определяет порядок узлов в списке кандидатов.
Список active_replicas
формируются с помощью удаленных вызовов mnesia_controller:add_active_replica/*
от вновь подключенных узлов к старым узлам (то есть тот, который был в кластере раньше), которая сводится к функции add/1
которая добавляет элемент в качестве главы списка.
Поэтому ответ на вопрос - это выбрать самый последний подключен узел.
Примечание: Чтобы проверить список активных реплик на данном узле вы можете использовать это (грязный хак) код:
[ {T,X} || {{T,active_replicas}, X} <- ets:tab2list(mnesia_gvar) ].
Ну, узел C должен будет связаться с узлом A или узлом B, чтобы выполнить запрос. Таким образом, узел C должен сам решить, какую таблицу скопировать для выполнения запроса.
Если вам нужно что-то большее, чем это, вам нужно будет иметь какой-то алгоритм, который будет решать, какой узел запрашивать или даже реплицировать таблицу на узле C (это, как правило, зависит от того, какие характеристики вам нужны/нужны).
Если узел A и узел B образуют или являются частью кластера базы данных, хорошим началом является, вероятно, циклический алгоритм (или случайный, как вы предлагаете).
- 1. Каково значение основного узла Mnesia в кластере
- 2. Как указать, какой узел запрашивается в Mongo ReplicaSet?
- 3. Возможно ли запустить Mnesia без репликации в кластере
- 4. Как узнать в кластере RabbitMQ, какой узел является самым старым?
- 5. Как добавить узел в кластер mnesia?
- 6. Узел, не соединяющийся в кластере
- 7. Создать новый узел в кластере?
- 8. Узел js url запрашивается несколько раз
- 9. Установить фиксированный узел в кластере Quartz Scheduler
- 10. Erlang: Как удалить узел из кластера Mnesia
- 11. Как определить главный узел в кластере AWS
- 12. Как снова подключить аварийный узел erlang mnesia к кластеру?
- 13. Mnesia Clustering
- 14. Сколько данных на узел в кластере Cassandra?
- 15. RabbitMQ Не удается подключить узел в кластере
- 16. Идентифицировать основной узел в кластере Java EE
- 17. ZeroMQ знает, какой из подпрограмм запрашивается от
- 18. вопрос о распределении mnesia
- 19. Удалить not_exist_already узла из Mnesia кластера (схема)
- 20. Erlang Mnesia - mnesia: transaction (F) vs. mnesia: activity (transaction, F)
- 21. Операции Mnesia
- 22. , на котором узел elasticsearch.yml применяется в многоузловом кластере?
- 23. Cassandra: контроль того, какой узел получает данные
- 24. Как кассандра может выбрать, какой узел в кластере выполнять операцию чтения/записи?
- 25. Знание того, какой настоящий узел находится в кластере Cassandra при настройке виртуального узла
- 26. работающий узел mnesia с его бизнес-логикой как ОС deamon
- 27. Как узнать, какой следующий атрибут запрашивается в python
- 28. Как узнать, какой URL-адрес запрашивается в функции AJAX?
- 29. Какой узел Кассандры использовать?
- 30. Какой узел forever.js звонит?
Проверьте мой отредактированный пост, я не знаю, как это будет применяться к что я спросил. Я могу выполнить запрос на узле C без спецификации местоположения, поэтому как он выбирает, какую копию таблицы использовать? – ryeguy
Не понял, что на самом деле узел имеет таблицу в своей схеме. Извини, я виноват! –