暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

NebulaGraph 扩容实战|丝滑扩容 Graph、Storage 与 Meta 服务

NebulaGraph 2025-10-20
293

导读


本文来自社区开发者 Zhi@Li 的扩容实践,手把手教大家搞定 Graph 服务、Storage 服务和 Meta 服务扩容~


01

什么时候需要扩容?

总览

    NebulaGraph 系统架构分为 Graph 服务、Storage 服务和 Meta 服务,以下是 NebulaGraph 扩容一览表。

    Graph 服务(Graphd)
    核心职责
    1.接入层 + 查询计划生成/优化 + 分布式执行协调;
    2.维护客户端会话与认证;
    3.把子查询下推到 Storage,并汇总结果
    资源特征
    CPU 密集(解析/优化/聚合)、内存(会话/计划缓存)、网络出入带宽(和 Storage 来回传输)
    优先扩容

    QPS/并发上不去、p95/p99 查询时延升高、graphd CPU 长期高位(>70%)、连接数逼近上限

    扩容方式
    1.横向扩容 graphd(无状态,易加副本),并在前面挂 LB】2.必要时调大线程与连接上限
    Meta 服务(metad)
    核心职责
    1.集群“控制面”:元数据/拓扑、分区与 Leader 分布、用户/权限、心跳注册;
    2.基于 Raft 保证一致性
    资源特征
    1.轻写多读;
    2.CPU 峰值常由心跳风暴、分区数/主机数过多、或频繁的 schema/leader 变更触发;
    3.磁盘 IO(Raft WAL)
    优先扩容

    1. metad CPU/磁盘IO持续高、心跳/元数据读写排队、Raft 复制落后;

    2. 大集群(节点/分区非常多)或高频变更

    扩容方式
    1.保持奇数副本(3/5 节点),优先纵向加配(更快磁盘/CPU/网络);
    2.必要时从 3 扩到 5 以提高读吞吐与容错

    Storage 服务(storaged)

    核心职责

    1.真正的点/边与索引存储在 RocksDB;

    2.执行子查询(点查/邻接扩展/过滤/索引扫描),并参与 Raft 复制

    资源特征
    磁盘 IO 与写放大(WAL/Compaction)、网络(副本复制/查询返回)、内存(Block Cache)
    优先扩容

    写入/更新堆积、查询在 storage 侧变慢、磁盘利用率/IO 等长期高位、Compaction backlog 大、Leader 热点

    扩容方式

    横向扩容 storaged 增加分区承载面;随后 BALANCE DATA BALANCE LEADER,并评估磁盘/副本策略


    Graph 服务

      职责

      • 作为接入层承载客户端连接,会话、认证、权限检查。
      • 查询优化与执行协调:把一个 nGQL 拆成分布式子计划,下推到多个 storaged;最后汇总/排序/聚合返回。
      • 维护计划缓存、会话状态(无业务数据)。

      扩容触发信号(看到这些,优先加 graphd)

      • 查询时延上升:p95/p99 明显劣化且 CPU 使用率在 graphd 上飙高(>70% 持续)。
      • 并发连接与 QPS 打满:连接数接近实例上限,或排队时间上升(线程池满负载)。
      • 网络出入带宽紧张:graphd 到 storaged 的返回结果量大,LB 后面每个 graphd 都接近网卡瓶颈。
      • 短时间突发流量导致 graphd 负载尖峰,但 storage 仍然健康。

      扩容实践

      • 横向扩容 graphd 容器/主机(无状态,最容易),在前面放负载均衡(L4/L7 皆可)。
      • 适度调优 graphd 并发/连接参数(如网络线程/worker 线程/最大连接数/查询超时),但不要硬顶到 CPU 饱和。
      • 若查询本身数据侧很“重”,仅加 graphd 效果有限——参看 storage 扩容信号。

      Storage 服务

        职责

        • 数据面:点/边/索引的读写,基于 RocksDB;每个分区是 Raft 组(多副本)。
        • 执行下推算子:点查、邻接边遍历、按属性过滤、按照索引扫描等。
        • 数据复制:WAL 写入、Follower 复制、Compaction、快照/备份等后台任务。

        扩容触发信号(看到这些,优先加 storaged)

        • 容量压力:某些盘/实例使用率 >70–80%,且还在快速增长(风险:写放大/compaction 失衡)。
        • 磁盘 IO 持续高(util/await 上升)、write stall、compaction backlog 大(RocksDB Pending Compaction Bytes 居高不下)。
        • 写入/更新延迟上升或Raft 复制落后(commit/apply 延迟大),BALANCE LEADER
           后也无法缓解。
        • 热点分区/热点 Leader:单机 Leader 负载显著高于同集群其他节点。
        • 查询在 storage 侧变慢(graphd CPU 并不高、但整体时延升高),说明下推阶段在 IO/网络侧受限。

        扩容实践

        • 横向加 storaged 节点(带独立数据盘,优先 NVMe/SSD;充足内存用于 Block Cache)。

        • 扩容后务必执行:

          • BALANCE DATA
            (数据均衡,迁移分区副本)
          • BALANCE LEADER
            (领导者均衡,打散热点)
        • 分区数与副本因子要匹配节点规模(分区过少难以并行,过多会加重 Meta/心跳与 Raft 开销)。

        • 纵向优化:提升磁盘(IOPS/吞吐/延迟)、调高 Block Cache、限速后台 compaction/ingest,避免前台查询抖动。

        • 网络:保证存储平面万兆以上,跨机房/跨可用区时注意 RTT 对 Raft 的影响。

        Meta 服务

          职责

          • “控制面/大脑”:维护 Space/Schema、分区与副本布局、Leader 分布、Host 列表、用户/角色等。
          • 接收 storaged 心跳、分配/记录元数据变更;通过 Raft 多副本保证一致性。
          • 参与 数据均衡/Leader 均衡 调度。

          扩容触发信号(何时考虑从 3 个 metad 扩到 5 个 或加强单机)

          • 大规模集群:主机/分区数量非常多导致心跳风暴、元数据读负载过高(metad
             CPU 持续高位)。
          • 频繁变更:大量 schema 变更或频繁 BALANCE
             操作期间,Raft WAL/复制负载明显偏高。
          • Raft 落后或Meta RPC 队列阻塞:元数据读写排队时间增大,metad
             磁盘 IO/延迟居高。
          • 容错要求提高:跨 AZ/机房需要更高的多数派存活概率。

          扩容实践

          • 保持奇数副本(3/5),优先3 节点即可满足大多数场景;若上面症状长期存在,再扩到 5 节点。
          • 优先纵向加配:给 metad
             上更快的 CPU/盘(Raft WAL 对延迟敏感),独占网卡与存储,避免与 storaged 混布高 IO。
          • 拓扑:跨可用区布局 metad,多数派可用优先;避免把所有 metad
             堆在同一个故障域。

          02

          扩容实操参考

          扩容 Graph 节点

            前置条件检查

            1. 软件版本一致

            新节点需安装与现有集群一致的 NebulaGraph 3.0.2 版本(包括 graphd 进程版本一致)。

            2. 网络连通

            • 新节点到所有 Meta 节点的 9559 端口可通。
            • 新节点到 Storage 节点的 9779 端口可通。
            • 新节点与现有 Graph 节点之间互通(用于调试/监控)。
            3. 时间同步
            确保 NTP 正常工作,避免时钟漂移影响会话和 Raft.

            4. 资源分配

            • CPU、内存满足现有 graphd 节点的配置。

            • 网络建议万兆或以上,低延迟。

            • SSD 数据盘配置。

            新节点安装与配置 graphd

            在 10.xxx.xxx.144 和 10.xxx.xxx.145 执行:

            1. 安装 NebulaGraph

            rpm 安装

              cd /data/server/
              mkdir -p data/server/Nebula_Graph/{data,logs,pids}
              rpm -ivh --prefix=/data/server/Nebula_Graph/ nebula-graph-3.0.2.el8.x86_64.rpm
              ls -lshrt data/server/Nebula_Graph/
                4.0K drwxr-xr-x 3 root root 4.0K Aug 14 14:48 share
                4.0K drwxr-xr-x 2 root root 4.0K Aug 14 14:48 scripts
                4.0K drwxr-xr-x 2 root root 4.0K Aug 14 14:48 bin
                4.0K drwxr-xr-x 2 root root 4.0K Aug 14 14:58 etc
                4.0K drwxr-xr-x 2 root root 4.0K Aug 14 15:05 pids
                4.0K drwxr-xr-x 2 root root 4.0K Aug 14 15:05 logs
                4.0K drwxr-xr-x 2 root root 4.0K Aug 14 15:05 data

                2. 编辑 graphd 配置文件

                可直接复用其他节点的配置项,仅需要修改 local_ip 
                为本地 IP 
                地址,此处扩容 10.xxx.xxx.144
                、10.xxx.xxx.145 
                两个 graphd 
                节点。

                  # 修改配置文件
                  ssh 10.xxx.xxx.144
                  sed -i "s,local_ip=10.xxx.xxx.141,local_ip=10.xxx.xxx.144,g"  data/server/Nebula_Graph/etc/nebula-graphd.conf
                    ssh 10.xxx.xxx.145
                    sed -i "s,local_ip=10.xxx.xxx.141,local_ip=10.xxx.xxx.145,g"  data/server/Nebula_Graph/etc/nebula-graphd.conf
                      # 检查配置
                      cat /data/server/Nebula_Graph/etc/nebula-graphd.conf | grep -Ei 'port=|meta_server_addrs=|local_ip=|log_dir=' --color

                      启动 Graph 服务并加入集群

                      在每台新节点上执行:

                        # 启动 graphd
                        cd /data/server/
                        chown -R edu-server:edu-server Nebula_Graph
                        cd /data/server/Nebula_Graph/scripts


                        su - edu-server
                        cd /data/server/Nebula_Graph/scripts
                        ./nebula.service  start graphd
                        ./nebula.service  status graphd

                        Graph 服务会在启动时向 Meta 注册,成为可用的接入节点。

                        验证新节点是否成功加入

                        在任一已有的 Graph 节点上执行:

                          # 进入控制台,验证新节点注册
                          nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p '<user_password>' -e 'SHOW HOSTS GRAPH;'
                          你应该看到原有三台 + 新增两台节点,状态为 ONLINE.
                            (root@nebula) [(none)]> SHOW HOSTS GRAPH;
                            +------------------+------+----------+---------+--------------+---------+
                            | Host             | Port | Status   | Role    | Git Info Sha | Version |
                            +------------------+------+----------+---------+--------------+---------+
                            | "10.xxx.xxx.141" | 9669 | "ONLINE" | "GRAPH" | "4805f8c"    | "3.0.2" |
                            | "10.xxx.xxx.142" | 9669 | "ONLINE" | "GRAPH" | "4805f8c"    | "3.0.2" |
                            | "10.xxx.xxx.143" | 9669 | "ONLINE" | "GRAPH" | "4805f8c"    | "3.0.2" |
                            | "10.xxx.xxx.144" | 9669 | "ONLINE" | "GRAPH" | "4805f8c"    | "3.0.2" |
                            | "10.xxx.xxx.145" | 9669 | "ONLINE" | "GRAPH" | "4805f8c"    | "3.0.2" |
                            +------------------+------+----------+---------+--------------+---------+
                            Got 5 rows (time spent 1074/1841 us)
                              # 查询集群版本一致性
                              nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p '<user_password>' -e 'SHOW HOSTS META;'
                                +------------------+------+----------+--------+--------------+---------+
                                | Host             | Port | Status   | Role   | Git Info Sha | Version |
                                +------------------+------+----------+--------+--------------+---------+
                                | "10.xxx.xxx.141" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                | "10.xxx.xxx.142" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                | "10.xxx.xxx.143" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                +------------------+------+----------+--------+--------------+---------+
                                  nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p '<user_password>' -e 'SHOW HOSTS STORAGE;'
                                    (root@nebula) [(none)]> SHOW HOSTS STORAGE;
                                    +------------------+------+----------+-----------+--------------+---------+
                                    | Host             | Port | Status   | Role      | Git Info Sha | Version |
                                    +------------------+------+----------+-----------+--------------+---------+
                                    | "10.xxx.xxx.141" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                    | "10.xxx.xxx.142" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                    | "10.xxx.xxx.143" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                    +------------------+------+----------+-----------+--------------+---------+

                                    业务配置修改并验证

                                    1. 更新负载均衡配置

                                    • 如果客户端通过 LB 访问 graphd,需要将新节点的 IP:9669 加入 LB 后端池。

                                      • 10.xxx.xxx.144:9669
                                        10.xxx.xxx.145:9669


                                      • 确认健康检查(TCP 9669)正常。

                                      2. 业务验证

                                      业务查询进行并发压测,确认 QPS 与时延符合预期。

                                      3. 监控接入量

                                      通过监控系统或 SHOW STATS 查看各 graphd 的连接数与查询负载分布。

                                      扩容 Storage 节点

                                        前置条件检查

                                        1. 软件版本一致
                                        新节点需安装与现有集群一致的 NebulaGraph 3.0.2 版本(包括 graphd 进程版本一致)。

                                        2. 网络连通

                                        • 新节点到所有 Meta 节点的 9559 端口可通。
                                        • 新节点到 Storage 节点的 9779 端口可通。
                                        • 新节点与现有 Graph 节点之间互通(用于调试/监控)。
                                        3. 时间同步
                                        确保 NTP 正常工作,避免时钟漂移影响会话和 Raft.
                                        4. 资源分配
                                        • CPU、内存满足现有 graphd 节点的配置。

                                        • 网络建议万兆或以上,低延迟。

                                        • SSD 数据盘配置。

                                        5. 主机初始化

                                        新节点安装与配置 storage

                                        在 10.xxx.xxx.144 和 10.xxx.xxx.145 执行:

                                        1. 安装 NebulaGraph

                                        rpm 安装

                                          cd /data/server/
                                          mkdir -p data/server/Nebula_Graph/{data,logs,pids}
                                          rpm -ivh --prefix=/data/server/Nebula_Graph/ nebula-graph-3.0.2.el8.x86_64.rpm
                                          ls -lshrt data/server/Nebula_Graph/
                                            4.0K drwxr-xr-x 3 root root 4.0K Aug 14 14:48 share
                                            4.0K drwxr-xr-x 2 root root 4.0K Aug 14 14:48 scripts
                                            4.0K drwxr-xr-x 2 root root 4.0K Aug 14 14:48 bin
                                            4.0K drwxr-xr-x 2 root root 4.0K Aug 14 14:58 etc
                                            4.0K drwxr-xr-x 2 root root 4.0K Aug 14 15:05 pids
                                            4.0K drwxr-xr-x 2 root root 4.0K Aug 14 15:05 logs
                                            4.0K drwxr-xr-x 2 root root 4.0K Aug 14 15:05 data

                                            2. 编辑 storaged 配置文件

                                            可直接复用其他节点的配置项,仅需要修改 local_ip 为本地 IP 
                                            地址,此处扩容 10.xxx.xxx.144
                                            、10.xxx.xxx.145 
                                            两个 storaged 节点。

                                              # 修改配置文件
                                              ssh 10.xxx.xxx.144
                                              sed -i "s,local_ip=10.xxx.xxx.141,local_ip=10.xxx.xxx.144,g"  data/server/Nebula_Graph/etc/nebula-storaged.conf
                                                ssh 10.xxx.xxx.145
                                                sed -i "s,local_ip=10.xxx.xxx.141,local_ip=10.xxx.xxx.145,g"  data/server/Nebula_Graph/etc/nebula-graphd.conf
                                                  # 检查配置
                                                  cat /data/server/Nebula_Graph/etc/nebula-graphd.conf | grep -Ei 'port=|meta_server_addrs=|local_ip=|log_dir=' --color

                                                  3. 启动 storaged 服务并加入集群

                                                    # 进入控制台,检查当前节点列表
                                                    nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p 'user_password' -e 'SHOW HOSTS STORAGE;'
                                                      +------------------+------+----------+-----------+--------------+---------+
                                                      | Host             | Port | Status   | Role      | Git Info Sha | Version |
                                                      +------------------+------+----------+-----------+--------------+---------+
                                                      | "10.xxx.xxx.141" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                                      | "10.xxx.xxx.142" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    |         |
                                                      | "10.xxx.xxx.143" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                                      +------------------+------+----------+-----------+--------------+---------+
                                                        # 进入控制台,检查当前节点列表
                                                        nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p 'user_password' -e 'SHOW HOSTS;'
                                                          +------------------+------+----------+--------------+---------------------------------------------------------------+-----------------------------------------------------------------+---------+
                                                          | Host             | Port | Status   | Leader count | Leader distribution                                           | Partition distribution                                          | Version |
                                                          +------------------+------+----------+--------------+---------------------------------------------------------------+-----------------------------------------------------------------+---------+
                                                          | "10.xxx.xxx.141" | 9779 | "ONLINE" | 10           | "ttt_20250613_001:5, ttt_20250711_001:5"                      | "ttt_20250613_001:15, ttt_20250711_001:15, ttt_20250723_001:15" | "3.0.2" |
                                                          | "10.xxx.xxx.142" | 9779 | "ONLINE" | 20           | "ttt_20250613_001:5, ttt_20250711_001:5, ttt_20250723_001:10" | "ttt_20250613_001:15, ttt_20250711_001:15, ttt_20250723_001:15" |   |
                                                          | "10.xxx.xxx.143" | 9779 | "ONLINE" | 15           | "ttt_20250613_001:5, ttt_20250711_001:5, ttt_20250723_001:5"  | "ttt_20250613_001:15, ttt_20250711_001:15, ttt_20250723_001:15" | "3.0.2" |
                                                          +------------------+------+----------+--------------+---------------------------------------------------------------+-----------------------------------------------------------------+---------+

                                                          在每台新节点上执行:

                                                            # 启动 graphd
                                                            cd /data/server/
                                                            chown -R edu-server:edu-server Nebula_Graph
                                                            cd /data/server/Nebula_Graph/scripts


                                                            su - edu-server
                                                            cd /data/server/Nebula_Graph/scripts
                                                            ./nebula.service  start storaged
                                                            ./nebula.service  status storaged

                                                            nebula-storaged 进程的端口号的红色闪烁状态是因为 nebula-storaged 
                                                            在启动流程中会等待 nebula-metad 
                                                            添加当前 Storage 服务,当前 Storage 服务收到 Ready 信号后才会正式启动服务。

                                                            从 3.0.0 版本开始,Meta 服务无法直接读写在配置文件中添加的 Storage 服务,配置文件的作用仅仅是将 Storage 服务注册至 Meta 服务中。用户必须使用 ADD HOSTS 
                                                            命令后,才能使 Meta 服务正常读写 Storage 服务。

                                                            在任意 Graph 节点执行 ADD HOSTS 将新节点注册到 Meta 服务,否则 Meta 不会分配分区给它,BALANCE DATA 也不会把数据迁移过去。

                                                            从 NebulaGraph 3.0.0 开始,在配置文件中设置存储主机仅在元数据(Meta)端注册主机,但不会将它们添加到集群中,必须运行 ADD HOSTS 语句来添加存储主机。

                                                              # 进入控制台,检查当前节点列表
                                                              nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p 'user_password'
                                                                ADD  HOSTS  10.xxx.xxx.144:9779, 10.xxx.xxx.145:9779;

                                                                增加 Storage 主机在下一个心跳周期之后才能生效,为确保数据同步,请等待 2 个心跳周期(20 秒),然后执行 SHOW HOSTS 查看是否在线。

                                                                • IP地址和端口请和配置文件中的设置保持一致,例如单机部署的默认为 127.0.0.1:9779。

                                                                验证新节点是否成功加入

                                                                在任一已有的 Graph 节点上执行:

                                                                  # 进入控制台,确认新节点
                                                                  nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p 'user_password' -e 'SHOW HOSTS STORAGE;'

                                                                  你应该看到原有三台 + 新增两台节点,状态为 ONLINE.

                                                                  • 为了确保后续操作按预期工作,请等待两个心跳周期,即 20 秒,然后运行 SHOW HOSTS 来检查主机是否在线。

                                                                  • 确保 IP 地址和端口号与配置文件中的相同。例如,在独立部署中,默认的 IP 地址和端口号是 127.0.0.1:9779。

                                                                    (root@nebula) [(none)]> SHOW HOSTS STORAGE;
                                                                    +------------------+------+----------+-----------+--------------+---------+
                                                                    | Host             | Port | Status   | Role      | Git Info Sha | Version |
                                                                    +------------------+------+----------+-----------+--------------+---------+
                                                                    | "10.xxx.xxx.141" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                                                    | "10.xxx.xxx.142" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                                                    | "10.xxx.xxx.143" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                                                    | "10.xxx.xxx.144" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                                                    | "10.xxx.xxx.145" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                                                    +------------------+------+----------+-----------+--------------+---------+

                                                                    负载均衡

                                                                    因为在 Nebula 3.0.x(含 3.0.2) 里,没有可用的“数据均衡”命令来把现有分区副本搬到新节点;只支持 Leader 均衡。新加的 10.xxx.xxx.144 / 145 依然是 “No valid partition”,所以 Leader 不可能被分配到它们——Leader 只能在“持有该分区副本的存储节点”里轮换。

                                                                    当前的三个 Space 的分区副本仍然只在旧的三台 141/142/143 上,因此 Leader 均衡只在这三台之间打散;对 144/145 没有任何效果。

                                                                      nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p 'user_password' -e 'SHOW HOSTS;'
                                                                        (root@nebula) [(none)]> SHOW HOSTS;
                                                                        +------------------+------+----------+--------------+--------------------------------------------------------------+-----------------------------------------------------------------+---------+
                                                                        | Host             | Port | Status   | Leader count | Leader distribution                                          | Partition distribution                                          | Version |
                                                                        +------------------+------+----------+--------------+--------------------------------------------------------------+-----------------------------------------------------------------+---------+
                                                                        | "10.xxx.xxx.141" | 9779 | "ONLINE" | 15           | "ttt_20250613_001:5, ttt_20250711_001:5, ttt_20250723_001:5" | "ttt_20250613_001:15, ttt_20250711_001:15, ttt_20250723_001:15" | "3.0.2" |
                                                                        | "10.xxx.xxx.142" | 9779 | "ONLINE" | 15           | "ttt_20250613_001:5, ttt_20250711_001:5, ttt_20250723_001:5" | "ttt_20250613_001:15, ttt_20250711_001:15, ttt_20250723_001:15" |  |
                                                                        | "10.xxx.xxx.143" | 9779 | "ONLINE" | 15           | "ttt_20250613_001:5, ttt_20250711_001:5, ttt_20250723_001:5" | "ttt_20250613_001:15, ttt_20250711_001:15, ttt_20250723_001:15" | "3.0.2" |
                                                                        | "10.xxx.xxx.144" | 9779 | "ONLINE" | 0            | "No valid partition"                                         | "No valid partition"                                            |  |
                                                                        | "10.xxx.xxx.145" | 9779 | "ONLINE" | 0            | "No valid partition"                                         | "No valid partition"                                            |  |
                                                                        +------------------+------+----------+--------------+--------------------------------------------------------------+-----------------------------------------------------------------+---------+

                                                                        升级到 Nebula 3.2.x 版本以上即可。

                                                                        业务验证

                                                                        业务查询进行并发压测,确认 QPS 与时延等符合预期。

                                                                        扩容 Meta 节点

                                                                          前置条件检查

                                                                          1. 软件版本一致

                                                                          新节点需安装与现有集群一致的 NebulaGraph 3.0.2 版本(包括 graphd 进程版本一致)。

                                                                          2. 网络连通

                                                                          • 新节点到所有 Meta 节点的 9559 端口可通。
                                                                          • 新节点到 Storage 节点的 9779 端口可通。
                                                                          • 新节点与现有 Graph 节点之间互通(用于调试/监控)。

                                                                          3. 时间同步

                                                                          确保 NTP 正常工作,避免时钟漂移影响会话和 Raft.

                                                                          4. 资源分配

                                                                          CPU、内存满足现有 graphd 节点的配置。

                                                                          • 网络建议万兆或以上,低延迟。

                                                                          • SSD 数据盘配置。

                                                                          5. 主机初始化

                                                                          新节点安装与配置 storage

                                                                          1. 安装 NebulaGraph

                                                                          rpm 安装

                                                                            cd /data/server/
                                                                            mkdir -p /data/server/Nebula_Graph/{data,logs,pids}
                                                                            rpm -ivh --prefix=/data/server/Nebula_Graph/ nebula-graph-3.0.2.el8.x86_64.rpm
                                                                            ls -lshrt /data/server/Nebula_Graph/
                                                                              4.0K drwxr-xr-x 3 root root 4.0K Aug 14 14:48 share
                                                                              4.0K drwxr-xr-x 2 root root 4.0K Aug 14 14:48 scripts
                                                                              4.0K drwxr-xr-x 2 root root 4.0K Aug 14 14:48 bin
                                                                              4.0K drwxr-xr-x 2 root root 4.0K Aug 14 14:58 etc
                                                                              4.0K drwxr-xr-x 2 root root 4.0K Aug 14 15:05 pids
                                                                              4.0K drwxr-xr-x 2 root root 4.0K Aug 14 15:05 logs
                                                                              4.0K drwxr-xr-x 2 root root 4.0K Aug 14 15:05 data

                                                                              2. 编辑 metad 配置文件

                                                                              2.1 配置新节点

                                                                              配置文件路径一般在 /usr/local/nebula/etc/nebula-metad.conf
                                                                              (tar 包安装)或 /etc/nebula-metad.conf
                                                                              (RPM 安装)。

                                                                              可直接复用其他节点的配置项,仅需要修改 local_ip 
                                                                              为本地 IP 
                                                                              地址,同时需要将新增节点加入到meta_server_addrs
                                                                              配置项中,此处扩容10.xxx.xxx.144
                                                                              、10.xxx.xxx.145 
                                                                              两个 meta 
                                                                              节点。

                                                                                # 修改配置文件
                                                                                ssh 10.xxx.xxx.144
                                                                                sed -i "s,local_ip=10.xxx.xxx.141,local_ip=10.xxx.xxx.144,g"  /data/server/Nebula_Graph/etc/nebula-metad.conf
                                                                                sed -i "s%meta_server_addrs=10.xxx.xxx.141:9559,10.xxx.xxx.142:9559,10.xxx.xxx.143:9559%meta_server_addrs=10.xxx.xxx.141:9559,10.xxx.xxx.142:9559,10.xxx.xxx.143:9559,10.xxx.xxx.144:9559,10.xxx.xxx.145:9559%g"  /data/server/Nebula_Graph/etc/nebula-metad.conf
                                                                                  ssh 10.xxx.xxx.145
                                                                                  sed -i "s,local_ip=10.xxx.xxx.141,local_ip=10.xxx.xxx.145,g"  /data/server/Nebula_Graph/etc/nebula-metad.conf
                                                                                  sed -i "s%meta_server_addrs=10.xxx.xxx.141:9559,10.xxx.xxx.142:9559,10.xxx.xxx.143:9559%meta_server_addrs=10.xxx.xxx.141:9559,10.xxx.xxx.142:9559,10.xxx.xxx.143:9559,10.xxx.xxx.144:9559,10.xxx.xxx.145:9559%g"  /data/server/Nebula_Graph/etc/nebula-metad.conf
                                                                                    # 检查配置
                                                                                    cat /data/server/Nebula_Graph/etc/nebula-metad.conf | grep -Ei 'port=|meta_server_addrs=|local_ip=|log_dir=|meta_server_addrs=' --color

                                                                                    2.2 更新已有节点

                                                                                    现有所有 Meta 节点的配置文件 中 --meta_server_addrs
                                                                                     也必须同时更新,写入全部 5 个 IP,否则旧节点无法识别新节点。

                                                                                      ssh 10.xxx.xxx.141
                                                                                      ssh 10.xxx.xxx.142
                                                                                      ssh 10.xxx.xxx.143
                                                                                      sed -i "s%meta_server_addrs=10.xxx.xxx.141:9559,10.xxx.xxx.142:9559,10.xxx.xxx.143:9559%meta_server_addrs=10.xxx.xxx.141:9559,10.xxx.xxx.142:9559,10.xxx.xxx.143:9559,10.xxx.xxx.144:9559,10.xxx.xxx.145:9559%g"  /data/server/Nebula_Graph/etc/nebula-metad.conf
                                                                                      cat /data/server/Nebula_Graph/etc/nebula-metad.conf | grep -Ei 'port=|meta_server_addrs=|local_ip=|log_dir=|meta_server_addrs=' --color

                                                                                      更新配置后需要滚动重启所有 Meta 节点(一次重启一台,避免多数派丢失)。

                                                                                        # 一次重启一台,避免多数派丢失
                                                                                        ssh 10.xxx.xxx.141
                                                                                        ssh 10.xxx.xxx.142
                                                                                        ssh 10.xxx.xxx.143
                                                                                        su - edu-server
                                                                                        cd /data/server/Nebula_Graph/scripts
                                                                                        ./nebula.service  status metad
                                                                                        ./nebula.service  stop metad
                                                                                        ./nebula.service  status metad
                                                                                        sleep 30
                                                                                        ./nebula.service  status metad
                                                                                        ./nebula.service  start metad
                                                                                        ./nebula.service  status metad
                                                                                          nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p 'user_password' -e 'SHOW HOSTS META;'
                                                                                            (root@nebula) [(none)]> SHOW HOSTS META;
                                                                                            +------------------+------+----------+--------+--------------+---------+
                                                                                            | Host             | Port | Status   | Role   | Git Info Sha | Version |
                                                                                            +------------------+------+----------+--------+--------------+---------+
                                                                                            | "10.xxx.xxx.141" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                                                                            | "10.xxx.xxx.142" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                                                                            | "10.xxx.xxx.143" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                                                                            | "10.xxx.xxx.144" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                                                                            | "10.xxx.xxx.145" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                                                                            +------------------+------+----------+--------+--------------+---------+

                                                                                             启动 metad 服务并加入集群

                                                                                            在每台新节点上执行:

                                                                                              # 启动 graphd
                                                                                              cd /data/server/
                                                                                              chown -R edu-server:edu-server Nebula_Graph
                                                                                              cd /data/server/Nebula_Graph/scripts
                                                                                              su - edu-server
                                                                                              cd /data/server/Nebula_Graph/scripts
                                                                                              ./nebula.service  start metad
                                                                                              ./nebula.service  status metad

                                                                                               验证新节点是否成功加入

                                                                                              在任一已有的 Graph 节点上执行

                                                                                                # 进入控制台,确认新节点
                                                                                                nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p 'user_password' -e 'SHOW HOSTS META;'

                                                                                                你应该看到原有三台 + 新增两台节点,状态为 ONLINE

                                                                                                  +------------------+------+----------+--------+--------------+---------+
                                                                                                  | Host             | Port | Status   | Role   | Git Info Sha | Version |
                                                                                                  +------------------+------+----------+--------+--------------+---------+
                                                                                                  | "10.xxx.xxx.141" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                                                                                  | "10.xxx.xxx.142" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                                                                                  | "10.xxx.xxx.143" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                                                                                  | "10.xxx.xxx.144" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                                                                                  | "10.xxx.xxx.145" | 9559 | "ONLINE" | "META" | "4805f8c"    | "3.0.2" |
                                                                                                  +------------------+------+----------+--------+--------------+---------+

                                                                                                  观察 Raft 同步状态,在任一 Meta 节点服务器执行:

                                                                                                    curl "http://127.0.0.1:19559/raft_info"

                                                                                                    确认新节点日志追平,未出现长时间落后的 follower.

                                                                                                      # 查询集群版本一致性
                                                                                                      nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p 'user_password' -e 'SHOW HOSTS GRAPH;'
                                                                                                        +------------------+------+----------+---------+--------------+---------+
                                                                                                        | Host             | Port | Status   | Role    | Git Info Sha | Version |
                                                                                                        +------------------+------+----------+---------+--------------+---------+
                                                                                                        | "10.xxx.xxx.141" | 9669 | "ONLINE" | "GRAPH" | "4805f8c"    |         |
                                                                                                        | "10.xxx.xxx.142" | 9669 | "ONLINE" | "GRAPH" | "4805f8c"    | "3.0.2" |
                                                                                                        | "10.xxx.xxx.143" | 9669 | "ONLINE" | "GRAPH" | "4805f8c"    | "3.0.2" |
                                                                                                        | "10.xxx.xxx.144" | 9669 | "ONLINE" | "GRAPH" | "4805f8c"    |         |
                                                                                                        | "10.xxx.xxx.145" | 9669 | "ONLINE" | "GRAPH" | "4805f8c"    |         |
                                                                                                        +------------------+------+----------+---------+--------------+---------+
                                                                                                          nebula-console-linux-amd64-v3.0.0 -addr 10.xxx.xxx.144 -port 9669 -u root -p 'user_password' -e 'SHOW HOSTS STORAGE;'
                                                                                                            +------------------+------+----------+-----------+--------------+---------+
                                                                                                            | Host             | Port | Status   | Role      | Git Info Sha | Version |
                                                                                                            +------------------+------+----------+-----------+--------------+---------+
                                                                                                            | "10.xxx.xxx.141" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                                                                                            | "10.xxx.xxx.142" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    |         |
                                                                                                            | "10.xxx.xxx.143" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    | "3.0.2" |
                                                                                                            | "10.xxx.xxx.144" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    |         |
                                                                                                            | "10.xxx.xxx.145" | 9779 | "ONLINE" | "STORAGE" | "4805f8c"    |         |
                                                                                                            +------------------+------+----------+-----------+--------------+---------+

                                                                                                            业务验证

                                                                                                            业务查询进行并发压测,确认 QPS 与时延等符合预期。

                                                                                                            感谢 Zhi@Li 老师的分享,欢迎大家把自己的开发实战经验分享到社区,帮助到更多小伙伴的同时,还能收获社区送出的精美礼物哦~


                                                                                                            本文首发于 Zhi@Li 老师博客

                                                                                                            https://www.modb.pro/db/1978003356962533376



                                                                                                            ✦

                                                                                                            如果你觉得 NebulaGraph 能帮到你,或者你只是单纯支持开源精神,可以在 GitHub 上为 NebulaGraph 点个 Star!

                                                                                                            每一个 Star 都是对我们的支持和鼓励✨

                                                                                                            GitHub:https://github.com/vesoft-inc/nebula

                                                                                                            官网:https://www.nebula-graph.com.cn/

                                                                                                            论坛:https://discuss.nebula-graph.com.cn/


                                                                                                            ✦

                                                                                                            ✦


                                                                                                            扫码添加

                                                                                                             可爱星云

                                                                                                            技术交流

                                                                                                            资料分享

                                                                                                            NebulaGraph 用户案例

                                                                                                            ✦

                                                                                                            Why Graph Database?⬇️

                                                                                                            复杂关系场景,图数据库为何是首选?

                                                                                                            风控场景:普适智能|中证数智|BlockSec|携程|Airwallex|众安保险|中国移动|Akulaku|邦盛科技|360数科|BOSS直聘|金蝶征信|快手|青藤云安全

                                                                                                            平台建设:博睿数据|携程|众安科技|微信|OPPO|vivo|美团|百度爱番番|携程金融|普适智能|BIGO

                                                                                                            知识图谱:普适智能|中证数智|中医药大学|企查查|腾讯音乐|中科大脑|泰康在线|苏宁|微澜|同花顺|携程酒店

                                                                                                            数据血缘:波克城市|微众银行|携程金融

                                                                                                            智能运维:BOSS直聘|58同城|中亦安图

                                                                                                            供应链:京东物流|震坤行

                                                                                                            营销推荐:阿里妈妈

                                                                                                            GraphRAG:中科数睿

                                                                                                            ✦

                                                                                                            ✦

                                                                                                            ✨ NebulaGraph 推荐阅读

                                                                                                            文章转载自NebulaGraph,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                                                            评论