扩展 Neo4j 部署

Neo4j 支持垂直和水平扩展。

垂直扩展

要增加或减少 Neo4j 实例可用的资源(CPU、内存),请更改 values.yaml 文件中的 neo4j.resources 对象以设置所需的资源使用量,然后执行 helm 升级。

如果您更改分配给 Neo4j 容器的内存,则还应更改 Neo4j 的内存配置(尤其是 server.memory.heap.initial_sizeserver.memory.pagecache.size)。有关详细信息,请参见 配置资源分配

例如,如果正在运行的 Neo4j 实例具有以下分配的资源

# values.yaml
neo4j:
  resources:
    cpu: "1"
    memory: "3Gi"

# Neo4j Configuration (yaml format)
config:
  server.memory.heap.initial_size: "2G"
  server.memory.heap.max_size: "2G"
  server.memory.pagecache.size: "500m"

并且您想将它们增加到 2 个 CPU 和 4 GB 内存(将额外内存分配给页面缓存)。

  1. 修改 values.yaml 文件以设置所需的资源使用量

    # values.yaml
    neo4j:
      resources:
        cpu: "2"
        memory: "4Gi"
    
    # Neo4j Configuration (yaml format)
    config:
      server.memory.heap.initial_size: "2G"
      server.memory.heap.max_size: "2G"
      server.memory.pagecache.size: "1G"
  2. 使用修改后的部署values.yaml文件和Neo4j Helm图表运行helm upgrade命令来应用更改。例如

    helm upgrade <release-name> neo4j/neo4j -f values.yaml

水平扩展

您可以向Neo4j集群添加新服务器以扩展写入或读取工作负载。

以下示例假设您有一个正在运行的包含 3 台服务器的 Neo4j 集群,并且您的 Kubernetes 集群有一个可用于新服务器的节点,即server4

使用以下选项之一安装server4

添加新服务器并手动启用它

  1. 使用与现有集群相同的neo4j.name值安装server4

    helm install server4 neo4j --set neo4j.edition=enterprise --set neo4j.acceptLicenseAgreement=yes --set volumes.data.mode=defaultStorageClass --set neo4j.password="password" --set neo4j.minimumClusterSize=3 --set neo4j.name=my-cluster

    或者,您可以使用values.yaml文件设置新服务器的值,并使用neo4j/neo4j Helm图表安装新服务器。有关更多信息,请参阅创建 Helm 部署值文件安装 Neo4j 集群服务器

    当新服务器加入集群时,它最初将处于Free状态。

  2. 使用cypher-shell(或 Neo4j 浏览器)连接到现有服务器之一,以启用server4以托管数据库。

    1. 访问server1上的 cypher-shell

      kubectl exec -ti server1-0 -- cypher-shell -u neo4j -p password -d neo4j
    2. cypher-shell提示符准备就绪后,验证server4是否处于Free状态,并记下其名称。

      SHOW SERVERS;
      +---------------------------------------------------------------------------------------------------------------------------------+
      | name                                   | address                                | state     | health      | hosting             |
      +---------------------------------------------------------------------------------------------------------------------------------+
      | "0908819d-238a-473d-9877-5cc406050ea2" | "server4.neo4j.svc.cluster.local:7687" | "Free"    | "Available" | ["system"]          |
      | "19817354-5cd1-4579-8c45-8b897808fdb4" | "server2.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
      | "b3c91592-1806-41d0-9355-8fc6ba236043" | "server3.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
      | "eefd7216-6096-46f5-9c41-a74f79684172" | "server1.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
      +---------------------------------------------------------------------------------------------------------------------------------+
  3. 使用其名称,启用server4以在集群中使用它。

    ENABLE SERVER "0908819d-238a-473d-9877-5cc406050ea2";
  4. 再次运行SHOW SERVERS;以验证server4是否已启用。

    SHOW SERVERS;
    +---------------------------------------------------------------------------------------------------------------------------------+
    | name                                   | address                                | state     | health      | hosting             |
    +---------------------------------------------------------------------------------------------------------------------------------+
    | "0908819d-238a-473d-9877-5cc406050ea2" | "server4.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system"]          |
    | "19817354-5cd1-4579-8c45-8b897808fdb4" | "server2.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    | "b3c91592-1806-41d0-9355-8fc6ba236043" | "server3.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    | "eefd7216-6096-46f5-9c41-a74f79684172" | "server1.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
    +---------------------------------------------------------------------------------------------------------------------------------+

添加新服务器并自动启用它

此功能从 Neo4j 5.20 开始可用。

