部署基础集群

设置集群基础设施的第一步是配置多台服务器,以形成一个可以托管数据库的集群。部署新集群时,请务必考虑以下配置设置。有关更详细的说明和示例,请参阅 设置参考

表 1. 集群的重要设置
设置名称 描述

server.default_advertised_address

告知其他机器连接的地址。在典型情况下,应将其设置为该服务器的完全限定域名或 IP 地址。

server.default_listen_address

本机用于监听传入消息的地址或网络接口。将此值设置为 0.0.0.0 会使 Neo4j 绑定到所有可用的网络接口。

dbms.cluster.endpoints

服务器为了发现其他集群成员所要联系的端点列表(以逗号分隔)。通常,所有集群成员(包括当前服务器)都必须在此列表中指定。该设置的行为可以通过配置 dbms.cluster.discovery.resolver_type 设置来修改。详细信息请参阅 集群服务器发现

dbms.cluster.minimum_initial_system_primaries_count

初始形成集群化 DBMS 所需的最小机器数量。当至少有这么多成员相互发现、绑定并引导出一个高可用的 system 数据库时,集群即被视为已形成。默认值为 3。因此,集群的初始机器中至少有这么多台必须将 server.cluster.system_database_mode 设置为 PRIMARY

server.cluster.system_database_mode

用户必须在每台服务器上手动指定 system 数据库的模式。默认值为 PRIMARY

initial.dbms.default_primaries_count

处于主模式(Primary mode)下的初始数据库托管数量。如果未指定,默认值为一个主模式托管。

initial.dbms.default_secondaries_count

处于从模式(Secondary mode)下的初始数据库托管数量。如果未指定,默认值为零个从模式托管。

initial.server.mode_constraint

指定服务器模式——它只能托管主数据库、只能托管从数据库,还是两者皆可。在首次启动 DBMS 时进行初始化。当新服务器添加到集群时,此设置用作 ENABLE SERVER 命令的默认输入;执行命令时可以覆盖此设置。

initial.server.allowed_databases

允许在此服务器上托管的数据库名称列表;拒绝所有其他名称。当新服务器添加到集群时,此设置用作 ENABLE SERVER 命令的默认输入;执行命令时可以覆盖此设置。

initial.server.denied_databases

不允许在此服务器上托管的数据库名称列表。为空表示不拒绝任何内容。当新服务器添加到集群时,此设置用作 ENABLE SERVER 命令的默认输入;执行命令时可以覆盖此设置。

initial.server.tags

数据库分配以及配置负载均衡和复制策略时使用的服务器标签名称列表。在首次启动 DBMS 和/或启用新添加的服务器时初始化。此设置用作 ENABLE SERVER 命令的默认输入;执行命令时可以覆盖此设置。

注意事项

将任何监听地址配置为 localhost127.0.0.1 或其他回环地址以外的地址,会将 Neo4j 进程暴露给运行该进程的服务器之外的连接。

请确保您了解其安全隐患,并强烈建议设置加密。

配置包含三个服务器的集群

以下示例展示了如何使用服务器地址列表的方法,设置一个包含三个成员的基本集群,并在主模式下托管默认数据库 neo4j(以及 system 数据库)。

根据当前使用的 dbms.cluster.discovery.resolver_type 类型,发现服务可以使用服务器地址列表、DNS 记录或 Kubernetes 服务来发现集群中的其他服务器。

在本例中,您设置 dbms.cluster.discovery.resolver_type=LIST

配置一个包含三个在主模式下托管数据库的服务器的集群

在本示例中,配置了三台服务器,名称分别为 server01.example.comserver02.example.comserver03.example.com。所有三台服务器均安装了 Neo4j 企业版。它们通过在每台服务器上准备 neo4j.conf 进行配置。

请注意,除了 server.default_advertised_address 的配置外,它们完全相同。

