Storage 配置
本文介绍 storaged
配置文件。配置文件默认在 /usr/local/nebula/etc/
目录下。如果您已指定 Nebula Graph 安装路径,则配置文件目录为 $pwd/nebula/etc/
。
*.default
文件为日常调试使用,也是服务启动时默认使用的配置文件*.production
文件为推荐生产时使用的的文件,生产时请去掉.production
后缀
Basics 基础配置
属性名 | 默认值 | 说明 |
---|---|---|
daemonize | true | 作为 daemon 进程运行 |
pid_file | “pids/nebula-storaged.pid” | 进程 PID 文件 |
logging 日志相关
属性名 | 默认值 | 说明 | 动态修改 |
---|---|---|---|
log_dir | logs (也即 /usr/local/nebula/logs ) | storaged 日志文件存放路径,建议与 data_path 放不同硬盘 | |
minloglevel | 0 | 对应的日志级别分别为 INFO(DEBUG),WARNING,ERROR,FATAL。通常在调试环境设置为 0,生产环境设置为 1,设置为 4 不打印任何日志。 | UPDATE CONFIGS 命令修改,立刻生效 |
v | 0 | 0-4: 当 minloglevel 设置为 0 时,可以进一步设置调试日志的详细程度,值越大越详细 | UPDATE CONFIGS 命令修改,立刻生效 |
logbufsecs | 0 (秒) | 日志缓存时间 | UPDATE CONFIGS 命令修改,立刻生效 |
slow_op_threshhold_ms | 50 (毫秒) | 慢操作和慢查询需要打印日志的阈值 | UPDATE CONFIGS 命令修改,立刻生效 |
例如,下面命令可以增加 storage 的日志详细程度 v=1.
nebula> UPDATE CONFIGS storage:v=1;
networking 网络通信相关
属性名 | 默认值 | 说明 | 动态修改 |
---|---|---|---|
meta_server_addrs | “127.0.0.1:45500” | meta server 地址列表,格式为 ip1:port1, ip2:port2, ip3:port3 | |
port | 44500 | RPC 监听端口 | |
reuse_port | true | 开启内核(>3.9) SO_REUSEPORT 选项 | |
ws_http_port | 12000 | HTTP 协议监听端口 (内部使用) | |
ws_h2_port | 12002 | HTTP/2 协议监听端口 (内部使用) | |
ws_ip | “127.0.0.1” | web service 绑定地址 | |
heartbeat_interval_secs | 10 (秒) | 与 meta service 的心跳,需和 nebula-meta.conf 文件中的该项一致 | UPDATE CONFIGS 命令修改,下个心跳周期生效 |
raft_heartbeat_interval_secs | 5 (秒) | RAFT 选举通信超时时间 | 修改配置文件重启 |
raft_rpc_timeout_ms | 500 (ms) | RAFT RPC 通信超时 | 修改配置文件重启 |
注意: meta_server_addrs
参数中推荐使用实际 IP,127.0.0.1
有时不会被正确解析。
storage 数据持久化设置
属性名 | 默认值 | 说明 |
---|---|---|
data_path | data/storage (也即 /usr/local/nebula/data/storage/ ) | 本机数据持久化的根目录。 每个 partition 对应一个子目录。 |
多块硬盘时可以逗号分隔多个目录,每个目录对应一个 Rocksdb 实例,以有更好的并发能力。例如
--data_path=/disk1/storage/,/disk2/storage/,/disk3/storage/
RocksDB Options
属性名 | 默认值 | 说明 | 动态修改 |
---|---|---|---|
rocksdb_batch_size | 4096 (B) | Batch 写 | |
rocksdb_block_cache | 1024 (MB) | block cache 大小。建议为本机内存的1/3 | |
rocksdb_disable_wal | true | 使用 Rocksdb 的wal。默认使用 raft wal | |
wal_ttl | 14400 (秒) | RAFT wal 保留时间 | UPDATE CONFIGS 命令修改,立刻生效 |
rocksdb_db_options | {} | json 类型,其中每个参数 key 和 value 均为 string 格式。解释见下 | UPDATE CONFIGS 命令修改,整个json覆盖,立刻生效 |
rocksdb_column_family_options | {} | json 类型,其中每个参数 key 和 value 均为 string 格式。解释见下 | UPDATE CONFIGS 命令修改,整个json覆盖,立刻生效 |
rocksdb_block_based_table_options | {} | json 类型,其中每个参数 key 和 value 均为 string 格式。解释见下 | UPDATE CONFIGS 命令修改,整个json覆盖,立刻生效 |
rocksdb_db_options
max_total_wal_size
delete_obsolete_files_period_micros
max_background_jobs
stats_dump_period_sec
compaction_readahead_size
writable_file_max_buffer_size
bytes_per_sync
wal_bytes_per_sync
delayed_write_rate
avoid_flush_during_shutdown
max_open_files
enable_write_thread_adaptive_yield
max_subcompactions -- level0 到 level1 的 compact 启用多线程。默认为 1,动态修改重启后生效
max_background_jobs -- 使用多线程进行 compact。默认为 1,动态修改重启后生效
以上参数都可通过 UPDATE CONFIGS
语法进行动态修改,也可以写在本地配置文件中。具体作用和修改是否需要重启请参考 RocksDB 手册。
rocksdb_column_family_options
write_buffer_size
max_write_buffer_number
level0_file_num_compaction_trigger
level0_slowdown_writes_trigger
level0_stop_writes_trigger
target_file_size_base
target_file_size_multiplier
max_bytes_for_level_base
max_bytes_for_level_multiplier
disable_auto_compactions -- 停止写入数据时候的自动 compact,默认 false。动态修改立刻生效。
以上参数都可通过 UPDATE CONFIGS 语法进行动态修改,也可以写在本地配置文件中。具体作用和修改是否需要重启请参考RocksDB手册。
以上参数可通过命令行如下设置:
nebula> UPDATE CONFIGS storage:rocksdb_column_family_options = \
{ disable_auto_compactions = false, level0_file_num_compaction_trigger = 10 };
-- 该命令会整个覆盖 rocksdb_column_family_options,请注意是否会覆盖其他子项
nebula> UPDATE CONFIGS storage:rocksdb_db_options = \
{ max_subcompactions = 10, max_background_jobs = 10};
nebula> UPDATE CONFIGS storage:max_edge_returned_per_vertex = 10; -- 该参数解释见下文
可在配置文件中如下设置:
rocksdb_db_options = {"stats_dump_period_sec":"200", "write_thread_max_yield_usec":"600"}
rocksdb_column_family_options = {"max_write_buffer_number":"4", "min_write_buffer_number_to_merge":"2", "max_write_buffer_number_to_maintain":"1"}
rocksdb_block_based_table_options = {"block_restart_interval":"2"}
说明:稠密点处理(出入边数量极多的点)
针对图遍历过程中,遇到稠密点的情况,目前有两种截断策略:
- 直接截断。设置
enable_reservoir_sampling = false
,截取前max_edge_returned_per_vertex
个边,多余的边不返回。 - 蓄水池采样。对出边进行等概率采样,从未知数量的所有出边中,等概率采样
max_edge_returned_per_vertex
个边。对于出边数量超过max_edge_returned_per_vertex
的稠密点,蓄水池采样方法的性能相对直接截取方法要差,但对某些业务场景更有应用价值。
例如:
nebula> UPDATE CONFIGS storage:enable_reservoir_sampling = false;
直接截断方法
属性名 | 默认值 | 说明 | 动态修改 |
---|---|---|---|
max_edge_returned_per_vertex | 2147483647 | 每个稠密点,最多返回多少条边,多余的边截断不返回 | UPDATE CONFIGS 命令修改,立刻生效 |
Reservoir Sampling 蓄水池采样算法方式
属性名 | 默认值 | 说明 | 动态修改 |
---|---|---|---|
enable_reservoir_sampling | false | 对于边采用蓄水池概率采样方式决定是否返回 | UPDATE CONFIGS 命令修改,立刻生效 |
数据量大时的 storage 配置
如果数据量很大但内存不够,则推荐把 storage 配置中的 enable_partitioned_index_filter
设置为 true
;但由于缓存了较少的 RocksDB 索引,性能会受影响。