ScyllaDB 6.x 配置参数详解
详解 ScyllaDB 6.2(实测 6.2.3)的核心配置:`/etc/scylla/scylla.yaml` 的集群/存储/端口参数、`/etc/scylla.d/` 下的 cpu/io/内存配置文件,以及与 Cassandra 的配置差异。所有参数值均来自真实安装(apt 官方源)后的实测读取
ScyllaDB 6.x 配置参数详解
目标:详解 ScyllaDB 6.2(实测 6.2.3)的核心配置:
/etc/scylla/scylla.yaml的集群/存储/端口参数、/etc/scylla.d/下的 cpu/io/内存配置文件,以及与 Cassandra 的配置差异。所有参数值均来自真实安装(apt 方式)后的实测读取。
环境信息
| 信息项 | 值 |
|---|---|
| ScyllaDB 版本 | 6.2.3-0.20250119.bff9ddde1283 |
| 主配置文件 | /etc/scylla/scylla.yaml |
| 辅助配置目录 | /etc/scylla.d/(cpu.conf、io.conf、memory.conf、dev-mode.conf、cpuset.conf) |
| 配置归属 | scylla 用户(uid=100),目录 /etc/scylla、/etc/scylla.d |
| 数据目录 | /var/lib/scylla/data(默认) |
| Commitlog 目录 | /var/lib/scylla/commitlog(默认) |
配置文件总览
ScyllaDB 的配置由两部分组成:
/etc/scylla/scylla.yaml:主配置(集群、存储、端口、超时等),格式与 Cassandra 的 cassandra.yaml 兼容/etc/scylla.d/*.conf:scylla 服务启动附加参数(systemd unit 的 ExecStart 中通过$SEASTAR_IO $DEV_MODE $CPUSET $MEM_CONF注入):
| 文件 | 变量 | 作用 | apt 安装实测默认值 |
|---|---|---|---|
| io.conf | SEASTAR_IO | I/O 队列参数 | --max-io-requests=1 --num-io-queues=1 |
| cpu.conf / cpuset.conf | CPUSET | 绑定 CPU/限制 smp | --cpuset 0 --smp 1 |
| memory.conf | MEM_CONF | 内存锁定 | --lock-memory=1 |
| dev-mode.conf | DEV_MODE | 开发者模式 | --developer-mode=0 |
💡 说明:这些 conf 文件由
scylla_setup及配套脚本自动生成,安装后自动写入等价参数。
核心参数详解(实测自 /etc/scylla/scylla.yaml)
集群类参数
| 参数 | 实测默认值 | 说明 |
|---|---|---|
| cluster_name | 'Test Cluster'(默认注释) | 集群名称,同一集群所有节点必须一致;已建集群后不可修改 |
| num_tokens | 256 | 每个节点在环上的 token 数量,同集群节点应一致 |
| seeds | "127.0.0.1" | 种子节点 IP,新节点加入集群的联络点;单节点填本机即可 |
| listen_address | localhost | 节点间通信地址(内部 gossip/数据传输) |
| rpc_address | localhost | CQL 客户端连接地址 |
| endpoint_snitch | SimpleSnitch | 拓扑感知策略,单节点默认 SimpleSnitch |
| enable_tablets | true | 6.0+ 的表分片(tablet)新架构,单节点默认开启 |
| partitioner | org.apache.cassandra.dht.Murmur3Partitioner | 分区器,默认 Murmur3,与 Cassandra 一致 |
实测 scylla.yaml 中 seed_provider 段落:
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "127.0.0.1"
💡 说明:多节点时 seeds 写第一个节点 IP,listen_address / rpc_address 改为各节点本机 IP;rpc_address 建议保留
0.0.0.0或用listen_on_broadcast_address配合。
存储与 Commitlog 参数
| 参数 | 实测默认值 | 说明 |
|---|---|---|
| data_file_directories | /var/lib/scylla/data(默认注释) | 数据目录,可配置多个目录分摊 IO |
| commitlog_directory | /var/lib/scylla/commitlog(默认注释) | commitlog 目录,机械盘上应与数据目录分离 |
| commitlog_sync | periodic | commitlog 同步模式,可选 periodic / batch |
| commitlog_sync_period_in_ms | 10000 | periodic 模式同步周期 |
| commitlog_segment_size_in_mb | 32 | 单个 commitlog 段大小 |
| schema_commitlog_segment_size_in_mb | 128 | schema 专用 commitlog 段大小 |
| commitlog_total_space_in_mb | -1 | commitlog 总空间上限,-1 表示自动计算 |
端口参数
| 参数 | 实测默认值 | 说明 |
|---|---|---|
| native_transport_port | 9042 | CQL 原生协议端口(cqlsh 使用) |
| native_shard_aware_transport_port | 19042 | shard-aware CQL 端口(驱动多路复用) |
| api_port | 10000 | REST API 端口(nodetool 走此端口而非 JMX) |
| api_address | 127.0.0.1 | REST API 监听地址 |
超时与批次参数
| 参数 | 实测默认值 | 说明 |
|---|---|---|
| read_request_timeout_in_ms | 5000 | 读请求超时 |
| write_request_timeout_in_ms | 2000 | 写请求超时 |
| cas_contention_timeout_in_ms | 1000 | CAS(LWT)竞争超时 |
| batch_size_warn_threshold_in_kb | 128 | 批次大小告警阈值 |
| batch_size_fail_threshold_in_kb | 1024 | 批次大小失败阈值 |
memtable 与缓存
ScyllaDB 的 scylla.yaml 没有 memtable 配置项(实测 grep 无结果)——这是与 Cassandra 的关键差异之一:Scylla 使用 Seastar 共享内存模型,memtable 与 row cache 由内存管理器自动分配(可用内存的默认 1/4 用于 cache,实测 nodetool info 中 Row Cache capacity 1.45 GB,可见自动管理已生效)。Cassandra 中 memtable_heap_space_in_mb、row_cache_size_in_mb 等配置在 Scylla 中不存在。
CPU / IO / 内存配置
cpu/io/内存不在 scylla.yaml 中,通过启动参数注入(实测 apt 安装最终启动命令):
实测 apt 安装最终启动命令(systemd 单元加载 /etc/scylla.d/*.conf 后 scylla-server 实际运行):
/usr/bin/scylla --log-to-syslog 0 --log-to-stdout 1 --network-stack posix
--developer-mode=1 --smp 1 --overprovisioned
--listen-address 172.25.7.2 --rpc-address 172.25.7.2
--seed-provider-parameters seeds=172.25.7.2 --alternator-address 172.25.7.2
--blocked-reactor-notify-ms 999999999
| 参数 | 说明 | 实测结论 |
|---|---|---|
| --smp N | shard 数量(≈CPU 核数) | 单节点实测 --smp 1 正常 |
| --memory N | 内存上限 | 实测必须 ≥1GiB/shard,768M/1024M 启动失败 |
| --developer-mode 1 | 跳过生产校验(IO Scheduler 等) | 开发/测试机必配,否则启动失败 |
| --overprovisioned | 声明环境为超卖 | 仅虚拟化/超卖环境按需开启 |
| --lock-memory 1 | 锁定内存(memory.conf) | 受限环境建议关闭(实测 mlock 受限) |
💡 说明:io.conf 的
SEASTAR_IO="--max-io-requests=1 --num-io-queues=1"是未跑过scylla_io_setup时的占位默认;生产环境跑scylla_setup后会自动生成带磁盘基准结果的 io.conf。
与 Cassandra 的差异说明
| 维度 | Cassandra | ScyllaDB 6.x |
|---|---|---|
| 主配置 | cassandra.yaml | scylla.yaml(键名基本兼容) |
| memtable/缓存 | 需手工配置内存项 | 自动内存管理,无对应配置项 |
| 运维端口 | 7199(JMX) | 10000(REST API) |
| nodetool 连接 | 走 JMX | 走 REST API(10000) |
| 存储架构 | 每节点固定 token 分区 | 默认 tablets 动态分片(enable_tablets: true) |
| 语言实现 | Java(JVM 堆/堆外内存) | C++(Seastar 共享内存) |
| release_version | 与版本一致 | 恒为 3.0.8(CQL 协议版本,实测) |
注意事项
cluster_name建集群后不可修改,生产环境务必先规划- ScyllaDB 最低内存 1GiB/shard(实测低于此值启动失败)
- 端口 9042/10000 需在防火墙放行
- 自定义 scylla.yaml 时必须显式保留
api_address: 127.0.0.1,否则默认值丢失导致 nodetool 连接失败(实测踩坑,详见部署文档)
常见问题
问题 1:修改配置后如何生效
原因: scylla.yaml 启动时读取。
解决:
systemctl restart scylla-server # 系统服务重启
问题 2:nodetool 报 Connection refused(自定义 yaml)
原因: 自定义 scylla.yaml 覆盖了默认 api_address: 127.0.0.1,API 监听了节点内网 IP(实测日志 API server listening on 172.25.7.2:10000),nodetool 连 127.0.0.1:10000 被拒。
解决: 在自定义 yaml 中显式加上 api_address: 127.0.0.1。
问题 3:I/O Scheduler is not properly configured 导致启动失败
原因: 未生成 io.conf(未跑过 scylla_io_setup)。
解决: 开发环境 --developer-mode 1;生产环境运行 scylla_setup。
参考链接
- ScyllaDB 配置参考:https://docs.scylladb.com/stable/getting-started/install-scylla/config-commands.html
- ScyllaDB 配置指南:https://docs.scylladb.com/stable/operating-scylla/admin.html
- ScyllaDB 内存配置:https://docs.scylladb.com/stable/operating-scylla/procedures/tune/memory.html
本文档由 www.quzuo.net 平台开发