扩展 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 chart 运行 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 chart 安装新服务器。有关更多信息,请参阅创建 Helm 部署值文件安装 Neo4j 集群服务器

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

  2. 通过使用 cypher-shell(或 Neo4j Browser)连接到现有服务器之一,启用 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"] |
    +---------------------------------------------------------------------------------------------------------------------------------+

自动添加和启用新服务器

当新服务器加入集群时,您可以通过在 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.26.0" --set protocol="neo4j"
    • 使用 values.yaml 文件为新服务器设置值,并使用 neo4j/neo4j Helm chart 安装新服务器。

      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.26.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 chart。有关如何创建 values.yaml 文件和安装 Neo4j 集群服务器的更多信息,请参阅创建 Helm 部署值文件安装 Neo4j 集群服务器

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

        helm install server4 neo4j -f values.yaml

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

  2. 使用 Cypher Shell(或 Neo4j Browser),验证新服务器是否处于 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 现在以 secondary 角色托管 neo4j 数据库。

© . All rights reserved.