Storage 负载均衡Graph
用户可以使用BALANCE
语句平衡分片和 Raft leader 的分布,或者删除冗余的 Storage 服务器。
均衡分片分布Graph
BALANCE DATA
语句会开始一个任务,将 NebulaGraph 集群中的分片平均分配到所有 Storage 服务器。通过创建和执行一组子任务来迁移数据和均衡分片分布。
Danger
不要停止集群中的任何机器或改变机器的 IP 地址,直到所有子任务完成,否则后续子任务会失败。
示例Graph
以横向扩容 NebulaGraph 为例,集群中增加新的 Storage 服务器后,新服务器上没有分片。
-
执行命令 Graph 检查分片的分布。
nebual> SHOW HOSTS; +-------------+------+----------+--------------+-----------------------------------+------------------------+ | Host | Port | Status | Leader count | Leader distribution | Partition distribution | +-------------+------+----------+--------------+-----------------------------------+------------------------+ | "storaged0" | 9779 | "ONLINE" | 4 | "basketballplayer:4" | "basketballplayer:15" | | "storaged1" | 9779 | "ONLINE" | 8 | "basketballplayer:8" | "basketballplayer:15" | | "storaged2" | 9779 | "ONLINE" | 3 | "basketballplayer:3" | "basketballplayer:15" | | "storaged3" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | | "storaged4" | 9779 | "ONLINE" | 0 | "No valid partition" | "No valid partition" | | "Total" | | | 15 | "basketballplayer:15" | "basketballplayer:45" | +-------------+------+----------+--------------+-----------------------------------+------------------------+
-
执行命令
BALANCE DATA
将所有分片均衡分布。nebula> BALANCE DATA; +------------+ | ID | +------------+ | 1614237867 | +------------+
-
根据返回的任务 ID,执行命令
BALANCE DATA <balance_id>
检查任务状态。nebula> BALANCE DATA 1614237867; +--------------------------------------------------------------+-------------------+ | balanceId, spaceId:partId, src->dst | status | +--------------------------------------------------------------+-------------------+ | "[1614237867, 11:1, storaged1:9779->storaged3:9779]" | "SUCCEEDED" | | "[1614237867, 11:1, storaged2:9779->storaged4:9779]" | "SUCCEEDED" | | "[1614237867, 11:2, storaged1:9779->storaged3:9779]" | "SUCCEEDED" | ... | "Total:22, Succeeded:22, Failed:0, In Progress:0, Invalid:0" | 100 | +--------------------------------------------------------------+-------------------+
-
等待所有子任务完成,负载均衡进程结束,执行命令
SHOW HOSTS
确认分片已经均衡分布。Note
BALANCE DATA
不会均衡 leader 的分布。均衡 leader 请参见Graph。nebula> SHOW HOSTS; +-------------+------+----------+--------------+-----------------------------------+------------------------+ | Host | Port | Status | Leader count | Leader distribution | Partition distribution | +-------------+------+----------+--------------+-----------------------------------+------------------------+ | "storaged0" | 9779 | "ONLINE" | 4 | "basketballplayer:4" | "basketballplayer:9" | | "storaged1" | 9779 | "ONLINE" | 8 | "basketballplayer:8" | "basketballplayer:9" | | "storaged2" | 9779 | "ONLINE" | 3 | "basketballplayer:3" | "basketballplayer:9" | | "storaged3" | 9779 | "ONLINE" | 0 | "No valid partition" | "basketballplayer:9" | | "storaged4" | 9779 | "ONLINE" | 0 | "No valid partition" | "basketballplayer:9" | | "Total" | | | 15 | "basketballplayer:15" | "basketballplayer:45" | +-------------+------+----------+--------------+-----------------------------------+------------------------+
如果有子任务失败,请重新执行BALANCE DATA
。如果重做负载均衡仍然不能解决问题,请到 Graph寻求帮助。
停止负载均衡任务Graph
停止负载均衡任务,请执行命令BALANCE DATA STOP
。
- 如果没有正在执行的负载均衡任务,会返回错误。
- 如果有正在执行的负载均衡任务,会返回停止的任务 ID(
balance_id
)。
BALANCE DATA STOP
不会停止正在执行的子任务,而是取消所有后续子任务。用户可以执行命令BALANCE DATA <balance_id>
检查停止的任务状态。
一旦所有子任务都完成或停止,用户可以再次执行命令BALANCE DATA
。
- 如果前一个负载均衡任务的任何一个子任务失败,NebulaGraph 会重新启动之前的负载均衡任务。
- 如果前一个负载均衡任务的任何一个子任务都没有失败,NebulaGraph 会启动一个新的的负载均衡任务。
重置负载均衡任务Graph
如果停止负载均衡任务后重新执行仍然失败,可以尝试用命令BALANCE DATA RESET PLAN
重置负载均衡任务,该操作会清空旧的任务。之后再使用BALANCE DATA
命令,会新建负载均衡任务,而不是执行旧的任务。
移除 Storage 服务器Graph
移除指定的 Storage 服务器来缩小集群规模,可以使用命令BALANCE DATA REMOVE <host_list>
。
示例Graph
如果需要移除以下两台 Storage 服务器。
服务器名称 | IP 地址 | 端口 |
---|---|---|
storage3 | 192.168.0.8 | 9779 |
storage4 | 192.168.0.9 | 9779 |
请执行如下命令:
BALANCE DATA REMOVE 192.168.0.8:9779,192.168.0.9:9779;
NebulaGraph 将启动一个负载均衡任务,迁移 storage3 和 storage4 中的分片,然后将服务器从集群中移除。
Note
已下线节点状态会显示为 OFFLINE。该记录一天后删除,或更改 meta 配置项 removed_threshold_sec
。
均衡 leader 分布Graph
BALANCE DATA
只能均衡分片分布,不能均衡 Raft leader 分布。用户可以使用命令BALANCE LEADER
均衡 leader 分布。
示例Graph
nebula> BALANCE LEADER;
用户可以执行SHOW HOSTS
检查结果。
nebula> SHOW HOSTS;
+-------------+------+----------+--------------+-----------------------------------+------------------------+
| Host | Port | Status | Leader count | Leader distribution | Partition distribution |
+-------------+------+----------+--------------+-----------------------------------+------------------------+
| "storaged0" | 9779 | "ONLINE" | 3 | "basketballplayer:3" | "basketballplayer:9" |
| "storaged1" | 9779 | "ONLINE" | 3 | "basketballplayer:3" | "basketballplayer:9" |
| "storaged2" | 9779 | "ONLINE" | 3 | "basketballplayer:3" | "basketballplayer:9" |
| "storaged3" | 9779 | "ONLINE" | 3 | "basketballplayer:3" | "basketballplayer:9" |
| "storaged4" | 9779 | "ONLINE" | 3 | "basketballplayer:3" | "basketballplayer:9" |
| "Total" | | | 15 | "basketballplayer:15" | "basketballplayer:45" |
+-------------+------+----------+--------------+-----------------------------------+------------------------+
Caution
在 NebulaGraph 2.6.1 中,Leader 切换会导致短时的大量请求错误(Storage Error E_RPC_FAILURE
),处理方法见 Graph。