部署分析集群

在分析类用例中,分析查询可能非常繁重,因此有必要将其在单独的服务器上运行,以区别于处理事务工作负载的服务器。本示例展示了如何设置集群以实现这一目标。关于在集群中使用 Neo4j 图数据科学(Graph Data Science, GDS)库的信息,请参阅:Neo4j 图数据科学库手册 → 在 Neo4j 集群中使用 GDS

分析集群的设置方式有两种:具备容错能力或不具备容错能力。请注意,GDS 库**不**支持容错,因此 GDS 只能部署在配置为执行分析查询的服务器上(如下所述)。

具备容错能力

部署集群

  1. 配置一个包含五台服务器的集群,其中两台仅用于读取查询

    在此示例中,三台服务器(主机名分别为 server01.example.com, server02.example.com, 和 server03.example.com)被配置为集群的事务处理部分。另外两台服务器(主机名分别为 server04.example.comserver05.example.com)被配置为专门用于分析查询。所有五台服务器均安装了 Neo4j 企业版。它们通过在每台服务器上准备 neo4j.conf 文件进行配置。

    关键点

    • 所有服务器的发现列表中均包含*所有*成员。

    • 分析服务器的模式约束(mode constraints)配置为 SECONDARY,以防止它们参与写操作。

    • 在下述示例中,您需要设置 dbms.cluster.discovery.resolver_type=LIST

      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,server04.example.com:6000,server05.example.com:6000
      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,server04.example.com:6000,server05.example.com:6000
      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,server04.example.com:6000,server05.example.com:6000
      server04.example.com 上的 neo4j.conf - 分析服务器
      server.default_listen_address=0.0.0.0
      server.default_advertised_address=server04.example.com
      dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
      initial.server.mode_constraint=SECONDARY
      server.cluster.system_database_mode=SECONDARY
      server05.example.com 上的 neo4j.conf - 分析服务器
      server.default_listen_address=0.0.0.0
      server.default_advertised_address=server05.example.com
      dbms.cluster.endpoints=server01.example.com:6000,server02.example.com:6000,server03.example.com:6000,server04.example.com:6000,server05.example.com:6000
      initial.server.mode_constraint=SECONDARY
      server.cluster.system_database_mode=SECONDARY
  2. Neo4j 服务器已准备就绪可以启动。启动顺序没有要求。

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

    SHOW SERVERS;
    +----------------------------------------------------------------------------------------------------------+
    | name                                   | address         | state     | health      | hosting             |
    +----------------------------------------------------------------------------------------------------------+
    | "f3bd1199-bc6f-4a38-b25c-5f7588df5182" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    | "b331e481-c2ba-4b4e-82f3-bb51fe171483" | "server02:7687" | "Enabled" | "Available" | ["system"]          |
    | "bd80e8fd-a51b-406a-9ed4-42daf4792aa6" | "server03:7687" | "Enabled" | "Available" | ["system"]          |
    | "df3758b1-337f-4b8a-a9de-8e745ca96549" | "server04:7687" | "Free"    | "Available" | ["system"]          |
    | "9207bfd9-aa1b-40c2-b965-edcd3955a20e" | "server05:7687" | "Free"    | "Available" | ["system"]          |
    +----------------------------------------------------------------------------------------------------------+

    若要查看每台服务器的更详细信息,请使用 SHOW SERVERS YIELD * 命令。

    SHOW SERVERS YIELD *;
    +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | serverId                               | name                                   | address          | state     | health      | hosting             | requestedHosting    | tags | allowedDatabases | deniedDatabases | modeConstraint | version     |
    +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | "f3bd1199-bc6f-4a38-b25c-5f7588df5182" | "f3bd1199-bc6f-4a38-b25c-5f7588df5182" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] | ["system", "neo4j"] | []   | []               | []              | "NONE"         | "5.8.0"     |
    | "b331e481-c2ba-4b4e-82f3-bb51fe171483" | "b331e481-c2ba-4b4e-82f3-bb51fe171483" | "server02:7687" | "Enabled" | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "NONE"         | "5.8.0"     |
    | "bd80e8fd-a51b-406a-9ed4-42daf4792aa6" | "bd80e8fd-a51b-406a-9ed4-42daf4792aa6" | "server03:7687" | "Enabled" | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "NONE"         | "5.8.0"     |
    | "df3758b1-337f-4b8a-a9de-8e745ca96549" | "df3758b1-337f-4b8a-a9de-8e745ca96549" | "server04:7687" | "Free"    | "Available" | ["system"]          | []                  | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
    | "9207bfd9-aa1b-40c2-b965-edcd3955a20e" | "9207bfd9-aa1b-40c2-b965-edcd3955a20e" | "server05:7687" | "Free"    | "Available" | ["system"]          | []                  | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
    +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  4. 为了在从服务器(secondary servers)上支持分析查询,您必须通过运行以下命令显式启用它们:

    ENABLE SERVER "df3758b1-337f-4b8a-a9de-8e745ca96549";
    ENABLE SERVER "9207bfd9-aa1b-40c2-b965-edcd3955a20e";

    若要检查结果,请运行 SHOW SERVERS。输出应显示:

    +----------------------------------------------------------------------------------------------------------+
    | name                                   | address         | state     | health      | hosting             |
    +----------------------------------------------------------------------------------------------------------+
    | "f3bd1199-bc6f-4a38-b25c-5f7588df5182" | "server01:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    | "b331e481-c2ba-4b4e-82f3-bb51fe171483" | "server02:7687" | "Enabled" | "Available" | ["system"]          |
    | "bd80e8fd-a51b-406a-9ed4-42daf4792aa6" | "server03:7687" | "Enabled" | "Available" | ["system"]          |
    | "df3758b1-337f-4b8a-a9de-8e745ca96549" | "server04:7687" | "Enabled" | "Available" | ["system"]          |
    | "9207bfd9-aa1b-40c2-b965-edcd3955a20e" | "server05:7687" | "Enabled" | "Available" | ["system"]          |
    +----------------------------------------------------------------------------------------------------------+

