Storage 服务配置¶
Storage 服务提供了两份初始配置文件nebula-storaged.conf.default
和nebula-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 |
- | 指定 NebulaGraph 的时区。初始配置文件中未设置该参数,如需使用请手动添加。系统默认值为UTC+00:00:00 。格式请参见 Specifying the Time Zone with TZ。例如,东八区的设置方式为--timezone_name=UTC+08:00 。 |
local_config |
true |
是否从配置文件获取配置信息。 |
Note
- 在插入时间类型的属性值时,NebulaGraph 会根据
timezone_name
设置的时区将该时间值(TIMESTAMP 类型例外)转换成相应的 UTC 时间,因此在查询中返回的时间类型属性值为 UTC 时间。 timezone_name
参数只用于转换 NebulaGraph 中存储的数据,NebulaGraph 进程中其它时区相关数据,例如日志打印的时间等,仍然使用主机系统默认的时区。
logging 配置¶
名称 | 预设值 | 说明 |
---|---|---|
log_dir |
logs |
存放 Storage 服务日志的目录,建议和数据保存在不同硬盘。 |
minloglevel |
0 |
最小日志级别,即不会记录低于这个级别的日志。可选值:0 (INFO)、1 (WARNING)、2 (ERROR)、3 (FATAL)。建议在调试时设置为0 ,生产环境中设置为1 。如果设置为4 ,NebulaGraph 不会记录任何日志。 |
v |
0 |
日志详细级别,值越大,日志记录越详细。可选值:0 、1 、2 、3 。 |
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 ,对内端口为9777 、9778 和9780 ,NebulaGraph 使用内部端口进行多副本间的交互。 |
ws_ip |
0.0.0.0 |
HTTP 服务的 IP 地址。 |
ws_http_port |
19779 |
HTTP 服务的端口。 |
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 的默认块缓存大小。单位:兆字节。 |
disable_page_cache |
false |
允许或禁止 NebulaGraph 使用操作系统的页缓存。默认值为false ,表示允许使用 page cache。当值为true 时,禁止 NebulaGraph 使用 page cache,此时须设置充足的块缓存(block cache)空间。 |
engine_type |
rocksdb |
存储引擎类型。 |
rocksdb_compression |
lz4 |
压缩算法,可选值:no 、snappy 、lz4 、lz4hc 、zlib 、bzip2 、zstd 。 |
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 的压缩算法,可选值:no 、snappy 、lz4 、lz4hc 、zlib 、bzip2 、zstd 。 |
rocksdb_enable_blob_garbage_collection |
true |
在 compaction 过程中是否对 BlobDB 进行垃圾收集。 |
misc 配置¶
Caution
下表中的snapshot
与 NebulaGraph 快照是不同的概念,这里的snapshot
指 Raft 同步过程中 leader 上的存量数据。
名称 | 预设值 | 说明 |
---|---|---|
auto_remove_invalid_space |
true |
在执行DROP SPACE 后,会删除指定图空间,该参数设置是否同时删除指定图空间内的所有数据。当值为true 时,同时删除指定图空间内的所有数据。 |
num_io_threads |
16 |
网络 I/O 线程的数量,用于发送 RPC 请求和接收响应。 |
num_worker_threads |
32 |
Storage 的 RPC 服务的工作线程数量。 |
max_concurrent_subtasks |
10 |
TaskManager 并发执行子任务的最大个数。 |
snapshot_part_rate_limit |
10485760 |
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_options
和rocksdb_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 | 每个稠密点,最多返回多少条边,多余的边截断不返回。配置文件默认未设置。 |
数据量大而内存不够时¶
如果数据量很大但内存不够,则推荐把 storage 配置中的 enable_partitioned_index_filter
设置为 true
;但由于缓存了较少的 RocksDB 索引,性能会受影响。