2016-06-24 2 views
9

После прохождения руководства по разработке H2 я до сих пор не понимаю, как я могу узнать, какие из узлов или узлов кластера были или нет, а какая база данных должна быть восстановлена ​​в случае временной сети отказ.Обнаружение и восстановление неустановленных узлов кластера H2

Рассмотрим следующий сценарий:

  • H2 кластер начал с N активными узлами (на самом деле это правда, что H2 может поддерживать N> 2, то есть более 2 узлов кластера?)
  • (много DB обновления, читает ...)
  • Сетевое соединение с одним (или несколькими) узлов кластера получает вниз и узел становится невидимым для остальной части кластера
  • (много обновлений БД, читает ...)
  • сети ссылка с pr eviously отсоединен узел (ов) восстановлено
  • Он обнаружил, что узел кластера, вероятно, отсутствует (насколько я могу видеть SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME='CLUSTER' начинает реагировать с пустой строкой, если один узел в кластере выходит из строя)

После этого момента он является неясно, как узнать, какие узлы были неудачными? Очевидно, что я могу сделать базовую проверку, сравнивая размер DB, но это ненадежно.

  1. Что такое рекомендуемая процедура, чтобы узнать, какой узел отсутствует в кластере, особенно. если запрос выше отвечает пустой строкой?

  2. Другой вопрос - почему urlTarget не поддерживает несколько параметров? Как я должен использовать инструмент CreateCluster, если несколько узлов в кластере потерпели неудачу, и я хочу восстановить более одного?

  3. Также я не понимаю, как работает CreateCluster, если мне пришлось остановить кластер, и я не хочу фактически восстанавливать какие-либо узлы? Мне непонятно, что мне нужно передать в инструмент CreateCluster, если мне не нужно копировать базу данных.

ответ

1

Это частично верно SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME='CLUSTER', возвращает пустую строку при запросе в стандартном режиме.

Однако вы можете получить список серверов, используя Connection.getClientInfo(), но это двухэтапный процесс. Перефразировано от h2database.com:

Список свойств, возвращаемых getClientInfo(), включает в себя свойство numServers, которое возвращает количество серверов, находящихся в списке соединений. getClientInfo() также имеет свойства server0..serverN, где N - количество серверов - 1. Таким образом, чтобы получить второй сервер из списка, вы используете getClientInfo ('server1').

Примечание: свойство serverX возвращает только IP-адреса и порты, а не имена хостов.

И прежде, чем вы скажете простую репликацию, да, это операция по умолчанию, но вы можете делать более сложные вещи, выходящие за рамки вашего вопроса, в кластерном H2.

Вот цитата за то, что вы говорите:

Кластеризация может использоваться только в режиме сервера (встроенный режим не поддерживает кластеризацию). Кластер может быть заново создан с помощью инструмента CreateCluster без остановки оставшегося сервера. Приложения, которые все еще подключены, автоматически отсоединяются, однако при добавлении AUTO_RECONNECT = TRUE они восстанавливаются после этого.

Так что да, если кластер останавливается, auto_reconnect не включен, и вы придерживаетесь основного запроса, вы застряли и сложно найти информацию. В то время как большинство людей скажут вам, что вы просматриваете API и/или руководство, им не приходилось просматривать это, так что мои симпатии.

Я нахожу более полезным отслеживать коды ошибок, потому что вы получаете отличное представление о том, что вы можете сделать, когда увидите, как неудача запланирована ... here you go.

+0

Спасибо за ответ! Прежде чем я приму свой ответ, вы можете взглянуть на другие два вопроса (они из недельного обновления, которые я сделал, когда я начал щедрость): 2. Могу ли я использовать 3 и более узлов кластера в кластере h2 и как правильно настроить этот кластер. 3. Как правильно закрыть кластер h2 и снова запустить его. Пожалуйста, предоставьте примеры командной строки о том, как это сделать. – Alex

+0

Ответ частично, но я все еще принимаю его. Спасибо за ответ. Похоже, я ожидаю слишком много от нестандартной кластеризации H2. – Alex

Смежные вопросы