首页 产品特性 解决方案 系统架构 文档 关于

环境要求

安装 KDSS 前,请确保您的环境满足以下要求。

最低硬件要求

资源 最低要求 说明
CPU 8 核 Storage 节点最低要求;建议 16 核
内存 32 GB 混合节点(Master+Storage)需 64-128 GB
系统盘 200 GB SSD 混合节点需 1 TB NVMe(MongoDB + BadgerDB)
数据盘 1+ 块裸盘 每节点最多 36 × 16 TB HDD
网络 10 Gbps 建议 20 Gbps 绑定双口

推荐硬件配置

资源 推荐配置 说明
CPU 16 核 更多核心可加速 EC 编码
内存 128 GB 混合节点:MongoDB 64 GB + 服务 32 GB
系统盘 2 TB NVMe NVMe 用于操作系统、元数据和索引
数据盘 36 × 16 TB 大容量机械硬盘,用于存储节点
网络 20 Gbps 绑定双口网卡实现高可用

软件要求

  • Ubuntu 24.04 LTS(推荐),Linux 内核 4.15+
  • MongoDB 8.0+(副本集部署以实现元数据高可用)
  • Go 1.24+(仅编译时需要)
  • FUSE 3.x(仅在使用 FUSE 挂载客户端时需要)

容量规划

根据存储需求和 EC 配置规划集群规模。

可用容量公式

可用存储容量由 EC 配置决定:

formula
Usable Capacity = Raw Capacity x (data_shards / (data_shards + parity_shards))

计算示例

下表展示了 100 TB 裸盘空间在不同 EC 配置下的可用容量:

EC 配置 数据片 校验片 利用率 可用容量 (100 TB 裸) 容错能力
EC 5+2 5 2 71.4% 71.4 TB 容忍 2 块磁盘故障
EC 9+2 9 2 81.8% 81.8 TB 容忍 2 块磁盘故障
EC 18+3 18 3 85.7% 85.7 TB 容忍 3 块磁盘故障
EC 29+3 29 3 90.6% 90.6 TB 容忍 3 块磁盘故障
EC 31+2 31 2 93.9% 93.9 TB 容忍 2 块磁盘故障

提示:对于大多数生产工作负载,EC 9+2 在空间利用率(81.8%)和容错能力(容忍 2 块同时故障)之间提供了良好平衡。如果您的环境有更高的关联磁盘故障风险,建议使用 EC 18+3EC 29+3 以获得更高的校验保护。

警告:EC 31+2 极致密度模式仅适用于全新的存储服务器和全新企业级硬盘,且必须部署在 Tier 3+ 标准的 IDC 机房,配备 24 小时人员值守随时处理硬件故障。仅 2 个校验分片,容错余量极小——磁盘更换的任何延迟都会增加数据丢失风险。

S3 接口

KDSS 提供完全兼容 S3 的 API 网关,支持标准 S3 工具和 SDK。默认端点为 http://:9000。

AWS CLI

使用标准 AWS CLI 与 KDSS 交互,配置自定义端点指向 KDSS S3 网关。

bash
# Configure credentials (use KDSS access key / secret key)
aws configure
# AWS Access Key ID: your-access-key
# AWS Secret Access Key: your-secret-key
# Default region name: us-east-1
# Default output format: json

# Set alias for convenience
alias s3='aws --endpoint-url http://master-host:9000 s3'
alias s3api='aws --endpoint-url http://master-host:9000 s3api'

# Bucket operations
s3 mb s3://my-bucket                          # Create bucket
s3 ls                                         # List buckets
s3 ls s3://my-bucket/                         # List objects
s3 rb s3://my-bucket --force                  # Delete bucket

# Upload / Download
s3 cp local-file.dat s3://my-bucket/          # Upload file
s3 cp s3://my-bucket/file.dat ./              # Download file
s3 cp ./data/ s3://my-bucket/data/ --recursive  # Upload directory
s3 sync ./backup/ s3://my-bucket/backup/      # Sync directory

# Delete
s3 rm s3://my-bucket/file.dat                 # Delete object
s3 rm s3://my-bucket/ --recursive             # Delete all objects

s3cmd

s3cmd 是一个轻量级的 S3 兼容存储命令行工具。

~/.s3cfg
[default]
access_key = your-access-key
secret_key = your-secret-key
host_base = master-host:9000
host_bucket = master-host:9000/%(bucket)
use_https = False
signature_v2 = False
bash
# Bucket operations
s3cmd mb s3://my-bucket
s3cmd ls

# Upload / Download
s3cmd put file.dat s3://my-bucket/
s3cmd get s3://my-bucket/file.dat ./
s3cmd sync ./data/ s3://my-bucket/data/

# File info
s3cmd info s3://my-bucket/file.dat

Python (boto3)

使用 boto3 SDK 通过 Python 编程方式访问 KDSS。

python
import boto3

# Create S3 client pointing to KDSS
s3 = boto3.client(
    "s3",
    endpoint_url="http://master-host:9000",
    aws_access_key_id="your-access-key",
    aws_secret_access_key="your-secret-key",
    region_name="us-east-1",
)

# Create bucket
s3.create_bucket(Bucket="my-bucket")

# Upload file
s3.upload_file("local-file.dat", "my-bucket", "path/to/file.dat")

# Download file
s3.download_file("my-bucket", "path/to/file.dat", "downloaded.dat")