此外,在下面的示例中,没有配置 dbms.cluster.minimum_initial_system_primaries_count 设置,因为它默认为 3,并且当前正在部署一个包含三台服务器的集群。但是,如果设置仅包含两台服务器的集群,则必须在所有服务器上将 dbms.cluster.minimum_initial_system_primaries_count 设置为 2

  1. 在每台服务器上准备 neo4j.conf 文件。

    server01.example.com 上的 neo4j.conf
    server.default_listen_address=0.0.0.0
    server.default_advertised_address=server01.example.com
    dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000
    initial.dbms.default_primaries_count=3
    server02.example.com 上的 neo4j.conf
    server.default_listen_address=0.0.0.0
    server.default_advertised_address=server02.example.com
    dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000
    initial.dbms.default_primaries_count=3
    server03.example.com 上的 neo4j.conf
    server.default_listen_address=0.0.0.0
    server.default_advertised_address=server03.example.com
    dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000
    initial.dbms.default_primaries_count=3

    Neo4j 服务器已准备好启动。启动顺序无关紧要。

  2. 集群启动后,可以连接到任何一个实例并运行 SHOW SERVERS 来检查集群的状态。这将显示有关每个集群成员的信息。

    SHOW SERVERS;
    +-----------------------------------------------------------------------------------------------------------+
    | name                                   | address          | state     | health      | hosting             |
    +-----------------------------------------------------------------------------------------------------------+
    | "d6fbe54b-0c6a-4959-9bcb-dcbbe80262a4" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    | "e56b49ea-243f-11ed-861d-0242ac120002" | "server02:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    +-----------------------------------------------------------------------------------------------------------+

    请注意,初始化的服务器在 DBMS 首次启动时会自动被 ENABLED(启用)。

    它们的值取自初始设置。

    如果您需要更改服务器的选项,请使用 ALTER SERVER 命令。

  3. 有关每台服务器的更多详细信息,请使用 SHOW SERVERS YIELD * 命令。

    SHOW SERVERS YIELD *;
    +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | serverId                               | name                                   | address          | state     | health      | hosting             | requestedHosting    | tags | allowedDatabases | deniedDatabases | modeConstraint | version     |
    +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | "d6fbe54b-0c6a-4959-9bcb-dcbbe80262a4" | "d6fbe54b-0c6a-4959-9bcb-dcbbe80262a4" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.0.0"     |
    | "e56b49ea-243f-11ed-861d-0242ac120002" | "e56b49ea-243f-11ed-861d-0242ac120002" | "server02:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.0.0"     |
    | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.0.0"     |
    +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
启动时间

实例在加入集群时可能显示为不可用。如果您想跟踪启动过程,可以在 neo4j.log 中查看相关消息。

在集群中创建新数据库

正如在 简介 中提到的,集群中的服务器可以以主模式或从模式托管数据库。对于事务性工作负载,首选具有多个主节点的数据库拓扑,以实现容错和自动故障转移。

如果工作负载偏向分析型,数据库拓扑可能会优先选择从节点而不是主节点。这种配置针对可扩展性进行了优化,但它不具备容错能力,也不提供自动故障转移。以下示例涵盖了这两种场景。

示例 1. 创建一个具有三个主节点的新数据库

在上一个示例的服务器之一上,在 system 数据库中执行以下 Cypher 命令来创建新数据库:

CREATE DATABASE foo
TOPOLOGY 3 PRIMARIES

如果未指定 TOPOLOGY,则根据 neo4j.conf 中指定的 initial.dbms.default_primaries_count 创建数据库。此外,如果将 initial.dbms.default_secondaries_count 指定为 0 以外的任何数字,则该命令的第二行将为 TOPOLOGY 3 PRIMARIES 0 SECONDARIES。因此,TOPOLOGY 指定的数量会覆盖 initial.dbms.default_primaries_countinitial.dbms.default_secondaries_count(如果适用),前提是指定的数量不超过可用服务器的数量。

示例 2. 创建一个具有一个主节点和两个从节点的新数据库

在上一个示例的服务器之一上,在 system 数据库中执行以下 Cypher 命令来创建新数据库:

CREATE DATABASE bar
TOPOLOGY 1 PRIMARY 2 SECONDARIES

请注意,即使不在初始配置中指定 initial.dbms.default_secondaries_count,此操作也是可行的。Cypher 命令 TOPOLOGY 部分中指定的任何内容都会覆盖 initial.dbms.default_secondaries_count 设置。

分析用例

要了解有关专门为分析用例设置集群的更多信息,请参阅 部署分析集群