在集群中创建新数据库

正如在简介中所述,集群中的服务器可以以主(primary)模式或从(secondary)模式托管数据库。主服务器提供写操作和容错能力(如果有多个主服务器)。从服务器则为运行读取查询提供空间,包括本示例中的分析查询。

示例 1. 创建一个包含三个主服务器和两个从服务器的新数据库

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

CREATE DATABASE bar
TOPOLOGY 3 PRIMARIES 2 SECONDARIES

不具备容错能力

如果容错不是优先级事项,则可以让单台服务器处理 DBMS 的写操作。这意味着所需的服务器更少,但服务器故障可能会影响整个 DBMS。

如果单个写入服务器或进程发生故障,所有数据库都将无法执行写操作。由于该服务器负责管理 DBMS,因此数据库的读取可用性也可能会降低。

以下示例展示了如何设置一个包含三个成员且不具备容错能力的分析集群。

部署集群

  1. 配置一个包含三台服务器的集群

    在此示例中,配置了 server01.example.com, server02.example.comserver03.example.com 三台服务器。所有三台服务器均安装了 Neo4j 企业版。它们通过在每台服务器上准备 neo4j.conf 进行配置。请注意,server01.example.com 与其他服务器不同,它是唯一处理写操作的服务器。其他服务器能够执行读取查询,并且如果使用 GDS,它们可以将结果写回写入服务器。

    关键点

    • 写入服务器的发现列表中仅包含其自身。这意味着它在启动时不会主动寻找其他成员,而是由其他成员来发现它。这是拥有一个仅包含单个主服务器的 system 数据库集群所必需的。

    • 分析服务器的模式约束配置为 SECONDARY,以防止它们参与写操作。

    • 在下述示例中,您需要设置 dbms.cluster.discovery.resolver_type=LIST

      server01.example.com 上的 neo4j.conf - 写入服务器
      server.default_listen_address=0.0.0.0
      server.default_advertised_address=server01.example.com
      # Only has self in this list
      dbms.cluster.endpoints=server01.example.com:6000
      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.server.mode_constraint=SECONDARY
      server.cluster.system_database_mode=SECONDARY
      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.server.mode_constraint=SECONDARY
      server.cluster.system_database_mode=SECONDARY
  2. Neo4j 服务器已准备就绪可以启动。启动顺序没有要求。

  3. 集群启动后,可以连接到任何实例并运行 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" | "Free"    | "Available" | ["system"]          |
    | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Free"    | "Available" | ["system"]          |
    +----------------------------------------------------------------------------------------------------------+

    若要查看每台服务器的更详细信息,请使用 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.8.0"     |
    | "e56b49ea-243f-11ed-861d-0242ac120002" | "e56b49ea-243f-11ed-861d-0242ac120002" | "server02:7687" | "Free"    | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
    | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Free"    | "Available" | ["system"]          | ["system"]          | []   | []               | []              | "SECONDARY"    | "5.8.0"     |
    +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  4. 为了在从服务器上支持分析查询,您需要通过运行以下命令显式启用它们:

    ENABLE SERVER "e56b49ea-243f-11ed-861d-0242ac120002";
    ENABLE SERVER "73e9a990-0a97-4a09-91e9-622bf0b239a4";

    若要检查结果,请运行 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"]          |
    | "73e9a990-0a97-4a09-91e9-622bf0b239a4" | "server03:7687" | "Enabled" | "Available" | ["system"]          |
    +----------------------------------------------------------------------------------------------------------+

在集群中创建新数据库

正如在简介中所述,集群中的服务器可以以主模式或从模式托管数据库。对于事务性工作负载,首选包含多个主服务器的数据库拓扑,以保证容错能力和自动故障转移。如果工作负载偏向分析,数据库拓扑可能会优先考虑从服务器而不是主服务器。这种配置针对可扩展性进行了优化,但它**不**具备容错能力,且不提供自动故障转移。

示例 2. 创建一个包含一个主服务器和两个从服务器的新数据库

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

CREATE DATABASE bar
TOPOLOGY 1 PRIMARY 2 SECONDARIES
启动时间

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

运行分析查询

如果运行大型常规 Cypher 查询,可以使用服务器标签(server tags)来标识大型服务器,并使用路由策略将读取查询指向这些服务器。更多详情,请参阅多数据中心路由

如果使用 GDS,请遵循Neo4j 图数据科学库手册 → 在 Neo4j 集群中使用 GDS 中的指导。

© . This site is unofficial and not affiliated with Neo4j, Inc.