跳到主要内容
版本:3.12.0

Storage 服务配置

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

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

配置文件使用方式

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

配置文件参数值说明

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

警告

配置文件中的部分参数值可以在运行时动态修改。本文将这些参数标记为支持运行时动态修改,并当local_config值设置为true时重启服务后配置会恢复为初始配置。详情参见修改配置

备注

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

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

basics 配置

名称预设值说明是否支持运行时动态修改
daemonizetrue是否启动守护进程。不支持
pid_filepids/nebula-storaged.pid记录进程 ID 的文件。不支持
timezone_nameUTC+00:00:00指定 悦数图数据库 的时区。初始配置文件中未设置该参数,如需使用请手动添加。格式请参见 Specifying the Time Zone with TZ。例如,东八区的设置方式为--timezone_name=UTC+08:00不支持
local_configtrue是否从配置文件获取配置信息。不支持
备注
  • 在插入时间类型的属性值时,悦数图数据库 会根据timezone_name设置的时区将该时间值(TIMESTAMP 类型例外)转换成相应的 UTC 时间,因此在查询中返回的时间类型属性值为 UTC 时间。
  • timezone_name参数只用于转换 悦数图数据库 中存储的数据,悦数图数据库 进程中其它时区相关数据,例如日志打印的时间等,仍然使用主机系统默认的时区。

logging 配置

名称预设值说明是否支持运行时动态修改
log_dirlogs存放 Storage 服务日志的目录,建议和数据保存在不同硬盘。不支持
minloglevel0最小日志级别,即记录此级别或更高级别的日志。可选值:0(INFO)、1(WARNING)、2(ERROR)、3(FATAL)。建议在调试时设置为0,生产环境中设置为1。如果设置为4悦数图数据库 不会记录任何日志。支持
v0VLOG 日志详细级别,即记录小于或等于此级别的所有 VLOG 消息。可选值为012345。glog 提供的 VLOG 宏允许用户定义自己的数字日志记录级别,并用参数v控制记录哪些详细消息。详情参见 Verbose Logging支持
logbufsecs0缓冲日志的最大时间,超时后输出到日志文件。0表示实时输出。单位:秒。不支持
redirect_stdouttrue是否将标准输出和标准错误重定向到单独的输出文件。不支持
stdout_log_filestoraged-stdout.log标准输出日志文件名称。不支持
stderr_log_filestoraged-stderr.log标准错误日志文件名称。不支持
stderrthreshold3要复制到标准错误中的最小日志级别(minloglevel)。不支持
timestamp_in_logfile_nametrue日志文件名称中是否包含时间戳。true表示包含,false表示不包含。不支持

networking 配置

名称预设值说明是否支持运行时动态修改
meta_server_addrs127.0.0.1:9559全部 Meta 服务的 IP(或主机名)和端口。多个 Meta 服务用英文逗号(,)分隔。不支持
local_ip127.0.0.1Storage 服务的本地 IP(或主机名)。本地 IP 地址用于识别 nebula-storaged 进程,如果是分布式集群或需要远程访问,请修改为对应地址。不支持
port9779Storage 服务的 RPC 守护进程监听端口。同时还会使用相邻的-19778)和+19780)端口。
9778:Admin 服务(Storage 接收 Meta 命令的服务)占用的端口。
9780:Storage 服务之间的 Raft 通信端口。
不支持
ws_ip0.0.0.0HTTP 服务的 IP 地址。不支持
ws_http_port19779HTTP 服务的端口。不支持
heartbeat_interval_secs10默认心跳间隔。请确保所有服务的heartbeat_interval_secs取值相同,否则会导致系统无法正常工作。单位:秒。支持
警告

使用 IP 时建议使用真实的 IP。否则某些情况下127.0.0.1/0.0.0.0无法正确解析。

raft 配置

名称预设值说明是否支持运行时动态修改
raft_heartbeat_interval_secs30Raft 选举超时时间。单位:秒。支持
raft_rpc_timeout_ms500Raft 客户端的远程过程调用(RPC)超时时间。单位:毫秒。支持
wal_ttl14400Raft WAL 的有效时间。单位:秒。支持

disk 配置

名称预设值说明是否支持运行时动态修改
data_pathdata/storage数据存储路径,多个路径用英文逗号(,)分隔。一个 RocksDB 实例对应一个路径。请勿随意修改此参数,以免造成数据意外丢失。不支持
minimum_reserved_bytes268435456每个数据存储路径的剩余空间最小值,低于该值时,可能会导致集群数据写入失败。单位:字节。不支持
rocksdb_batch_size4096批量操作的缓存大小。单位:字节。不支持
rocksdb_block_cache4BlockBasedTable 的默认块缓存大小。单位:兆字节。不支持
disable_page_cachefalse允许或禁止 悦数图数据库 使用操作系统的页缓存。默认值为false,表示允许使用 page cache。当值为true时,禁止 悦数图数据库 使用 page cache,此时须设置充足的块缓存(block cache)空间。不支持
engine_typerocksdb存储引擎类型。不支持
rocksdb_compressionlz4压缩算法,可选值:nosnappylz4lz4hczlibbzip2zstd
该参数会修改每一层的压缩算法,如需为不同层级设置不同的压缩算法,请使用rocksdb_compression_per_level参数。
不支持
rocksdb_compression_per_level-为不同层级设置不同的压缩算法。优先级高于rocksdb_compression。例如no:no:lz4:lz4:snappy:zstd:snappy
也可以不设置某个层级的压缩算法,例如no:no:lz4:lz4::zstd,此时 L4、L6 层使用rocksdb_compression参数的压缩算法。
不支持
enable_rocksdb_statisticsfalse是否启用 RocksDB 的数据统计。不支持
rocksdb_stats_levelkExceptHistogramOrTimersRocksDB 的数据统计级别。可选值:kExceptHistogramOrTimers(禁用计时器统计,跳过柱状图统计)、kExceptTimers(跳过计时器统计)、kExceptDetailedTimers(收集除互斥锁和压缩花费时间之外的所有统计数据)、kExceptTimeForMutex收集除互斥锁花费时间之外的所有统计数据)、kAll(收集所有统计数据)。不支持
enable_rocksdb_prefix_filteringtrue是否启用 prefix bloom filter,启用时可以提升图遍历速度,但是会增加内存消耗。不支持
enable_rocksdb_whole_key_filteringfalse是否启用 whole key bloom filter。不支持
rocksdb_filtering_prefix_length12每个 key 的 prefix 长度。可选值:12(分片 ID+点 ID)、16(分片 ID+点 ID+TagID/Edge typeID)。单位:字节。不支持
enable_partitioned_index_filterfalse设置为true可以降低 bloom 过滤器占用的内存大小,但是在某些随机寻道(random-seek)的情况下,可能会降低读取性能。初始配置文件中未设置该参数,如需使用请手动添加。不支持

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 官方文档

