2015-06-25 3 views
0

У меня встроенная Neo4j v2.2.3 три идентичные настройки сервера, где я пытаюсь превратить одну базу данных в настройку HA. Я попытался начать процесс HA с каждой комбинацией баз данных: все пустые, все-но-один пустые и все используют одну и ту же базу данных, но безрезультатно. AFAIK по какой-то причине экземпляры Neo4j не могут соединяться друг с другом. Я проверил, что IP-адреса верны, и порт 5001 должен быть открытым. Я также открыл 6001 для.Neo4j v2.2.3 Embedded HA: невозможно создать кластер

Вот мои сообщения.log.

2015-06-25 20:37:16.461+0000 INFO [o.n.k.i.DiagnosticsManager]: --- INITIALIZED diagnostics START --- 
2015-06-25 20:37:16.462+0000 INFO [o.n.k.i.DiagnosticsManager]: Neo4j Kernel properties: 
2015-06-25 20:37:16.467+0000 INFO [o.n.k.i.DiagnosticsManager]: ha.server_id=1 
2015-06-25 20:37:16.467+0000 INFO [o.n.k.i.DiagnosticsManager]: ha.server=:6001 
2015-06-25 20:37:16.467+0000 INFO [o.n.k.i.DiagnosticsManager]: online_backup_server=0.0.0.0:6362 
2015-06-25 20:37:16.467+0000 INFO [o.n.k.i.DiagnosticsManager]: ephemeral=false 
2015-06-25 20:37:16.467+0000 INFO [o.n.k.i.DiagnosticsManager]: ha.initial_hosts=[IP1]:5001,[IP2]:5001,[IP3]:5001 
2015-06-25 20:37:16.467+0000 INFO [o.n.k.i.DiagnosticsManager]: online_backup_enabled=true 
2015-06-25 20:37:16.468+0000 INFO [o.n.k.i.DiagnosticsManager]: ha.cluster_server=:5001 
2015-06-25 20:37:16.468+0000 INFO [o.n.k.i.DiagnosticsManager]: store_dir=/var/neo4j 
2015-06-25 20:37:16.468+0000 INFO [o.n.k.i.DiagnosticsManager]: org.neo4j.server.webserver.address=0.0.0.0 
2015-06-25 20:37:16.468+0000 INFO [o.n.k.i.DiagnosticsManager]: org.neo4j.server.database.mode=HA 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: Diagnostics providers: 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: org.neo4j.kernel.configuration.Config 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: org.neo4j.kernel.info.DiagnosticsManager 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: SYSTEM_MEMORY 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: JAVA_MEMORY 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: OPERATING_SYSTEM 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: JAVA_VIRTUAL_MACHINE 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: CLASSPATH 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: LIBRARY_PATH 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: SYSTEM_PROPERTIES 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: LINUX_SCHEDULERS 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: NETWORK 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: NodeCache 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: RelationshipCache 
2015-06-25 20:37:16.469+0000 INFO [o.n.k.i.DiagnosticsManager]: HighAvailabilityDiagnostics 

....

2015-06-25 21:55:36.502+0000 INFO [o.n.k.i.DiagnosticsManager]: High Availability diagnostics 
Member state:PENDING 
State machines: 
    AtomicBroadcastMessage:start 
    AcceptorMessage:start 
    ProposerMessage:start 
    LearnerMessage:start 
    HeartbeatMessage:start 
    ElectionMessage:start 
    SnapshotMessage:start 
    ClusterMessage:start 
Current timeouts: 

В конце концов, после двух минут я получаю исключение сделки:

Caused by: org.neo4j.graphdb.TransactionFailureException: Timeout waiting for database to become available and allow new transactions. Waited 2m. 2 reasons for blocking: Database is stopped, Cluster state is 'PENDING'. 

я создаю graphDatabaseFactory = new HighlyAvailableGraphDatabaseFactory(), который используется для создания

DatabaseServiceImpl(
    graphDatabaseFactory 
     .newEmbeddedDatabaseBuilder(neo4jStoreDir) 
     .loadPropertiesFromFile(configFileLocation) 
     .newGraphDatabase()) 

Это то, что мой neo4j.properties выглядит следующим образом:

online_backup_enabled=true 
online_backup_server=0.0.0.0:6362 
org.neo4j.server.webserver.address=0.0.0.0 
org.neo4j.server.database.mode=HA 
ha.server_id=1 
ha.cluster_server=0.0.0.0:5001 
ha.server=0.0.0.0:6001 
ha.initial_hosts=[IP1]:5001,[IP2]:5001,[IP3]:5001 

Я пробовал много различных комбинации для свойств, а также добавлено suggested значения от neo4-server.properties, но ничего не помогает. Где я должен поместить neo4j-server.properties во встроенный режим, или они не нужны (это мое первоначальное предположение)?

Что может быть неправильным? Возможно ли даже установить кластер HA с использованием встроенного Neo4j?

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

ответ

0

Так что проблема оказалась в том, что я использую расширения ядра, установленные с new HighlyAvailableGraphDatabaseFactory().addKernelExtensions(myKernelExtensionsArray). Метод addKernelExtensions устарел, но эти расширения отлично работают с настройкой одного сервера. Однако по этой настройке сервера HA они по какой-то причине не работают.

Я смог повторно использовать расширения ядра, заменив вызов на addKernelExtensions на registerTransacionEventHandler.

1

Neo4j определенно поддерживает кластеризацию во встроенном режиме - вы даже можете смешивать сервер и встроенные экземпляры в одном кластере.

Вам не нужны настройки от neo4j-server.properties вообще при работе во встроенном режиме.

Некоторые вещи, чтобы проверить:

  1. убедитесь, что 3 членов кластера находятся на одной и той же подсети. Если это не так, и они физически смещены, подумайте о создании VPN (например, через openvpn), чтобы иметь их в одной подсети.
  2. Разрешить любой IP-трафик между членами кластера, они откроют дополнительные порты.
+0

Спасибо! Wrt: «они откроют дополнительные порты», в настоящее время я открываю только порты 5001 и 6001, но могу открыть диапазон портов. Есть ли способ узнать, какие порты Neo4j пытается открыть? – ttiurani

+0

Рекомендуемая настройка - включить любую связь между членами кластера.Быть слишком разборчивым может привести к затруднительным отладкам, если, например, будущая версия Neo4j меняет реализацию в отношении каналов связи. –

+0

Я пытаюсь запустить это на Docker, где в настоящее время невозможно разоблачить каждый порт. Возможно, проблема заключается в настройках ha.server и ha.cluster_server. Я не совсем понимаю, что это такое, или я могу установить их на 0.0.0.0, или я должен использовать что-то еще. У меня есть кластер MongoDB, работающий на тех же машинах успешно, внутри контейнеров, поэтому не должно быть никаких проблем с IP. Кроме того, я не знаю, какие порты выставлять. Я пробовал 5000-7000, но это не сработало. – ttiurani