跳转至

Storage 服务配置

Storage 服务提供了两份初始配置文件nebula-storaged.conf.defaultnebula-storaged.conf.production,方便在不同场景中使用。文件的默认路径为/usr/local/nebula/etc/

Caution

  • 不建议修改local_config的值为false。修改配置并重启 Storage 服务,会先尝试从 Meta 服务获取缓存的配置信息,可能导致集群配置不一致,造成未知风险。
  • 不建议修改文档未介绍的配置项,除非已经熟悉源代码并完全了解配置项的作用。

配置文件使用方式

如需使用初始配置文件,从上述两个文件选择其一,删除后缀.default.production,Storage 服务才能将其识别为配置文件并从中获取配置信息。

配置文件参数值说明

配置文件内没有设置某个参数表示参数使用的是默认值。文件内只预设了部分参数的值,而且两份初始配置文件内的参数值也略有不同,本文的预设值以nebula-storaged.conf.default文件为准,其中没有的参数则以nebula-storaged.conf.production文件为准。

Note

Raft Listener 的配置和 Storage 服务配置不同,详情请参见部署 Raft listener

如需查看所有的参数及其当前值,参见配置管理

basics 配置

名称 预设值 说明
daemonize true 是否启动守护进程。
pid_file pids/nebula-storaged.pid 记录进程 ID 的文件。
timezone_name - 指定 Nebula Graph 的时区。初始配置文件中未设置该参数,如需使用请手动添加。系统默认值为UTC+00:00:00。格式请参见 Specifying the Time Zone with TZ。例如,东八区的设置方式为--timezone_name=UTC+08:00
local_config true 是否从配置文件获取配置信息。

Note

  • 在插入时间类型的属性值时,Nebula Graph 会根据timezone_name设置的时区将该时间值(TIMESTAMP 类型例外)转换成相应的 UTC 时间,因此在查询中返回的时间类型属性值为 UTC 时间。
  • timezone_name参数只用于转换 Nebula Graph 中存储的数据,Nebula Graph 进程中其它时区相关数据,例如日志打印的时间等,仍然使用主机系统默认的时区。

logging 配置

名称 预设值 说明
log_dir logs 存放 Storage 服务日志的目录,建议和数据保存在不同硬盘。
minloglevel 0 最小日志级别,即不会记录低于这个级别的日志。可选值:0(INFO)、1(WARNING)、2(ERROR)、3(FATAL)。建议在调试时设置为0,生产环境中设置为1。如果设置为4,Nebula Graph 不会记录任何日志。
v 0 日志详细级别,值越大,日志记录越详细。可选值:0123
logbufsecs 0 缓冲日志的最大时间,超时后输出到日志文件。0表示实时输出。单位:秒。
redirect_stdout true 是否将标准输出和标准错误重定向到单独的输出文件。
stdout_log_file storaged-stdout.log 标准输出日志文件名称。
stderr_log_file storaged-stderr.log 标准错误日志文件名称。
stderrthreshold 2 要复制到标准错误中的最小日志级别(minloglevel)。
timestamp_in_logfile_name true 日志文件名称中是否包含时间戳。true表示包含,false表示不包含。

networking 配置

名称 预设值 说明
meta_server_addrs 127.0.0.1:9559 全部 Meta 服务的 IP 地址和端口。多个 Meta 服务用英文逗号(,)分隔。
local_ip 127.0.0.1 Storage 服务的本地 IP 地址。本地 IP 地址用于识别 nebula-storaged 进程,如果是分布式集群或需要远程访问,请修改为对应地址。
port 9779 Storage 服务的 RPC 守护进程监听端口。Storage 服务对外端口为9779,对内端口为977797789780,Nebula Graph 使用内部端口进行多副本间的交互。
ws_ip 0.0.0.0 HTTP 服务的 IP 地址。
ws_http_port 19779 HTTP 服务的端口。
ws_h2_port 19780 HTTP2 服务的端口。
heartbeat_interval_secs 10 默认心跳间隔。请确保所有服务的heartbeat_interval_secs取值相同,否则会导致系统无法正常工作。单位:秒。

Caution

必须在配置文件中使用真实的 IP 地址。否则某些情况下127.0.0.1/0.0.0.0无法正确解析。

raft 配置

名称 预设值 说明
raft_heartbeat_interval_secs 30 Raft 选举超时时间。单位:秒。
raft_rpc_timeout_ms 500 Raft 客户端的远程过程调用(RPC)超时时间。单位:毫秒。
wal_ttl 14400 Raft WAL 的生存时间。单位:秒。

disk 配置

