跳到主要内容

配置参考

本页基于当前 main 分支里的配置结构体 curvine-common/src/conf/*.rs 与示例文件 etc/curvine-cluster.toml 整理,而不是继续沿用旧版本里已经漂移的大表。

提示

运行时真正的配置来源仍然是 conf/curvine-cluster.toml。本页更适合作为“配置布局与关键字段索引”;如果需要完整字段列表,请直接查看 Curvine 源码中的配置结构体。

配置来源

Curvine 常见的配置输入包括:

  • conf/curvine-cluster.toml:主配置文件
  • conf/curvine-env.shbin/ 脚本使用的环境初始化
  • conf/curvine-site.xml:Hadoop / Java 客户端配置

关键环境变量覆盖项:

变量作用
CURVINE_CONF_FILE覆盖 curvine-cluster.toml 路径
CURVINE_MASTER_HOSTNAME覆盖 Master 实际 hostname
CURVINE_WORKER_HOSTNAME覆盖 Worker 实际 hostname
CURVINE_CLIENT_HOSTNAME覆盖客户端 hostname,用于本地性判断

当前配置布局

当前 ClusterConf 的主要段落如下:

段落作用
顶层字段format_masterformat_workertestingcluster_id
[master]Master RPC / Web、元数据、TTL、配额、复制、锁
[journal]Raft / journal 配置
[worker]Worker RPC、数据目录、复制与数据路径执行参数
[client]Rust 客户端默认值、重试、缓冲区、统一文件系统行为
[fuse]FUSE 挂载与缓存参数
[log]全局 client / fuse 日志
[s3_gateway]S3 兼容网关配置
[job]load 任务生命周期与并发控制
[cli]CLI 日志配置
注意

本页只覆盖当前文档站公开使用的配置段。

顶层字段

字段默认值含义
format_mastertrue启动时格式化 Master 元数据存储
format_workertrue启动时格式化 Worker 数据存储
testingfalse测试模式
cluster_idcurvine集群标识

生产环境中,这两个 format_* 一般会在实际部署的 TOML 里改成 false

[master]

MasterConf 中最关键的默认值:

字段默认值含义
hostnamelocalhostMaster hostname,可被 CURVINE_MASTER_HOSTNAME 覆盖
rpc_port8995Master RPC 端口
web_port9000Master Web 端口
io_threads32Master I/O 线程数
io_timeout10m网络超时
meta_dir<cwd>/fs-meta元数据目录
retry_cache_enabletrue是否启用重试缓存
retry_cache_size100000重试缓存容量
retry_cache_ttl10m重试缓存 TTL
block_report_limit1000每次 block report 最大数量
worker_policylocalWorker 选择策略
heartbeat_interval3sWorker 心跳间隔
worker_check_interval10sWorker 状态检查间隔
worker_blacklist_interval30sWorker 拉黑时间
worker_lost_interval10mWorker 判定丢失时间
audit_logging_enabledtrue是否启用审计日志
block_replication_enabledfalse是否启用 block 复制控制
block_replication_concurrency_limit1000复制任务并发上限
block_replication_retry_interval5s复制重试间隔
ttl_checker_retry_attempts3TTL 检查重试次数
ttl_checker_interval1hTTL 检查周期
ttl_bucket_interval1hTTL 分桶周期
ttl_max_retry_duration10mTTL 最大重试时长
ttl_retry_interval1sTTL 重试间隔
enable_quota_evictionfalse是否启用 quota 驱动逐出
quota_eviction_modefree逐出模式
quota_eviction_policylru逐出策略
quota_eviction_high_rate0.8高水位
quota_eviction_low_rate0.6低水位
quota_eviction_scan_page2扫描页数
quota_eviction_capacity5000000扫描容量
lock_expire_time5m过期锁回收时间
buffer_size128KB内部缓冲区大小

[master.rocksdb] 是嵌套段落,用来控制元数据 RocksDB 行为;其默认值来自 MasterConf::rocksdb_default()

[journal]

JournalConf 中最关键的默认值:

字段默认值含义
enabletrue是否启用 Raft journal
group_nameraft-groupRaft 组名
hostnamelocalhost本地 Raft hostname
rpc_port8996Raft RPC 端口
message_size200Raft RPC message size
writer_channel_size0journal writer 队列大小
writer_flush_batch_size1000journal flush batch size
writer_flush_batch_ms10journal flush 周期
snapshot_interval6hsnapshot 周期
snapshot_entries1000000两次 snapshot 之间的 entry 数
conn_timeout_ms30000连接超时
io_timeout_ms60000I/O 超时
raft_tick_interval_ms1000raft tick 周期
raft_election_tick10选举 tick
raft_heartbeat_tick3心跳 tick
raft_batch_size8batch append 大小
raft_retry_cache_ttl10mretry cache TTL
retain_checkpoint_num3保留 checkpoint 数
ufs_copy_timeout20m数据复制到 UFS 的超时

journal_addrs 必须列出 Raft 节点,且本地 Master 实际生效的 hostname 必须能匹配其中一项。

[worker]

WorkerConf 中最关键的默认值:

字段默认值含义
hostnamelocalhostWorker hostname,可被 CURVINE_WORKER_HOSTNAME 覆盖
rpc_port8997Worker RPC 端口
web_port9001Worker Web 端口
dir_reserved0每个数据目录的预留空间
data_dir[]Worker 数据目录列表
io_slow_threshold300ms慢 I/O 阈值
io_threads32Worker I/O 线程数
io_timeout10mWorker 网络超时
scheduler_threads2调度线程数
executor_threads10后台执行线程数
enable_splicefalse是否启用 splice
enable_send_filetrue是否启用 sendfile
pipe_buf_size64KBpipe buffer 大小
pipe_pool_max_cap2000pipe pool 最大容量
block_replication_concurrency_limit100复制任务并发上限
block_replication_chunk_size1MB复制块大小
enable_s3_gatewayfalse是否随 Worker 启动 S3 网关

生产环境里最重要的字段通常是 data_dir,例如:

data_dir = [
"[SSD]/data/data1",
"[HDD]/data/data2"
]

[client]

ClientConf 中最关键的默认值:

字段默认值含义
master_addrs[]为空时由 journal_addrs + Master RPC 端口推导
hostnamelocalhost客户端 hostname,可被 CURVINE_CLIENT_HOSTNAME 覆盖
replicas1默认副本数
block_size128MB默认 block size
write_chunk_size128KB写 chunk 大小
read_chunk_size128KB读 chunk 大小
read_parallel1基础读并发
max_cache_block_handles10block handle 缓存上限
short_circuittrue是否启用 short-circuit
storage_typedisk默认存储类型
ttl_ms0默认 TTL
ttl_actionnone默认 TTL 动作
auto_cache_enabledfalse是否启用自动缓存提交
auto_cache_ttl7d自动缓存 TTL
master_conn_pool_size1Master 连接池大小
enable_read_aheadtrue是否启用预读
enable_unified_fstrue是否启用统一文件系统视图
enable_rust_read_ufstruecache miss 时是否允许直接读 UFS
mount_update_ttl10smount 元数据刷新周期
enable_block_conn_pooltrue是否启用 block 连接池
block_conn_idle_size128空闲 block 连接保留数量
small_file_size4MB小文件阈值
enable_smart_prefetchtrue是否启用 smart prefetch
large_file_size10GB大文件阈值
max_read_parallel8最大动态读并发
sequential_read_threshold7顺序读判定阈值

[fuse]

FuseConf 中最关键的默认值:

字段默认值含义
mnt_path/curvine-fuse挂载点路径
fs_path/挂载点可见的 Curvine 根路径
mnt_number1挂载点数量
clone_fdtrue是否启用 clone-fd 优化
web_port9002FUSE Web 端口
enable_meta_cachefalse是否启用元数据缓存
meta_cache_capacity100000元数据缓存容量
meta_cache_ttl120s元数据缓存 TTL
node_cache_size200000node cache 容量
node_cache_timeout24hnode cache TTL
direct_iofalse是否启用 direct I/O
write_back_cachefalse是否启用 write-back cache
cache_readdirfalse是否缓存 readdir 结果
check_permissiontrue是否执行权限检查
list_limit1000目录列举数量限制

[log][cli][job][s3_gateway]

全局 [log]

顶层 [log] 是 client / fuse 共用的日志配置。示例配置常设为输出到 stdout,也可以切到文件目录。

[cli]

CliConf 目前非常精简,只包含 log;CLI 默认日志级别为 warn

[job]

JobConf 中关键默认值:

字段默认值
job_life_ttl24h
job_cleanup_ttl10m
job_max_files100000
task_timeout1h
task_report_interval10s
worker_max_concurrent_tasks100

[s3_gateway]

S3GatewayConf 中关键默认值:

字段默认值
listen0.0.0.0:9900
regionus-east-1
put_temp_dir/tmp/curvine-temp
put_memory_buffer_threshold1048576
put_max_memory_buffer16777216
enable_distributed_authfalse
cache_refresh_interval_secs30
get_chunk_size_mb1.0
web_port9003

示例骨架

format_master = false
format_worker = false

[master]
meta_dir = "data/meta"

[journal]
journal_addrs = [
{ id = 1, hostname = "master1", port = 8996 },
{ id = 2, hostname = "master2", port = 8996 },
{ id = 3, hostname = "master3", port = 8996 },
]

[worker]
data_dir = ["[SSD]/data/data1"]

[client]
master_addrs = [
{ hostname = "master1", port = 8995 },
{ hostname = "master2", port = 8995 },
{ hostname = "master3", port = 8995 },
]

[fuse]
mnt_path = "/curvine-fuse"

[log]
log_dir = "stdout"

[cli]
log = { level = "warn", log_dir = "stdout", file_name = "cli.log" }