技术分享
NebulaGraph 扩容|丝滑扩容Graph、Storage 与 Meta 服务
导读:本文来自社区开发者 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 个 / 或加强单机)
大规模集群:主机/分区数量非常多导致心跳风暴、元数据读负载过高(
metad
CPU 持续高位)。频繁变更:大量 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 老师博客