Storage 配置

本文介绍 storaged 配置文件。配置文件默认在 /usr/local/nebula/etc/ 目录下。如果您已指定 Nebula Graph 安装路径,则配置文件目录为 $pwd/nebula/etc/

  • *.default 文件为日常调试使用,也是服务启动时默认使用的配置文件
  • *.production 文件为推荐生产时使用的的文件,生产时请去掉 .production 后缀

Basics 基础配置

属性名默认值说明
daemonizetrue作为 daemon 进程运行
pid_file“pids/nebula-storaged.pid”进程 PID 文件

logging 日志相关

属性名默认值说明动态修改
log_dirlogs (也即 /usr/local/nebula/logs)storaged 日志文件存放路径,建议与 data_path 放不同硬盘
minloglevel0对应的日志级别分别为 INFO(DEBUG),WARNING,ERROR,FATAL。通常在调试环境设置为 0,生产环境设置为 1,设置为 4 不打印任何日志。UPDATE CONFIGS 命令修改,立刻生效
v00-4: 当 minloglevel 设置为 0 时,可以进一步设置调试日志的详细程度,值越大越详细UPDATE CONFIGS 命令修改,立刻生效
logbufsecs0 (秒)日志缓存时间UPDATE CONFIGS 命令修改,立刻生效
slow_op_threshhold_ms50 (毫秒)慢操作和慢查询需要打印日志的阈值UPDATE CONFIGS 命令修改,立刻生效

例如,下面命令可以增加 storage 的日志详细程度 v=1.

  1. nebula> UPDATE CONFIGS storage:v=1;

networking 网络通信相关

属性名默认值说明动态修改
meta_server_addrs“127.0.0.1:45500”meta server 地址列表,格式为 ip1:port1, ip2:port2, ip3:port3
port44500RPC 监听端口
reuse_porttrue开启内核(>3.9) SO_REUSEPORT 选项
ws_http_port12000HTTP 协议监听端口 (内部使用)
ws_h2_port12002HTTP/2 协议监听端口 (内部使用)
ws_ip“127.0.0.1”web service 绑定地址
heartbeat_interval_secs10 (秒)meta service 的心跳,需和 nebula-meta.conf 文件中的该项一致UPDATE CONFIGS 命令修改,下个心跳周期生效
raft_heartbeat_interval_secs5 (秒)RAFT 选举通信超时时间修改配置文件重启
raft_rpc_timeout_ms500 (ms)RAFT RPC 通信超时修改配置文件重启

storage 数据持久化设置

属性名默认值说明
data_pathdata/storage (也即 /usr/local/nebula/data/storage/)本机数据持久化的根目录。 每个 partition 对应一个子目录。

多块硬盘时可以逗号分隔多个目录,每个目录对应一个 Rocksdb 实例,以有更好的并发能力。例如

  1. --data_path=/disk1/storage/,/disk2/storage/,/disk3/storage/

RocksDB Options

属性名默认值说明动态修改
rocksdb_batch_size4096 (B)Batch 写
rocksdb_block_cache1024 (MB)block cache 大小。建议为本机内存的1/3
rocksdb_disable_waltrue使用 Rocksdb 的wal。默认使用 raft wal
wal_ttl14400 (秒)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

  1. max_total_wal_size
  2. delete_obsolete_files_period_micros
  3. max_background_jobs
  4. stats_dump_period_sec
  5. compaction_readahead_size
  6. writable_file_max_buffer_size
  7. bytes_per_sync
  8. wal_bytes_per_sync
  9. delayed_write_rate
  10. avoid_flush_during_shutdown
  11. max_open_files
  12. enable_write_thread_adaptive_yield
  13. max_subcompactions -- level0 level1 compact 启用多线程。默认为 1,动态修改重启后生效
  14. max_background_jobs -- 使用多线程进行 compact。默认为 1,动态修改重启后生效

以上参数都可通过 UPDATE CONFIGS 语法进行动态修改,也可以写在本地配置文件中。具体作用和修改是否需要重启请参考 RocksDB 手册。

rocksdb_column_family_options

  1. write_buffer_size
  2. max_write_buffer_number
  3. level0_file_num_compaction_trigger
  4. level0_slowdown_writes_trigger
  5. level0_stop_writes_trigger
  6. target_file_size_base
  7. target_file_size_multiplier
  8. max_bytes_for_level_base
  9. max_bytes_for_level_multiplier
  10. disable_auto_compactions -- 停止写入数据时候的自动 compact,默认 false。动态修改立刻生效。

以上参数都可通过 UPDATE CONFIGS 语法进行动态修改,也可以写在本地配置文件中。具体作用和修改是否需要重启请参考RocksDB手册。

以上参数可通过命令行如下设置

  1. nebula> UPDATE CONFIGS storage:rocksdb_column_family_options = \
  2. { disable_auto_compactions = false, level0_file_num_compaction_trigger = 10 };
  3. -- 该命令会整个覆盖 rocksdb_column_family_options,请注意是否会覆盖其他子项
  4. nebula> UPDATE CONFIGS storage:rocksdb_db_options = \
  5. { max_subcompactions = 10, max_background_jobs = 10};
  6. nebula> UPDATE CONFIGS storage:max_edge_returned_per_vertex = 10; -- 该参数解释见下文

可在配置文件中如下设置

  1. rocksdb_db_options = {"stats_dump_period_sec":"200", "":"false", "write_thread_max_yield_usec":"600"}
  2. rocksdb_column_family_options = {"max_write_buffer_number":"4", "min_write_buffer_number_to_merge":"2", "max_write_buffer_number_to_maintain":"1"}
  3. rocksdb_block_based_table_options = {"block_restart_interval":"2"}

说明:稠密点处理(出入边数量极多的点)

针对图遍历过程中,遇到稠密点的情况,目前有两种截断策略:

  1. 直接截断。设置 enable_reservoir_sampling = false,截取前 max_edge_returned_per_vertex 个边,多余的边不返回。
  2. 蓄水池采样。对出边进行等概率采样,从未知数量的所有出边中,等概率采样 max_edge_returned_per_vertex 个边。对于出边数量超过 max_edge_returned_per_vertex 的稠密点,蓄水池采样方法的性能相对直接截取方法要差,但对某些业务场景更有应用价值。

直接截断方法

属性名默认值说明动态修改
max_edge_returned_per_vertex2147483647每个稠密点,最多返回多少条边,多余的边截断不返回UPDATE CONFIGS 命令修改,立刻生效

Reservoir Sampling 蓄水池采样算法方式

属性名默认值说明动态修改
enable_reservoir_samplingfalse对于边采用蓄水池概率采样方式决定是否返回UPDATE CONFIGS 命令修改,立刻生效