您可以在新服务器加入集群时通过在values.yaml文件中将neo4j.operations.enableServer值设置为true或在运行helm install时使用--set标志来自动启用新服务器。当您想将新服务器添加到集群并启用它而无需手动干预时,此功能非常有用。

  1. 使用以下选项之一安装server4

    • 使用与现有集群相同的neo4j.name值运行helm install

      helm install server4 neo4j --set neo4j.edition=enterprise --set neo4j.acceptLicenseAgreement=yes --set volumes.data.mode=defaultStorageClass --set neo4j.password="password" --set neo4j.minimumClusterSize=3 --set neo4j.name=my-cluster --set neo4j.operations.enableServer=true --set image="neo4j/helm-charts-operations:5.20.0" --set protocol="neo4j"
    • 使用values.yaml文件设置新服务器的值,并使用neo4j/neo4j Helm图表安装新服务器。

      1. 确保neo4j.name值与现有集群相同,并且neo4j.operations.enableServer设置为true

        neo4j:
          name: "my-cluster"
          minimumClusterSize: 3
          resources:
            cpu: "0.5"
            memory: "2Gi"
          password: "my-password"
          edition: "enterprise"
          acceptLicenseAgreement: "yes"
        
        volumes:
          data:
            mode: "dynamic"
            dynamic:
              # * premium-rwo provisions SSD disks (recommended)
              # * standard-rwo provisions balanced SSD-backed disks
              # * standard provisions HDD disks
              storageClassName: premium-rwo
        
        operations:
              enableServer: true
              image: "neo4j/helm-charts-operations:5.20.0"
              # protocol can be "neo4j or "neo4j+ssc" or "neo4j+s". Default set to neo4j
              # Note: Do not specify bolt protocol here...it will FAIL.
              protocol: "neo4j"
              labels: {}

        有关所有可能的配置选项以及有关自定义部署的更多信息,请参阅自定义 Neo4j Helm 图表。有关如何创建values.yaml文件和安装 Neo4j 集群服务器的更多信息,请参阅创建 Helm 部署值文件安装 Neo4j 集群服务器

      2. 使用修改后的部署values.yaml文件和 Neo4j Helm图表运行helm install以应用更改。

        helm install server4 neo4j -f values.yaml

        当新服务器加入集群时,它将自动启用并准备好托管数据库。

  2. 使用 Cypher Shell(或 Neo4j 浏览器)验证新服务器是否处于Enabled状态。

    1. 访问server1上的 Cypher Shell。

      kubectl exec -ti server1-0 -- cypher-shell -u neo4j -p password -d neo4j
    2. 运行SHOW SERVERS;以验证server4是否已启用。

      SHOW SERVERS;
      +---------------------------------------------------------------------------------------------------------------------------------+
      | name                                   | address                                | state     | health      | hosting             |
      +---------------------------------------------------------------------------------------------------------------------------------+
      | "0908819d-238a-473d-9877-5cc406050ea2" | "server4.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system"]          |
      | "19817354-5cd1-4579-8c45-8b897808fdb4" | "server2.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
      | "b3c91592-1806-41d0-9355-8fc6ba236043" | "server3.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
      | "eefd7216-6096-46f5-9c41-a74f79684172" | "server1.neo4j.svc.cluster.local:7687" | "Enabled" | "Available" | ["system", "neo4j"] |
      +---------------------------------------------------------------------------------------------------------------------------------+

更改数据库拓扑

请注意,在输出中,虽然server4现在已启用,但它没有托管neo4j数据库。您需要更改数据库拓扑以也使用新服务器。

  1. 更改neo4j数据库拓扑,使其托管在三个主服务器和一个辅助服务器上。

    ALTER DATABASE neo4j SET TOPOLOGY 3 PRIMARIES 1 SECONDARY;
  2. 现在运行SHOW DATABASES;命令以验证新拓扑。

    SHOW DATABASES;
    +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | name     | type       | aliases | access       | address                                | role        | writer | requestedStatus | currentStatus | statusMessage | default | home  | constituents |
    +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | "neo4j"  | "standard" | []      | "read-write" | "server2.neo4j.svc.cluster.local:7687" | "primary"   | TRUE   | "online"        | "online"      | ""            | TRUE    | TRUE  | []           |
    | "neo4j"  | "standard" | []      | "read-write" | "server4.neo4j.svc.cluster.local:7687" | "secondary" | FALSE  | "online"        | "online"      | ""            | TRUE    | TRUE  | []           |
    | "neo4j"  | "standard" | []      | "read-write" | "server3.neo4j.svc.cluster.local:7687" | "primary"   | FALSE  | "online"        | "online"      | ""            | TRUE    | TRUE  | []           |
    | "neo4j"  | "standard" | []      | "read-write" | "server1.neo4j.svc.cluster.local:7687" | "primary"   | FALSE  | "online"        | "online"      | ""            | TRUE    | TRUE  | []           |
    | "system" | "system"   | []      | "read-write" | "server2.neo4j.svc.cluster.local:7687" | "primary"   | FALSE  | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
    | "system" | "system"   | []      | "read-write" | "server4.neo4j.svc.cluster.local:7687" | "primary"   | FALSE  | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
    | "system" | "system"   | []      | "read-write" | "server3.neo4j.svc.cluster.local:7687" | "primary"   | TRUE   | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
    | "system" | "system"   | []      | "read-write" | "server1.neo4j.svc.cluster.local:7687" | "primary"   | FALSE  | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
    +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

    请注意,server4现在托管了neo4j数据库,并具有secondary角色。