neo4j因果集群搭建
neo4j集群模式
- HA集群
- 因果集群
本文的介绍来自于neo4j官网操作手册。
HA集群
HA集群已经被启用,将会在4.x被删除,这是官网的原话
因此本文对HA集群不费口舌,重点介绍因果集群的搭建。
因果集群
其实官网介绍的已经很清晰了,只是全英文需要你去翻译感兴趣的可以看官网介绍【点击进入官网搭建手册】即使官网介绍了这里也写一下备用不用下次翻译了。
主要配置详解,这些配置是主要配置的内容,这要这几个配置搞清楚了就可以搭建出来集群。
选项名称 | 描述 |
---|---|
dbms.connectors.default_listen_address | 本机用于侦听传入消息的地址或网络接口。设置此值以0.0.0.0 允许Neo4j绑定到任何可用的网络接口。 |
dbms.connectors.default_advertised_address | 告知其他机器连接的地址。在典型情况下,应将其设置为完全限定的域名或此服务器的IP地址。 |
dbms.mode | 单个数据库实例的操作模式。对于因果聚类,有两种可能的模式:CORE 或READ_REPLICA 。 |
causal_clustering.minimum_core_cluster_size_at_formation | 集群中Core机器的最小数量 |
causal_clustering.minimum_core_cluster_size_at_runtime | 共识组中将存在的最小Core实例数。 |
causal_clustering.initial_discovery_members | 可用于引导此Core或Read Replica实例的初始Core集群成员集的网络地址。发现服务的默认端口为:5000 。 |
官网给出的实例:3台核心节点的集群,这三台节点的地址分别为core01.example.com
,core02.example.com
和core03.example.com
我们通过在每台服务器上准备neo4j.conf来配置它们。请注意,它们都是相同的,但配置dbms.connectors.default_advertised_address
除外
core01.example.com上的neo4j.conf:
dbms.connectors.default_listen_address=0.0.0.0
dbms.connectors.default_advertised_address=core01.example.com
dbms.mode=CORE
causal_clustering.minimum_core_cluster_size_at_formation=3
causal_clustering.minimum_core_cluster_size_at_runtime=3
causal_clustering.initial_discovery_members=core01.example.com:5000,core02.example.com:5000,core03.example.com:5000
core02.example.com上的neo4j.conf:
dbms.connectors.default_listen_address=0.0.0.0
dbms.connectors.default_advertised_address=core02.example.com
dbms.mode=CORE
causal_clustering.minimum_core_cluster_size_at_formation=3
causal_clustering.minimum_core_cluster_size_at_runtime=3
causal_clustering.initial_discovery_members=core01.example.com:5000,core02.example.com:5000,core03.example.com:5000
core03.example.com上的neo4j.conf:
dbms.connectors.default_listen_address=0.0.0.0
dbms.connectors.default_advertised_address=core03.example.com
dbms.mode=CORE
causal_clustering.minimum_core_cluster_size_at_formation=3
causal_clustering.minimum_core_cluster_size_at_runtime=3
causal_clustering.initial_discovery_members=core01.example.com:5000,core02.example.com:5000,core03.example.com:5000
现在我们准备启动Neo4j服务器了。启动顺序无关紧要。
启动命令 进入neo4j目录下运行 bin/neo4j start
即可
添加新的core服务器
通过使用适当的配置启动新的数据库服务器,可以将core服务器添加到现有集群。新服务器将自身与现有集群集成,并在从对等服务器复制数据后可用。如果现有群集包含大量数据,则新实例可能需要一些时间才能执行副本。
如果要将新服务器作为群集的永久成员,则最好causal_clustering.discovery_members
在群集中的所有服务器上进行更新以包含新服务器。
将Core Server添加到现有群集
在此示例中,我们将向core04.example.com
我们在刚刚创建的集群添加核心服务器。
在neo4j.conf配置以下那日容:
core04.example.com上的neo4j.conf:
dbms.connectors.default_listen_address=0.0.0.0
dbms.connectors.default_advertised_address=core04.example.com
dbms.mode=CORE
causal_clustering.minimum_core_cluster_size_at_formation=3
causal_clustering.minimum_core_cluster_size_at_runtime=3
causal_clustering.initial_discovery_members=core01.example.com:5000,core02.example.com:5000,core03.example.com:5000
请注意,配置与以前的服务器非常相似。在此示例中,新服务器不是集群的永久成员,因此不包括在内causal_clustering.discovery_members
。
现在可以启动新的Core Server并让它自己添加到现有的集群中。
添加新的只读副本节点
通过neo4j.conf提供与核心服务器类似的初始只读副本配置。由于只读副本不参与群集仲裁决策,因此其配置较短; 他们只需要知道他们可以绑定到的某些核心服务器的地址,以便发现集群。然后,他们可以选择适当的Core Server来复制数据。
将只读副本添加到现有群集
在此示例中,我们将向replica01.example.com
我们在创建的集群添加只读副本。
我们在neo4j.conf配置以下条目:
replica01.example.com上的neo4j.conf:
dbms.mode=READ_REPLICA
causal_clustering.initial_discovery_members=core01.example.com:5000,core02.example.com:5000,core03.example.com:5000
现在可以启动新的只读副本,并让它自己添加到现有的群集中。
官网的错误
好的,你如果按照官网的配置配下来了而且没看完我的文章,那么你很可能配错了,如果你按照本文的配置配起来了没错,那么不奇怪,我把官网写错的地方修改了一下。官网写错了一个参数,因此你会遇到这个异常
nohup: ignoring input
2019-06-10 01:21:50.768+0000 ERROR [c.n.s.e.CommercialBootstrapper] Failed to start Neo4j on unknown address. Missing value for 'causal_clustering.initial_discovery_members', which is mandatory with 'causal_clustering.discovery_type=LIST'
org.neo4j.graphdb.config.InvalidSettingException: Missing value for 'causal_clustering.initial_discovery_members', which is mandatory with 'causal_clustering.discovery_type=LIST'
at org.neo4j.causalclustering.core.CausalClusterConfigurationValidator.lambda$validateInitialDiscoveryMembers$0(CausalClusterConfigurationValidator.java:72)
at java.util.Arrays$ArrayList.forEach(Arrays.java:3880)
at org.neo4j.causalclustering.core.CausalClusterConfigurationValidator.validateInitialDiscoveryMembers(CausalClusterConfigurationValidator.java:69)
at org.neo4j.causalclustering.core.CausalClusterConfigurationValidator.validate(CausalClusterConfigurationValidator.java:32)
at org.neo4j.kernel.configuration.Config.migrateAndValidateAndUpdateSettings(Config.java:813)
at org.neo4j.kernel.configuration.Config.<init>(Config.java:420)
at org.neo4j.kernel.configuration.Config.<init>(Config.java:84)
at org.neo4j.kernel.configuration.Config$Builder.build(Config.java:314)
at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:108)
at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:91)
at com.neo4j.server.enterprise.CommercialEntryPoint.main(CommercialEntryPoint.java:22)
2019-06-10 01:21:50.777+0000 INFO [c.n.s.e.CommercialBootstrapper] Neo4j Server shutdown initiated by request
这一点都不奇怪,因为参数的正确名称为 causal_clustering.initial_discovery_members,但是官网写的时候却写成了causal_clustering.discovery_members 缺少了一个.initial_
因此按照官网配置会出错一点也不意外。