misc 配置

警告

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

名称预设值说明是否支持运行时动态修改
query_concurrentlytrue是否开启多线程查询。开启后可以提高单个查询的时延性能,但大压力下会降低整体的吞吐量。支持
auto_remove_invalid_spacetrue在执行DROP SPACE后,会删除指定图空间,该参数设置是否同时删除指定图空间内的所有数据。当值为true时,同时删除指定图空间内的所有数据。支持
num_io_threads16网络 I/O 线程的数量,用于发送 RPC 请求和接收响应。不支持
num_max_connections0所有网络线程的最大活动连接数,0表示没有限制。
每个网络线程的最大连接数=num_max_connections/num_netio_threads
不支持
num_worker_threads32Storage 的 RPC 服务的工作线程数量。不支持
max_concurrent_subtasks10TaskManager 并发执行子任务的最大个数。不支持
snapshot_part_rate_limit10485760Raft leader 向 Raft group 中其它成员同步存量数据时的限速。单位:字节/秒。支持
snapshot_batch_size1048576Raft leader 向 Raft group 中其它成员同步存量数据时每批发送的数据量。单位:字节。支持
rebuild_index_part_rate_limit4194304重建索引过程中,Raft leader 向 Raft group 中其它成员同步索引数据时的限速。单位:字节/秒。支持
rebuild_index_batch_size1048576重建索引过程中,Raft leader 向 Raft group 中其它成员同步索引数据时每批发送的数据量。单位:字节。支持

memory tracker 配置

备注

Memory Tracker 是一个内存管理工具,用于监控和限制内存使用。对于大型查询,Memory Tracker 可以防止 OOM 问题。如果在容器环境中使用 Memory Tracker,需要在 Storage 服务的配置文件中添加相关配置。操作如下:

  1. 创建目录/sys/fs/cgroup/storaged/,添加并配置memory.max
  2. etc/nebula-storaged.conf添加以下配置。
--containerized=true
--cgroup_v2_controllers=/sys/fs/cgroup/storaged/cgroup.controllers
--cgroup_v2_memory_stat_path=/sys/fs/cgroup/storaged/memory.stat
--cgroup_v2_memory_max_path=/sys/fs/cgroup/storaged/memory.max
--cgroup_v2_memory_current_path=/sys/fs/cgroup/storaged/memory.current

详细信息,请参见图数据库 NebulaGraph 的内存管理实践之 Memory Tracker

名称预设值说明是否支持运行时动态修改
memory_tracker_limit_ratio0.8取值可设置为:(0, 1]23
(0, 1]:可用内存的百分比。计算公式:可用内存的百分比 = 可用内存 / (总内存 - 保留内存)。
当正在进行的查询导致内存使用超过配置的内存限制时,该查询会失败,并在失败后释放内存。
注意:对于云上和本地节点混合部署的集群,需要根据实际情况调小该参数。例如,当预期 Graphd 只占用 50% 的内存时,该参数的值可设置为小于0.5
2:动态自适应模式(Dynamic Self Adaptive),Memory Tracker 会根据系统当前的可用内存,动态调整可用内存。
注意:此功能为实验性功能,由于动态自适应不能做到实时监控操作系统内存使用情况,在一些大内存分配的场景,还是会存在 OOM 可能。
3:关掉 Memory Tracker,Memory Tracker 将只记录内存使用情况,即使超过限额,也不会干预执行。
支持
memory_tracker_untracked_reserved_memory_mb50保留内存的大小,单位:MB。支持
memory_tracker_detail_logfalse是否定期生成较详细的内存跟踪日志。当值为true时,会定期生成内存跟踪日志。支持
memory_tracker_detail_log_interval_ms60000内存跟踪日志的生成时间间隔,单位:毫秒。仅当memory_tracker_detail_logtrue时,该参数生效。支持
memory_purge_enabledtrue是否定期开启内存清理功能。当值为true时,会定期清理内存。支持
memory_purge_interval_seconds10内存清理的时间间隔,单位:秒。memory_purge_enabledtrue时,该参数生效。支持

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

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

属性名默认值说明是否支持运行时动态修改
max_edge_returned_per_vertex2147483647每个稠密点,最多返回多少条边,多余的边截断不返回。初始配置文件中未设置该参数,如需使用请手动添加。不支持

数据量大而内存不够时

注意

一个图空间至少占用大约 300 MB 的内存。

如果数据量很大但内存不够,则可以尝试把 storage 配置中的enable_partitioned_index_filter设置为true,减少rocksdb_block_cache。但由于缓存了较少的 RocksDB 索引,性能可能会受影响。此外,当通过语句拉取大量数据时,仍存在 OOM 的可能。