# List objects
resp = s3.list_objects_v2(Bucket="my-bucket", Prefix="path/")
for obj in resp.get("Contents", []):
    print(obj["Key"], obj["Size"])

# Generate presigned URL (valid for 1 hour)
url = s3.generate_presigned_url(
    "get_object",
    Params={"Bucket": "my-bucket", "Key": "path/to/file.dat"},
    ExpiresIn=3600,
)
print(url)

# Delete object
s3.delete_object(Bucket="my-bucket", Key="path/to/file.dat")

Go

使用 AWS SDK for Go (v2) 与 KDSS 交互。

go
package main

import (
    "context"
    "fmt"
    "os"

    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/credentials"
    "github.com/aws/aws-sdk-go-v2/service/s3"
)

func main() {
    // Create S3 client pointing to KDSS
    cfg, _ := config.LoadDefaultConfig(context.TODO(),
        config.WithRegion("us-east-1"),
        config.WithCredentialsProvider(
            credentials.NewStaticCredentialsProvider("your-access-key", "your-secret-key", ""),
        ),
    )
    client := s3.NewFromConfig(cfg, func(o *s3.Options) {
        o.BaseEndpoint = aws.String("http://master-host:9000")
        o.UsePathStyle = true
    })

    // Upload file
    file, _ := os.Open("local-file.dat")
    defer file.Close()
    client.PutObject(context.TODO(), &s3.PutObjectInput{
        Bucket: aws.String("my-bucket"),
        Key:    aws.String("path/to/file.dat"),
        Body:   file,
    })

    // List objects
    resp, _ := client.ListObjectsV2(context.TODO(), &s3.ListObjectsV2Input{
        Bucket: aws.String("my-bucket"),
    })
    for _, obj := range resp.Contents {
        fmt.Printf("%s  %d bytes\n", *obj.Key, *obj.Size)
    }
}

支持的 S3 操作

KDSS S3 网关支持以下 S3 API 操作:

分类 操作
存储桶 CreateBucket DeleteBucket ListBuckets HeadBucket
对象 PutObject GetObject DeleteObject HeadObject CopyObject
列举 ListObjectsV2 ListObjectVersions
分片上传 CreateMultipartUpload UploadPart CompleteMultipartUpload AbortMultipartUpload
预签名 URL GET PUT

配置参考

所有配置文件的完整参考。

master.toml 参考

KDSS 主节点配置(TOML 格式)。

配置项 默认值 描述
listen:6700gRPC 监听地址
web_listen:8081Web 控制台监听地址
s3_listen:9000S3 网关监听地址
mongo_uri(必填)MongoDB 连接 URI
mongo_dbkdssMongoDB 数据库名称
ec.data_shards(必填)每条条带的数据分片数
ec.parity_shards(必填)每条条带的校验分片数
leader.lock_ttl_sec10Leader 锁超时(秒)
leader.renew_interval_sec3Leader 锁续约间隔(秒)
gc.interval_sec3600GC 巡检扫描间隔(秒)
gc.auto_gc_pending_hours48gc_pending 超时自动删除(小时)
capacity.alert_pct95集群容量告警阈值(%)
capacity.reject_pct99集群容量拒写阈值(%)
repair.concurrency4每台 Master 并发修复任务数
log.levelinfo日志级别 (debug, info, warn, error)
log.file/var/log/kdss/master.log日志文件路径

storage.toml 参考

KDSS 存储节点配置(TOML 格式)。

配置项 默认值 描述
node_id(必填)节点唯一标识
listen:6800gRPC 监听地址
master_addrs(必填)Master 节点地址列表
index_dir/opt/kdss/indexBadgerDB 索引目录(建议 SSD)
[[disks]].disk_id(必填)磁盘标识
[[disks]].device(必填)磁盘设备路径(建议 /dev/disk/by-id/)
heartbeat.interval_sec60心跳间隔(秒)
heartbeat.timeout_sec180心跳超时(秒)
checker.enabledtrue启用 CRC32 完整性巡检
checker.rate_mb_per_sec50巡检速率限制(MB/s/盘)
compactor.enabledtrue启用后台压缩
compactor.threshold0.2软压缩阈值(20%)
compactor.force_threshold0.5强制压缩阈值(50%)
sync.modeimmediatefsync 策略:immediate / batch / deferred
log.levelinfo日志级别
log.file/var/log/kdss/storage.log日志文件路径

mount.toml 参考

KDSS FUSE 挂载客户端配置(TOML 格式)。

配置项 默认值 描述
cluster.masters(必填)Master 节点地址列表
auth.access_key(必填)S3 访问密钥
auth.secret_key(必填)S3 密钥
auth.bucket(必填)目标 Bucket 名称
mount.mountpoint(必填)本地挂载点路径
mount.entry_timeout_s3600内核 dentry 缓存 TTL(秒)
mount.attr_timeout_s3600内核属性缓存 TTL(秒)
performance.chunk_size_mb256chunk 大小(MB),1 chunk = 1 stripe
performance.read_rate_limit_mb0读取速率限制(MB/s,0=不限)
performance.write_rate_limit_mb0写入速率限制(MB/s,0=不限)
timeout.master_timeout_ms5000Master RPC 超时(毫秒)
timeout.storage_timeout_ms10000Storage RPC 超时(毫秒)
log.levelinfo日志级别
log.file(stdout)日志文件路径