名称 预设值 说明
data_path data/storage 数据存储路径,多个路径用英文逗号(,)分隔。一个 RocksDB 实例对应一个路径。
minimum_reserved_bytes 268435456 每个数据存储路径的剩余空间最小值,低于该值时,可能会导致集群数据写入失败。单位:字节。
rocksdb_batch_size 4096 批量操作的缓存大小。单位:字节。
rocksdb_block_cache 4 BlockBasedTable 的默认块缓存大小。单位:兆(MB)。
engine_type rocksdb 存储引擎类型。
rocksdb_compression lz4 压缩算法,可选值:nosnappylz4lz4hczlibbzip2zstd
rocksdb_compression_per_level - 为不同级别设置不同的压缩算法。
enable_rocksdb_statistics false 是否启用 RocksDB 的数据统计。
rocksdb_stats_level kExceptHistogramOrTimers RocksDB 的数据统计级别。可选值:kExceptHistogramOrTimers(禁用计时器统计,跳过柱状图统计)、kExceptTimers(跳过计时器统计)、kExceptDetailedTimers(收集除互斥锁和压缩花费时间之外的所有统计数据)、kExceptTimeForMutex收集除互斥锁花费时间之外的所有统计数据)、kAll(收集所有统计数据)。
enable_rocksdb_prefix_filtering true 是否启用 prefix bloom filter,启用时可以提升图遍历速度,但是会增加内存消耗。
enable_rocksdb_whole_key_filtering false 是否启用 whole key bloom filter。
rocksdb_filtering_prefix_length 12 每个 key 的 prefix 长度。可选值:12(分片 ID+点 ID)、16(分片 ID+点 ID+TagID/Edge typeID)。单位:字节。
enable_partitioned_index_filter - 设置为true可以降低 bloom 过滤器占用的内存大小,但是在某些随机寻道(random-seek)的情况下,可能会降低读取性能。

Key-Value separation 配置

名称 预设值 说明
rocksdb_enable_kv_separation false 是否启用 BlobDB KV 分离存储功能。开启后可以提高查询性能。
rocksdb_kv_separation_threshold 100 RocksDB KV 分离的阈值,在 flush 或 compaction 期间,大于或等于该阈值的值将被写入blob文件。单位:字节。
rocksdb_blob_compression lz4 BlobDB 的压缩算法,可选值:nosnappylz4lz4hczlibbzip2zstd
rocksdb_enable_blob_garbage_collection true 在 compaction 过程中是否对 BlobDB 进行垃圾收集。

misc 配置

Caution

下表中的snapshot与 Nebula Graph 快照是不同的概念,这里的snapshot指 Raft 同步过程中 leader 上的存量数据。

名称 预设值 说明
snapshot_part_rate_limit 8388608 Raft leader 向 Raft group 中其它成员同步存量数据时的限速。单位:字节/秒。
snapshot_batch_size 1048576 Raft leader 向 Raft group 中其它成员同步存量数据时每批发送的数据量。单位:字节。
rebuild_index_part_rate_limit 4194304 重建索引过程中,Raft leader 向 Raft group 中其它成员同步索引数据时的限速。单位:字节/秒。
rebuild_index_batch_size 1048576 重建索引过程中,Raft leader 向 Raft group 中其它成员同步索引数据时每批发送的数据量。单位:字节。

rocksdb options 配置

名称 预设值 说明
rocksdb_db_options {} RocksDB database 选项。
rocksdb_column_family_options {"write_buffer_size":"67108864",
"max_write_buffer_number":"4",
"max_bytes_for_level_base":"268435456"}
RocksDB column family 选项。
rocksdb_block_based_table_options {"block_size":"8192"} RocksDB block based table 选项。

rocksdb options 配置的格式为{"<option_name>":"<option_value>"},多个选项用英文逗号(,)隔开。

rocksdb_db_optionsrocksdb_column_family_options支持的选项如下:

  • 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
    stats_persist_period_sec
    stats_history_buffer_size
    strict_bytes_per_sync
    enable_rocksdb_prefix_filtering
    enable_rocksdb_whole_key_filtering
    rocksdb_filtering_prefix_length
    num_compaction_threads
    rate_limit
    
  • 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 
    
    参数的详细说明请参见 RocksDB 官方文档

超级节点处理(出入边数量极多的点)

在每个点出发的查询获取到边时,直接截断。目的是避免超级节点的邻边过多,单个查询占用过多的硬盘和内存。截取前 max_edge_returned_per_vertex 个边,多余的边不返回。该参数作用于全局,不用于单个 space。

属性名 默认值 说明
max_edge_returned_per_vertex 2147483647 每个稠密点,最多返回多少条边,多余的边截断不返回。配置文件默认未设置。

Compatibility

Nebula Graph 1.x 中的蓄水池采样方法在 Nebula Graph 3.0.2 不再支持。

数据量大而内存不够时

如果数据量很大但内存不够,则推荐把 storage 配置中的 enable_partitioned_index_filter 设置为 true;但由于缓存了较少的 RocksDB 索引,性能会受影响。


最后更新: March 7, 2023