您可在Linux机器上安装嬴图Powerhouse (v5)。本指南将介绍如何使用Docker和自动化部署脚本来部署一个集群。
集群概述
嬴图Powerhouse (v5)专为高性能分布式图处理而设计,采用了模块化、基于角色的架构,包含以下四大组件:
- Name服务器:协调客户端请求,管理集群内路由。
- Meta服务器:管理持久化元数据和系统配置。
- Shard服务器:存储和处理图数据,支持水平扩展。
- HDC(高密度计算)服务器(可选):执行高级分析和大规模计算任务。
所有服务器均通过内网进行通信。为实现高可用性和容错,每种服务器都可进行冗余部署。
如需了解架构详情,请见嬴图Powerhouse (v5)。
系统要求
在嬴图集群部署各服务器前,需满足以下硬件和软件要求:
操作系统
- CentOS 9及以上版本,Ubuntu 18.04及以上版本,或其他兼容的Linux发行版
硬件要求
- CPU:x86_64或ARM64(aarch64)架构;最低4核处理器
- 内存:最低8 GB RAM(建议16 GB或更高)
- 磁盘:建议使用SSD;至少100 GB可用磁盘空间
网络配置
- 静态IP地址
- 外部服务端口:
3050
,60061
- 集群内部通信端口:
51060
,51061
,56555
,41061
,41062
及其他端口(具体情况取决于服务节点数量和集群配置)
所有必需的内部端口必须开放,以确保节点间通信不受限制。
前置软件要求
- Docker引擎(建议使用最新稳定版本)
- Shell环境(如Bash)
- 防火墙
- SSH
其他要求
- 所有集群节点间必须配置免密SSH(基于密钥的安全认证)
- 设置防火墙规则,需允许所有必要端口的流量
- 部署操作必须由root用户或拥有sudo权限的用户执行
部署流程
以下部署流程使用ultipa.sh
脚本进行。点击了解脚本详情。
1. 编辑配置文件
ultipa.sh
脚本可上传到集群的某个节点上执行,也可在专用的部署主机上运行。
使用以下命令生成样本配置文件:
./ultipa.sh cluster genconf
该命令可在ultipa.sh
同目录下创建名为example.sh
的配置脚本。
根据你的实际环境编辑example.sh
:
变量 |
描述 |
---|---|
CLUSTER_NAME |
集群名称 |
LICENSE_FILE_PATH ,ALGO_LICENSE_FILE_PATH |
许可证文件所在路径 |
DOCKER_MOUNT_PATH |
Docker卷的挂载路径 |
SSH_USER ,SSH_PRIVATE_KEY |
用于访问集群节点的SSH用户名和私钥 |
META_IMAGE ,SHARD_IMAGE ,NAME_IMAGE ,HDC_IMAGE |
需要从镜像仓库拉取的Docker镜像名称 |
META_IMAGE_TAR ,SHARD_NAME_IMAGE_TAR ,HDC_IMAGE_TAR |
本地Docker镜像TAR文件路径(请联系support@ultipa.com获取所需镜像) |
NAME_SERVER_PUBLIC_START_PORT ,NAME_SERVER_LIST ,META_SERVER_START_PORT ,META_SERVER_LIST ,HDC_SERVER_START_PORT ,HDC_SERVER_LIST ,SHARD_SERVER_START_PORT ,SHARD_SERVER_LIST |
服务器IP与端口:
|
META_CONFIG ,NAME_CONFIG ,SHARD_CONFIG ,HDC_CONFIG |
以键值对形式自定义配置各服务器。可将多个键值对写在同一行,以空格分隔;也可分行书写。点击此处查看各服务器支持的完整配置项列表 |
示例:
CLUSTER_NAME="ultipa-v5-cluster"
LICENSE_FILE_PATH="./ultipa.lic"
ALGO_LICENSE_FILE_PATH="./ultipa_algo.lic"
DOCKER_MOUNT_PATH="/data/docker_mounts"
SSH_USER="root"
SSH_PRIVATE_KEY="/root/.ssh/id_rsa"
META_IMAGE="<repository>/<image>:<tag>"
SHARD_IMAGE="<repository>/<image>:<tag>"
NAME_IMAGE="<repository>/<image>:<tag>"
HDC_IMAGE="<repository>/<image>:<tag>"
META_IMAGE_TAR=""
SHARD_NAME_IMAGE_TAR=""
HDC_IMAGE_TAR=""
NAME_SERVER_PUBLIC_START_PORT="61060"
NAME_SERVER_LIST="192.168.189.129"
META_SERVER_START_PORT="51060"
META_SERVER_LIST="192.168.189.130"
HDC_SERVER_START_PORT="56555"
HDC_SERVER_LIST="192.168.189.128"
SHARD_SERVER_START_PORT="41061"
SHARD_SERVER_LIST="192.168.189.131 192.168.189.132, 192.168.189.133"
META_CONFIG=""
NAME_CONFIG=""
SHARD_CONFIG=""
HDC_CONFIG=""
2. 上传许可证文件
将嬴图许可证文件ultipa.lic
和ultipa_algo.lic
上传到example.sh
脚本中LICENSE_FILE_PATH
和ALGO_LICENSE_FILE_PATH
指定的目录下。
3. 部署集群
部署所有服务器(Meta,Name,Shard,HDC):
./ultipa.sh cluster create --config example.sh
4. 验证集群状态
检查所有服务是否正在运行:
./ultipa.sh cluster stat --config example.sh
预期结果:
------- meta status ------- :
192.168.189.130 51060: root 78 1 2 07:18 ? 00:00:48 ./meta-server
------- name status ------- :
192.168.189.129 61061 :root 79 1 2 07:18 ? 00:00:44 ./name-server
------- shard status ------- :
192.168.189.131 41061 1 : root 81 1 2 07:20 ? 00:00:52 ./shard-server
192.168.189.132 41063 1 : root 79 1 2 07:20 ? 00:00:51 ./shard-server
192.168.189.133 41065 2 : root 80 1 2 07:20 ? 00:00:47 ./shard-server
------- hdc status ------- :
192.168.189.128 56555 :root 81 1 2 07:19 ? 00:00:44 ./hdc-server
5. 访问集群
集群部署完成后,您可通过Name服务器端点连接到集群(如http://192.168.1.101:61060
)。
为了更方便地管理图数据库,您还可以部署嬴图Manager。请参阅指南安装嬴图Manager。
部署脚本
嬴图团队提供了部署脚本ultipa.sh
,用于自动化集群环境的安装与配置。点击此处下载该脚本。
以下为ultipa.sh
部署脚本中的可用命令:
图管理命令
./ultipa.sh image upload --config example.sh
- 上传Docker镜像(Meta/Name/Shard/HDC)至所有集群节点,用于离线部署。必须在
example.sh
中设置对应的*_IMAGE_TAR
变量。
./ultipa.sh image info --config example.sh
- 显示Meta、Name、Shard和HDC服务器中的镜像名称/标签。
./ultipa.sh image delete --config example.sh
- 仅删除
example.sh
中指定的嬴图镜像。
./ultipa.sh image DELALL --config example.sh
- 危险操作!删除所有节点上来自
docker-registry.ultipa-inc.org:5000
的镜像。
集群生命周期命令
./ultipa.sh cluster create --config example.sh
- 执行集群完整部署:为Meta、Name、Shard和HDC服务器创建容器;配置各服务器;启动集群;注册Shard服务器和HDC服务器
./ultipa.sh cluster start --server name --config example.sh
- 启动指定类型服务器(如
--server shard
命令)或删除--server
以启动全部服务器。
./ultipa.sh cluster stop --server name --config example.sh
- 正常关闭指定类型服务器(如
--server hdc
命令)或删除--server
以关闭所有服务器。
./ultipa.sh cluster destroy --config example.sh
- 高风险操作!删除所有容器及数据目录。
./ultipa.sh cluster update --config example.sh
- 使用
example.sh
脚本中指定的镜像来更新所有容器。此过程会关闭集群,使用新镜像重新创建容器,然后重启集群。
集群配置与检查
./ultipa.sh cluster reconfig --config example.sh
- 在不重启集群的情况下,应用
example.sh
中的配置更改。修改*_CONFIG
变量(如META_CONFIG
)后使用此命令。该命令会将指定的配置项更新到对应类型服务器的所有配置文件中。
./ultipa.sh cluster info --config example.sh
- 展示集群连接详情。
./ultipa.sh cluster stat --config example.sh
- 检查所有服务器的运行状态。
./ultipa.sh cluster addhdc --config example.sh
- 向集群增加新的HDC服务器。修改
example.sh
中的HDC_SERVER_LIST
变量后使用此命令。
./ultipa.sh cluster addshard --config example.sh
- 向已有集群增加新的Shard服务器。修改
example.sh
中的SHARD_SERVER_LIST
变量后使用该命令。
实用工具命令
./ultipa.sh cluster genconf
- 生成带有默认值的
example.sh
模板文件。
./ultipa.sh lic upload --config example.sh
- 将更新后的
ultipa.lic
和ultipa_algo.lic
上传到Meta服务器。
配置向导
各类服务器的配置文件存放在路径/data/docker_mounts/<container_name>/conf/
下,分别为meta-server.config
、name-server.config
、shard-server.config
和hdc-server.config
。
仅当重启相应服务器后,对配置项的修改才能生效,除非支持热更新。
Meta服务器
服务器
项目 |
默认值 |
描述 |
---|---|---|
addr |
127.0.0.1:50061 |
Meta服务器监听地址 |
dbpath |
data |
数据库存储文件目录 |
license |
./resource/cert/ultipa.lic |
服务器证书存储目录 |
algo_license |
./resource/cert/ultipa_algo.lic |
算法证书存储目录 |
db_backup_path |
backup_data |
备份文件存储目录。注意:如果该目录未挂载,备份文件将在下次更新时丢失 |
real_time_sync_meta_to_shards |
true |
若设置为true ,Meta服务器自动与Shard服务器同步。若为false ,仅当heartbeat_sync_meta_to_shards 为true 时,才会在下一次心跳同步数据 |
heartbeat_sync_meta_to_shards |
false |
若设置为true ,Meta服务器在心跳周期中检测到过期版本时,会向Shard服务器发送快照。若为false ,则不会在心跳周期发送快照 |
日志
项目 |
默认值 |
描述 |
---|---|---|
level |
3 |
日志等级:1 = fatal,2 = error,3 = info,4 = debug |
stdout |
true |
是否将日志输出到标准输出 |
color |
true |
是否在终端显示颜色 |
file_retain_counts |
5 |
待保留的日志文件数量 |
log_file_size |
200 |
单个日志文件的最大大小(单位:MB) |
BaseDB
项目 |
默认值 |
描述 |
---|---|---|
db_buffer_size |
512 |
内存表缓存大小(单位:MB)。建议使用默认设置 |
HTAP
项目 |
默认值 |
描述 |
---|---|---|
conf |
127.0.0.1:50061,127.0.0.1:50062,127.0.0.1:50063 |
所有副本对外地址,由逗号分隔。所有副本的conf 配置必须保持一致 |
election_timeout |
5000 |
选举超时时间(单位:毫秒),可设置5000 -30000+ 。如果集群压力较大,适当增加选举超时时间有助于缓解心跳延迟问题 |
snapshot_interval |
3600 |
日志压缩间隔(单位:秒) |
Name服务器
服务器
项目 |
默认值 |
热更新 |
描述 |
---|---|---|---|
addr |
0.0.0.0:60061 |
N | Name服务器监听地址。嬴图客户端使用该地址连接 |
private_addr |
127.0.0.1:60161 |
N | Name服务器和Shard服务器内部通讯地址。所有Shard服务器都需要访问该地址 |
id |
1 |
N | Name服务器ID,取值范围为[1–255] 。每个Name服务器必须拥有唯一ID |
meta_server_addrs |
127.0.0.1:50061,127.0.0.1:50062,127.0.0.1:50063 |
N | Meta集群地址 |
data_path |
data |
N | 数据文件存储目录 |
worker_num |
10 |
N | 服务线程数。总线程数 = worker_num * 2 |
slow_query |
5 |
Y | 慢查询日志记录阈值(单位:秒) |
authorized |
true |
N | 是否开启鉴权模式,包括账号密码和权限验证 |
use_ssl |
false |
N | 是否启用SSL |
ssl_key_path |
./resource/cert/ultipa.key |
N | SSL私钥路径。启用SSL时,此项为必填项 |
ssl_crt_path |
./resource/cert/ultipa.crt |
N | SSL证书路径。启用SSL时,此项为必填项 |
mem_threshold_percent |
80 |
Y | 内存使用上限(%)。超出上限时,开启内存保护并终止请求 |
max_rpc_msgsize |
4 |
N | RPC消息最大大小(单位:MB) |
max_rpc_batchnum |
5000 |
N | RPC消息各批次的最大条目数 |
enable_meta_cache |
false |
Y | 启用后,Meta数据将缓存在Name服务器上,不再实时刷新。DDL和DCL变更将在一个心跳周期后同步,但建议您等待两个心跳周期再调用变更后的数据,以免报错。与此同时,Name服务器还会从Meta服务器实时同步用户信息,以支持本地处理登录认证和权限校验 |
heartbeat_interval_s |
3 |
N | 心跳周期(单位:秒) |
default_timeout |
15 |
N | 默认请求超时时间(单位:秒),也可在SDK请求接口中设置 |
日志
项目 |
默认值 |
描述 |
---|---|---|
level |
3 |
日志等级:1 = fatal,2 = error,3 = info,4 = debug |
stdout |
true |
是否将日志输出到标准输出 |
color |
true |
是否在终端显示颜色 |
file_retain_counts |
5 |
待保留的日志文件数量 |
log_file_size |
200 |
单个日志文件的最大大小(单位:MB) |
网络
项目 |
默认值 |
描述 |
---|---|---|
brpc_max_body_size |
2147483648 |
BRPC信息最大容量(单位:字节) |
load_balance_read_only_workloads |
false |
关闭时,读请求仅发送至Shard服务器主节点;开启时,读请求在Shard服务器所有副本间负载均衡 |
shard_client_timeout_ms |
900000 |
连接Shard服务器的超时时间(单位:毫秒) |
meta_client_timeout_ms |
900000 |
连接Meta服务器的超时时间(单位:毫秒) |
Shard服务器
服务器
项目 |
默认值 |
描述 |
---|---|---|
addr |
127.0.0.1:40061 |
Shard服务器监听地址 |
stream_addr |
$addr.ip:$addr.port+100 |
Stream服务监听地址 |
shard_id |
1 |
分片ID,取值范围为[1–255] 。 每个分片必须拥有唯一ID |
meta_server_addrs |
127.0.0.1:50061,127.0.0.1:50062,127.0.0.1:50063 |
Meta集群地址 |
dbpath |
shard_data |
数据库存储文件目录 |
db_backup_path |
backup_data |
备份文件存储目录 |
resource_path |
resource |
资源目录 |
slow_query |
5 |
慢查询记录阈值(单位:秒) |
mem_threshold_percent |
80 |
内存使用上限(%)。超出上限时,开启内存保护并终止请求 |
heartbeat_interval_s |
3 |
心跳周期(单位:秒) |
日志
项目 |
默认值 |
描述 |
---|---|---|
level |
3 |
日志等级:1 = fatal,2 = error,3 = info,4 = debug |
stdout |
true |
是否将日志输出到标准输出 |
color |
true |
是否在终端显示颜色 |
file_retain_counts |
5 |
待保留的日志文件数量 |
log_file_size |
200 |
单个日志文件的最大大小(单位:MB) |
存储引擎
项目 |
默认值 |
描述 |
---|---|---|
db_buffer_size |
512 |
内存表缓存大小(单位:MB)。建议使用默认设置 |
max_db_buffer_number |
5 |
内存表的最大数量。增加该项(例如设置为10 )可加速批量导入 |
enable_block_cache |
true |
启用块缓存 |
block_cache_size |
1024 |
块缓存大小(单位:MB)。仅当enable_block_cache=true 时生效。建议分配系统可用内存的30%-50% |
enable_prefix_bloom_filter |
true |
启用时可以提升读取性能,但会增加内存占用 |
enable_partition_index_filter |
false |
启用时可降低Bloom Filter的内存占用,但在某些情况下可能会降低读取性能 |
disable_auto_compactions |
false |
关闭自动压缩。建议在大规模导入数据时将其设置为true |
disable_page_cache |
false |
块缓存设置足够大时,可以关闭页缓存 |
node_key_mapping_num |
5000000 |
缓存的点键(_id )数量 |
edge_key_mapping_num |
5000000 |
缓存的边键(_uuid )数量 |
计算引擎
项目 |
默认值 |
描述 |
---|---|---|
engine_type |
default |
计算引擎类型:default 或speed |
enable_graph_cache |
false |
开启图遍历缓存以提升图遍历性能,但会增加内存占用 |
graph_cache_size |
1024 | 图缓存大小(单位:MB);仅当enable_graph_cache=true 时生效。内存充足时,建议增大该值 |
graph_cache_bucket_number |
1024 |
图缓存桶数量;仅当enable_graph_cache=true 时生效 |
graph_cache_max_memory_policy |
lru |
达到最大内存时,缓存逐出策略,包括:
|
enable_node_cache |
false |
启用时,加载到计算引擎的点属性会加载到缓存中(仅适用于default 计算引擎) |
enable_edge_cache |
false |
启用时,加载到计算引擎的边属性会加载到缓存中(仅适用于default 计算引擎) |
node_cache_size |
1024 |
点属性缓存大小(单位:MB);仅当enable_node_cache=true 时生效。 内存充足时,建议增大该值 |
edge_cache_size |
1024 |
边属性缓存大小(单位:MB);仅当enable_edge_cache=true 时生效。 内存充足时,建议增大该值 |
default_timeout |
15 |
请求超时时间(单位:秒)。各SDK可在每次请求中覆盖此设置 |
default_max_depth |
30 |
最大搜索深度;推荐使用默认设置的30层 |
Pregel
项目 |
默认值 |
描述 |
---|---|---|
num_send_workers |
-1 |
Pregel计算中用于发送消息的工作线程数量 |
HTAP
项目 |
默认值 |
描述 |
---|---|---|
conf |
127.0.0.1:40061,127.0.0.1:40062,127.0.0.1:40063 |
所有副本对外地址,由逗号分隔。所有副本的conf 配置必须保持一致 |
election_timeout |
5000 |
选举超时时间(单位:毫秒),可设置5000 -30000+ 。如果集群压力较大,适当增加选举超时时间有助于缓解心跳延迟问题 |
snapshot_interval |
3600 |
日志压缩间隔(单位:秒) |
网络
项目 |
默认值 |
描述 |
---|---|---|
brpc_max_body_size |
2147483648 |
BRPC信息最大容量(单位:字节) |
shard_client_timeout_ms |
900000 |
连接Shard服务器的超时时间(单位:毫秒) |
meta_client_timeout_ms |
900000 |
连接Meta服务器的超时时间(单位:毫秒) |
HDC服务器
服务器
项目 |
默认值 |
描述 |
---|---|---|
addr |
0.0.0.0:55555 |
HDC服务器监听地址 |
server_name |
hdc-server-1 |
HDC服务器名称 |
meta_server_addrs |
127.0.0.1:50061,127.0.0.1:50062,127.0.0.1:50063 |
Meta集群地址 |
data_path |
data |
数据文件存储目录 |
worker_num |
10 |
服务线程数。建议设置为CPU核数 |
cache_load_size |
1000000 |
每批次加载到HDC缓存中的点数量。最大值为10,000,000 |
cache_load_pool_size |
5 |
缓存池数量,可根据需要调整以平衡内存使用与性能 |
slow_query |
5 |
慢查询日志记录阈值(单位:秒) |
authorized |
true |
是否开启鉴权模式,包括账号密码和权限验证 |
use_ssl |
false |
是否启用SSL |
ssl_key_path |
./resource/cert/ultipa.key |
SSL私钥路径。启用SSL时,此项为必填项 |
ssl_crt_path |
./resource/cert/ultipa.crt |
SSL证书路径。启用SSL时,此项为必填项 |
mem_threshold_percent |
80 |
内存使用上限(%)。超出上限时,开启内存保护并终止请求 |
max_rpc_msgsize |
4 |
RPC消息最大大小(单位:MB) |
max_rpc_batchnum |
5000 |
RPC消息各批次的最大条目数 |
日志
项目 |
默认值 |
描述 |
---|---|---|
level |
3 |
日志等级:1 = fatal,2 = error,3 = info,4 = debug |
stdout |
true |
是否将日志输出到标准输出 |
color |
true |
是否在终端显示颜色 |
file_retain_counts |
5 |
待保留的日志文件数量 |
log_file_size |
200 |
单个日志文件的最大大小(单位:MB) |
计算
项目 |
默认值 |
描述 |
---|---|---|
default_timeout |
15 |
默认请求超时时间(单位:秒) |
default_max_depth |
30 |
最大搜索深度;推荐使用默认设置的30层 |
网络
项目 |
默认值 |
描述 |
---|---|---|
brpc_max_body_size |
2147483648 |
BRPC信息最大容量(单位:字节) |
shard_client_timeout_ms |
900000 |
连接Shard服务器的超时时间(单位:毫秒) |
meta_client_timeout_ms |
900000 |
连接Meta服务器的超时时间(单位:毫秒) |