导读:本文来自社区开发者 Zhi@Li 的扩容实践,手把手教大家搞定 Graph 服务、Storage 服务和 Meta 服务扩容~
什么时候需要扩容?
总览
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 个 / 或加强单机)
-
大规模集群:主机/分区数量非常多导致心跳风暴、元数据读负载过高(
metadCPU 持续高位)。 -
频繁变更:大量 schema 变更或频繁
BALANCE操作期间,Raft WAL/复制负载明显偏高。 -
Raft 落后或Meta RPC 队列阻塞:元数据读写排队时间增大,
metad磁盘 IO/延迟居高。 -
容错要求提高:跨 AZ/机房需要更高的多数派存活概率。
扩容实践
-
保持奇数副本(3/5),优先3 节点即可满足大多数场景;若上面症状长期存在,再扩到 5 节点。
-
优先纵向加配:给
metad上更快的 CPU/盘(Raft WAL 对延迟敏感),独占网卡与存储,避免与 storaged 混布高 IO。 -
拓扑:跨可用区布局 metad,多数派可用优先;避免把所有
metad堆在同一个故障域。
二、扩容实操参考
(一)扩容 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 老师博客

