3FS
容器部署多节点 FoundationDB 及运维
· ☕ 3 分钟
1. 生成集群ID 1 cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1 下面以 CLUSTER_ID=fKbIga9RHP79OIx1 为例 2. 第一个节点上 清理旧数据 1 2 3 $CONTAINER_CLI rm -f $FDB_INSTANCE_NAME mv $FDB_DIR $FDB_DIR.$(date +%Y%m%d%H%M%S).bak mkdir -p $FDB_DIR 配置环境变量 1 2 3 4 5 6 7 8 9 export CONTAINER_CLI=nerdctl export IMAGE=foundationdb/foundationdb:7.1.26 export CLUSTER_ID=fKbIga9RHP79OIx1 export FDB_INSTANCE_NAME=fdb_server export FDB_CLUSTER_FIRST_IP=$(hostname -I | awk '{print $1}') export FDB_PORT=4500 export FDB_DIR=/data/ops/fdb/$FDB_INSTANCE_NAME 创建 cluster 文件 1 2 echo "${FDB_INSTANCE_NAME}:${CLUSTER_ID}@${FDB_CLUSTER_FIRST_IP}:4500" > $FDB_DIR/fdb.cluster cat $FDB_DIR/fdb.cluster 启动服务器节点 1 2 3 4 5 6 7 8 9 10 11 12

3FS 关键技术和设计
· ☕ 3 分钟
1. Direct IO Direct IO 绕过了操作系统的页缓存(page cache),直接与硬件设备进行数据交互。 Direct IO 的特点: 新数据多,不需要缓存 内存占用少 大文件顺序读写 对于超过阈值(默认 1MB)的同步读取操作,3FS 的客户端会将其转为 AIO (以 Direct IO 方式打开文件)操作以提高

DeepSeek 3FS 运维指南
· ☕ 9 分钟
记录一些 DeepSeek 3FS 的运维操作,持续更新中。 1. 基本概念及注意事项 Chain 一个 Chain 是由若干个 Target 组成,每个 Target 是一个存储的副本。在全部提交就绪的情况下,一个 Chain 的所有 Target 都是一致的。 一个 Chain 上的 Target 不能在同一个节点上。 Chain 就是存储的空间,写文件是会被分配到一个 Chain 上,读文件

容器化部署 DeepSeek 3FS 存储系统
· ☕ 7 分钟
1. 部署方案 在开始容器化部署之前,先提几点要求: 为了简化交付,只需要一个镜像 为了可靠性,尽可能多副本部署 通过不同的参数启动不同的服务 通过环境变量注入配置,渲染到配置文件中 下面是 DeepSeek 3FS 的部署方案: 需要部署: 一个 Monitor 用来收集监控数据,数据存储在 ClickHouse 中 一

3FS 的一些性能测试
· ☕ 4 分钟
1. 硬件测试 有两块 NVMe SSD SAMSUNG MZQL27T6HBLA-00A07,两个节点组成的 3FS 集群,每个节点有 4 个 IB 网口。 1.1 单线程 磁盘 FIO 128 K,读 1 fio -numjobs=1 -fallocate=none -iodepth=2 -ioengine=libaio -direct=1 -rw=read -bs=128K --group_reporting -size=100M -time_based -runtime=30 -name=fio-test -directory=/data/fio 1 Jobs: 1 (f=1): [R(1)][100.0%][r=2211MiB/s][r=17.7k IOPS][eta 00m:00s] 磁盘 FIO 128 K,写 1 fio -numjobs=1 -fallocate=none -iodepth=2 -ioengine=libaio -direct=1 -rw=write -bs=128K --group_reporting -size=100M -time_based -runtime=30 -name=fio-test -directory=/data/fio 1 Jobs: 1 (f=1): [W(1)][100.0%][w=3703MiB/s][w=29.6k IOPS][eta 00m:00s] 磁盘 FIO 4 M,