先说清楚一件最容易被误解的事:Longhorn 不是一个分布式文件系统。它不会把三台机器的硬盘条带化拼成一个大池子,也不会把你那个 4 MB 的文件切成四份分别存在四台机器上。它做的事情朴素得多——给每一个卷做若干份完整拷贝,每份拷贝各自待在一台机器的本地磁盘上,彼此之间靠网络保持同步。理解这一点,后面所有的硬件账才算得清楚。
落到组件上,Longhorn 在每个节点跑一个 longhorn-manager,负责调度、监控和卷的生命周期;每个节点再跑实例管理器进程,分别托管引擎进程和副本进程。你每创建一个卷,就会在某个节点起一个引擎进程,然后在若干节点各起一个副本进程。卷被 Pod 使用时,引擎把卷以块设备的形式暴露出来,副本进程负责在自己的磁盘上真正落数据。这套进程级架构是 Longhorn 好上手的原因,也是它性能开销的来源。
数据落在哪里?默认在节点的 /var/lib/longhorn/replicas/ 目录下,每个副本一个子目录,卷当前正在写的数据放在卷头对应的稀疏文件里,每做一次快照会多产生一个数据文件加一个元数据文件。也就是说,所谓副本就是节点本地文件系统上的一堆普通文件。你可以用 ls 和 du 直接看到它们有多大,也可以在排障时直接进去翻目录——这在对象存储底座的方案上是做不到的。
顺带说一句版本演进。Longhorn 早期只有基于 iSCSI 的数据引擎,新版本引入了基于用户态高性能存储开发套件的第二代数据引擎,把 iSCSI 换成 NVMe over Fabrics,数据路径从内核挪到用户态轮询。第二代引擎在延迟上有明显收益,代价是需要巨页、需要特定的内核与网卡支持、CPU 占用也更高,功能覆盖度和稳定性还不如第一代成熟。对没有专职存储工程师的团队,第一代引擎仍然是更稳的选择;只有在明确测出中间那一跳是瓶颈,并且愿意投入调试成本时,才值得去碰第二代。
这个结构带来四条直接推论。第一,副本吃的是某块盘上的文件系统空间,ext4 还是 xfs、有没有开配额、索引节点够不够,全都参与进来。第二,副本文件是稀疏的,卷标了 100 GB 但实际只写了 10 GB 时占不了 100 GB,可是快照一旦堆起来,占用就会往卷容量逼近。第三,性能天花板是任意一份副本所在的那块盘,加机器不会让单个卷变快,只会让副本有地方挪。第四,节点本地盘一旦损坏,副本就少一份,剩下的副本要重新补齐,这个过程是要花时间和带宽的。
从 Pod 里执行写入到数据真正落到几块盘上,中间要穿过好几层。应用写文件,先进内核页缓存,文件系统把脏页提交给块设备;这个块设备并不是一块真的硬盘,而是 open-iscsi 在本机映射出来的设备节点;写请求经 iSCSI 协议封装走 TCP 送到引擎进程(iSCSI 目标端口默认 3260,引擎与副本之间的数据通道占用 9500 段端口,具体端口以你所用版本的官方文档为准);引擎再把这份写分发给自己管理的每一个副本,副本写进各自的数据文件并返回确认,引擎等齐了才向上返回。
这里有三个必须知道的点。其一,open-iscsi 必须装在每一台会跑有状态 Pod 的工作节点上,并且要设成开机自启。它不在 Pod 里,也不在 Longhorn 的镜像里,是宿主机依赖。很多 Pod 卡在创建中、事件里报挂载超时的故障,根因就是新扩容的机器忘了装,或者装完没有把服务拉起来。
其二,数据路径上多了一次内核块设备到用户态进程的往返,4K 小写的每一次协议封装和上下文切换都是实打实的开销,所以 Longhorn 卷的输入输出能力一定低于同盘的裸文件系统,这个损耗倍数要靠自己实测,别照抄别人的数字。其三,副本同步默认是同步写,不是异步:引擎要等到所有健康副本都确认落盘才向上应答。对 MySQL、PostgreSQL、etcd 这类频繁刷盘的服务来说,这意味着一次 fsync 的真实耗时约等于本地盘的刷盘耗时加上最慢那个网络副本的往返延迟,再加上远端盘的刷盘耗时。平均值没有意义,决定体验的是最慢的那一跳以及它的长尾。
副本从 2 提到 3,写延迟涨多少?如果几台机器在同一个机柜、同一台交换机下,往返延迟在零点几毫秒量级,本地 NVMe 的刷盘本身就是百微秒级,多等一跳的感受并不明显,多数业务测不太出来。但如果第三副本跨了机柜甚至跨了机房,往返延迟抬到几毫秒甚至更高,同样的写入路径上就多了一个毫秒级的固定等待,单线程事务型数据库的吞吐掉一个数量级是很常见的事。所以副本数该设几,从来不只是可用性问题,它同时是个拓扑问题。
网络流量上是硬账:写 1 GB 数据,2 副本时有 1 GB 要出门,3 副本时有 2 GB 要出门。副本数每加一,写路径上就多一份出口流量。如果你打算在 1G 内网跑 Longhorn,先算一下峰值写入带宽乘以副本数,再决定要不要上万兆。别等到重建开始、业务接口集体超时,才发现带宽根本不够。
更要紧的是副本重建。节点重启、磁盘换掉、副本被认定失效之后,Longhorn 会把健康的副本整卷拷到新位置。这是全量拷贝,不是增量——一个 500 GB 的卷重建就要在网络上搬 500 GB,同时在新盘上写 500 GB。集群里如果同时有三五个大卷在重建,业务 IO 会被直接挤下去,表现是监控上 IOPS 掉到平时的几分之一、应用超时变多。新版本提供了重建相关的限速与等待间隔设置,是否可用、默认值是多少,以你所用版本的文档为准;不管有没有限速开关,把大卷拆小、把重建窗口错开到业务低峰,都是更实在的做法。
还有一个常被忽略的点:卷的引擎进程是单点的。副本可以有多份,但在任意时刻真正处理写入的引擎只有一个,它跑在某个确定的节点上。这意味着单个卷的吞吐上限不仅受副本盘限制,也受引擎所在节点的 CPU 和出口带宽限制。把大卷拆成多个中等卷、把热卷分散到不同节点、避免让十个高写入的库都把引擎落在同一台机器上,通常比继续堆副本数更能提升整体吞吐。
可用性的账也要算清:3 副本时单节点故障后还剩 2 份,重建期间再坏一块盘也不至于立刻丢数据;2 副本时单节点故障就只剩 1 份,整个重建窗口期处于零冗余状态,这段时间里任何一次意外都是在赌运气。所以延迟敏感的库用 2 副本加同城低延迟网络可以接受,但前提是你把重建时间压得足够短,并且清楚自己在赌什么。
很多人给 Longhorn 配机器,先看 CPU 核数和内存,这是配错了方向。Longhorn 的数据路径上,CPU 的活儿主要是协议封装、校验和一些元数据操作,真正决定体验的是磁盘的 4K 随机写能力、刷盘的 p99 延迟,以及长时间运行后的稳态表现。一台 32 核的机器配一块消费级 SATA 固态盘,跑出来的数据库性能一定不如一台 8 核配企业级 NVMe。
消费级 SATA 固态盘在 Longhorn 上掉速,原因不神秘。一是没有掉电保护,盘固件为了保命会在垃圾回收时把写延迟拉到几十毫秒;二是颗粒直写加上缓存区,前几十 GB 写得飞快,缓存用尽之后进入稳态,写延迟翻几倍;三是有标称寿命限制,一天写满一两个整盘的量就会快速消耗寿命。把这样的盘放进 Longhorn,还会再多一层放大:一次刷盘要等若干份副本,任意一份正在垃圾回收卡顿,整体的 p99 就被拉高;副本越多,撞上最慢那块盘的概率越高。
企业级 NVMe 值得花钱的地方在一致性,不在峰值。它的顺序带宽标称值看着和消费盘差不了太多,但 p99 刷盘延迟能稳定在百微秒量级,掉电保护让盘敢于激进地回写,多队列并行又正好匹配 Longhorn 多卷并发时的场景。SATA 走的是 AHCI 单队列,队列深度一上来就堵;NVMe 有几万个队列,几十个卷同时写也不会互相排队。此外 NVMe 的单盘容量普遍更大,对副本要占若干倍空间这件事更友好。
按服务类型分开看会更直观。MySQL 和 PostgreSQL 这类关系库,核心指标是刷盘延迟和 4K 随机写,盘要好、副本数可以保守、网络要近。Redis 开启每秒刷盘的持久化后对 fsync 同样敏感,但它的数据量通常不大,反而是 fork 瞬间的内存与写时复制开销更值得关注。Prometheus 是典型的追加写加大块读,对随机 IO 不敏感,但对容量增长和重建时间敏感,用 3 副本加限速重建比较合适。Elasticsearch 数据节点是随机读写混合加大量小文件,段合并时的写放大很重,磁盘要留足余量。MinIO 和 Jenkins 工作区对延迟不敏感,前者考验单盘容量,后者考验元数据与小文件性能。把这几类负载混在同一批盘上,就得按最挑剔的那个来配,这是很多团队配置失真的根源——平均负载看着不高,最挑剔的那个服务却在拖整批盘。
还有一层写放大来自 Longhorn 自己。卷有快照链之后,一次 4K 的随机写可能要先读出旧数据、合并、再写回,变成读改写;叠加固态盘内部的垃圾回收,最终落到存储颗粒上的数据量可能是业务写入量的数倍。所以选型时不要看厂商标称的几百兆每秒顺序带宽,那对数据库没有意义;要看的是稳态 4K 随机写 IOPS 和 p99 延迟,并且最好用 fio 在自己打算买的盘上跑一遍。公开资料只能作为参考,具体数字需向服务商确认或以实测为准。
快照和备份在 Longhorn 里是两件完全不同的事,混为一谈是很多事故的起点。快照是本地的、链式的、写时复制的:做一次快照,就是把当前的卷头冻结成一个只读层,新的写入进新的卷头。快照和副本住在同一块盘上,盘坏了它们一起没。备份则是把卷的数据块打包推到外部存储,NFS 或者 S3 兼容的对象存储都行,第一次是全量,之后是增量。备份在集群之外,集群整个出问题它还在。
快照链的代价是读放大。链上每加一层,读一个块就要多判断一次这个块在哪一层,随机读尤其吃亏。链到十几二十层之后,卷的性能会肉眼可见地往下掉。反过来,删快照也不是免费的:删掉中间某一层,需要把它的内容合并到下一层,这是一个重 IO 操作,合并期间业务会明显卡顿。所以每小时一次快照且从不清理是最典型的作死姿势——磁盘被吃掉不说,等你想清理的时候,一次合并就能把业务拖死。
快照的间隔和保留份数应该由业务的恢复点目标倒推:能接受丢一小时数据,就一小时一次;能接受丢一天,就没有必要跑到小时级。保留份数同理,留够回滚窗口就行。定期做合并、定期把老快照清掉,是必须排进运维日历的动作,不是想起来才做的事。对于 Jenkins 工作区这类可重建的数据,甚至可以不设快照,把资源留给真正需要保护的库。
备份目标本身怎么选也值得说一句。NFS 部署简单,在内网里速度也不错,但它本身是个单点,盘坏了备份跟着一起没,所以至少要做到异地再拷一份。S3 兼容的对象存储耐久性好、天然多副本,放在内网时可以兼顾速度与可靠性;走公网则要额外考虑带宽成本和出网流量。无论选哪种,都要定期做恢复校验——备份存在不等于能恢复,只有真的恢复出来并且业务能跑通,这份备份才算数。建议每季度做一次完整恢复演练,把耗时、IO 峰值和遇到的问题记进运维台账,下次真出事时这份记录就是预案。
备份任务的挤占主要在两处:一是要读快照链算差量,产生大量读 IO,和业务的写抢同一块盘;二是要把数据推出去,和副本同步、业务流量抢同一张网。如果备份目标在公网上,还要额外承受带宽受限和丢包带来的重试。可行的做法是把备份窗口放到业务低峰、给备份任务限速、条件允许时把备份目标放在内网的对象存储上。恢复时更要小心:从备份拉回数据要重建整个卷并重新补齐副本,IO 和网络都处在峰值。千万不要让第一次恢复演练发生在真实故障现场——先在测试环境完整跑一次,把耗时和 IO 峰值记下来,才知道事故时该给业务方什么预期。
副本往哪放,Longhorn 有一套调度约束。默认情况下,同一个卷的不同副本要求落在不同节点上,所以单节点的测试环境如果不显式打开节点级软反亲和,卷会一直处在调度中的状态,PVC 永远绑不上。这个开关在测试环境可以开,在生产环境不应该开,开了就等于放弃了节点故障隔离。同一节点内的多块盘之间也有类似的反亲和倾向,具体行为以版本文档为准。
磁盘能不能再放新副本,看的是两个阈值。一个是可用空间下限:某块盘的可用比例低于设定值时,这块盘会被标记为不可调度,新的副本不会再落到它上面。公开资料显示这个默认值在 25% 附近,具体以你所用版本的文档为准。另一个是超配比例:承诺给卷的容量可以超过磁盘的实际容量,默认通常允许超配到两倍左右。超配本身不是坏事,因为多数卷不会真的写满,但它意味着集群显示还有空间和真的还有空间是两回事,一旦多个卷同时涨起来,就会一起撞到水位。
磁盘真的写满之后,Longhorn 的表现比变慢要糟糕得多。盘被标记不可调度只是第一步,已经落在上面的副本会停止写入,卷转入降级甚至故障状态,Pod 里的文件系统可能变成只读或者直接报 IO 错误,应用进程会卡死或者崩溃。这时候再去删数据,往往已经动不了了。所以水位线不是建议,是底线:给每块盘留出 25% 到 30% 的余量,用来承接重建时的临时占用、快照链的膨胀,以及文件系统在接近满盘时的不稳定行为。
卷扩容也要提前想清楚。PVC 扩容在 Longhorn 侧会把卷的标称大小和每一份副本文件的上限一起调大,但真正生效还要文件系统在 Pod 里完成在线扩容,不同文件系统和不同 Kubernetes 版本的行为并不一致,有些场景需要重建 Pod 才能看到新容量。更麻烦的是副本所在盘必须有足够空间承接扩容后的占用:盘上只剩百分之十几的时候,扩容请求会直接失败,而此时业务往往已经把卷写满了。所以扩容动作应该在水位告警刚触发时就做,不要等到卷写满才想起来。
还有一条很容易踩:扩容时只看集群总容量不看单盘。调度是按盘做的,不是按集群做的。三块盘里一块满了,另外两块还剩 80%,卷的副本就是有可能放不进去。所以扩容要么是每块盘都扩,要么加盘之后主动做副本再平衡,把老盘上的副本挪一部分到新盘,让各盘的水位重新拉平。这件事在采购阶段就要想好——买机器时选多盘位的机型,比事后想办法挪数据便宜得多。
副本同步流量和业务流量混在一张网上,短期看不出问题,出事的时候一起出。备份任务和副本重建都会长时间打满上行,业务请求排队,接口响应时间先抖后涨;更麻烦的是 iSCSI 对丢包很敏感,网络一抖就可能出现重传甚至连接中断,卷直接掉。所以只要条件允许,给 Longhorn 单独一张存储网,或者至少划一个独立 VLAN 和网段,把副本同步、备份流量从业务网里摘出去,这是投入产出比最高的一项改动。
存储网上有几件事值得做。开巨帧:把 MTU 提到 9000,大块拷贝时包数少一大截,中断和 CPU 都省下来;但整条路径上的交换机、网卡、对端都必须一致,只在一端开会导致路径 MTU 探测黑洞,表现是连接时好时坏,极难排查。做中断绑定和队列调优,让万兆网卡的中断不要全压在一个核上。监控别只看带宽,小包 4K 写在万兆链路上往往是包转发率先到顶,带宽还有富余但延迟已经上去了。
算一笔具体的账:假设业务峰值写入 100 MB/s,3 副本时引擎要把数据发往另外两个副本,出口流量大约是 200 MB/s,再叠加重建和备份,峰值轻松超过 400 MB/s。1G 内网的实际上限大约 110 MB/s,连基础写入都扛不住;2.5G 大约 280 MB/s,勉强够写入但没有给重建留余量;万兆大约 1.1 GB/s,才留出重建和备份的空间。这就是为什么标准档往上我们一律建议万兆,2.5G 只在写入量很小、副本数为 2 的场景下可以接受。数字是理论换算,实际能跑多少需在自己的链路上实测确认。
延迟这一项要说重话。跨机房放副本,本质上是把每一次刷盘的最低耗时抬到跨机房往返延迟的量级。同城同机房往返零点几毫秒,跨城可能是几毫秒到十几毫秒,这个差距会原封不动地落到数据库的事务延迟上。因此跨机房做 Longhorn 副本要非常谨慎,通常更合理的形态是同城内做副本冗余、异地用备份来做容灾,而不是把副本直接拉到异地。至于跨公网做副本,那是既不安全也不稳定的选择,延迟、丢包和加密开销加起来,会让卷在正常时期也处于危险的边缘。
下面这张表按 CPU、内存、硬盘、网络、单机盘位与容量、可用性与运维成本六个维度,把三档常见机器形态摆在一起对照。三档不是官方分级,而是我们在服务器租用咨询里最常遇到的三种预算与规模:单机验证、三台起步、三到五台核心业务。
| 对比维度 | 入门档(单台 4–8 核 + 2 块固态盘) | 标准档(3 台 8–16 核 + NVMe) | 高可用档(3–5 台 + NVMe + 独立存储网) | 选型判据 |
|---|---|---|---|---|
| CPU | 4–8 核,够跑控制面与少量卷,卷一多就排队 | 8–16 核,需为实例管理器与中断预留 2–4 核 | 16–32 核,重建、备份压缩与业务高峰叠加时不抢核 | 核数不是瓶颈,但别让存储进程的中断和业务抢同一个核 |
| 内存 | 16–32 GB,留给 Longhorn 组件的余量很紧张 | 64–128 GB,实例管理器按卷数线性增长需预留 | 128–256 GB,重建与备份并行时不触发驱逐 | 按卷数预留:卷越多,副本进程与页缓存吃内存越多 |
| 硬盘 | 2 块 SATA 固态盘,稳态随机写抖动明显 | 每节点 1–2 块企业级 NVMe,看 p99 不看顺序带宽 | 每节点 2–4 块企业级 NVMe,副本跨盘分布 | 先看 4K 随机写与 p99 刷盘延迟,再看容量与寿命 |
| 网络 | 1G 内网,重建时业务会被拖垮 | 2.5G 起步,建议万兆,副本同步与业务同网需限速 | 万兆或 25G 独立存储网 + 独立 VLAN,MTU 9000 | 带宽要按写入量乘以副本数算,延迟看往返与抖动 |
| 单机盘位与容量 | 2 盘位,去掉系统与副本冗余后可用空间很小 | 4–6 盘位,单盘 1.92–3.84 TB,留 25%–30% 水位 | 8–12 盘位,可分期加盘并做副本再平衡 | 采购时多看盘位,后期扩盘的弹性比初始容量更值钱 |
| 可用性与运维成本 | 单点,节点故障即服务中断,只适合验证 | 容忍单节点故障,重建窗口内冗余下降 | 容忍单节点故障且重建不挤业务,值班压力最小 | 没有专职存储工程师时,宁可多花在硬件上少花在排障上 |
把这张表再翻译成一句人话:CPU 和内存只要别卡住就行,硬盘和网络才是决定成败的两项。入门档的问题不在核数少,而在于只有一块盘位放副本、且盘的稳态写延迟不可控,它适合跑功能验证、CI 缓存、日志收集这类可以重建的数据,不适合放主库。标准档是绝大多数中小团队该到的位置:三台机器保证副本能跨节点,企业级 NVMe 保证刷盘延迟的尾部可控,万兆内网保证重建不至于把业务打死。高可用档多花的钱主要买两样东西——独立存储网带来的确定性,以及多盘位带来的扩展弹性。
需要提醒的是,表里写的容量区间只是常见配置区间的参考,不是承诺。具体机型的盘位、单盘可选容量、内网带宽规格,不同机房不同时期都不一样,以服务商官方实时配置单为准,采购前需向服务商确认。
现象:机器运行几个月后系统盘突然满了,连 SSH 登录都开始报错,Longhorn 控制台上一片红色告警。原因:默认数据目录落在系统盘,副本文件加上快照链一路涨,把系统盘吃干,而系统盘上还跑着日志、容器镜像和 kubelet。处置:部署前就把数据目录挂到独立的数据盘上,单独的文件系统、单独的挂载点;已经上线的集群,先把卷 detach,再迁移目录并逐个校验副本完整性,不要在线直接 mv。
现象:卷间歇性进入降级,业务写入偶发卡死几秒,控制台上副本状态反复变化。原因:公网往返延迟高、丢包和抖动不可控,iSCSI 会话频繁重连,同步写要等最慢副本,一旦超时就判定副本失效触发重建,重建又进一步挤占链路,形成恶性循环。处置:副本只放在同城低延迟内网里,异地容灾改用备份推到对象存储,不要用副本跨公网。
现象:磁盘占用持续上涨,某天清理快照时业务几乎停摆,IO 延迟飙到秒级。原因:快照链无限增长,读放大越来越重;一次性删除大量快照触发大规模合并,合并是重 IO 操作。处置:按恢复点目标重设间隔与保留份数,清理动作分批在低峰执行,并提前演练一次合并耗时。
现象:这块盘一出问题,所有卷同时降级,且副本无处可去,只能等盘修好。原因:副本反亲和要求不同节点,即便同节点内允许不同盘,单盘也意味着没有任何冗余和任何迁移空间。处置:每节点至少两块数据盘,副本跨盘分布;采购时优先选多盘位机型。
现象:卷数量涨上去之后,实例管理器被 OOM 杀掉或者被驱逐,一批卷同时掉线。原因:实例管理器托管着引擎与副本进程,卷越多进程越多,内存和 CPU 消耗线性增长;没有设置资源预留时,它会和业务 Pod 抢资源,且在节点压力大时优先被驱逐。处置:按卷数给实例管理器配置资源请求与限制,节点上为存储组件预留固定份额,并给相关命名空间设置高优先级。
现象:副本元数据时间戳错乱,备份任务时间对不上,快照列表里的创建时间前后颠倒,偶发出现莫名其妙的校验失败。原因:分布式系统依赖各节点时钟一致,节点间时钟漂移会让元数据比较、证书校验、定时任务判断全部失真。处置:所有节点统一配置 NTP 并监控时钟偏移,虚拟化环境下尤其要避免依赖宿主机的时钟漂移同步。
现象:集群显示还剩一半空间,新卷却创建失败,或者副本调度一直卡住。原因:调度是按盘判定的,某块盘跌破可调度阈值就会被标记为不可调度,别的盘再空也用不上。处置:监控要按盘建,不要只建集群级;扩容要么每块盘同步扩,要么加盘后做副本再平衡。
现象:升级过程中卷大面积 detach 失败,业务长时间不可用,回滚也回不去。原因:升级涉及实例管理器与引擎进程的重建,附着中的卷需要有序处理;跨版本升级还可能涉及数据格式兼容性。处置:严格按官方升级路径逐级升,升级前备份、腾空节点上的卷、确认没有正在进行的重建与备份任务,并在测试集群先升一遍。
现象:PVC 一直处于等待状态,或者挂载成功后多个 Pod 同时写入,文件互相覆盖、数据损坏。原因:Longhorn 的共享卷底层依赖额外的网络文件系统共享组件,不是原生块语义;多 Pod 同时写同一个文件系统的一致性要由应用自己保证,存储层不负责。处置:真正需要多挂载共享的场景,改用成熟的文件存储或对象存储网关;只是为了迁移而短暂双挂载的场景,用单挂载模式配合 Pod 重建即可。
现象:只有新节点上的有状态 Pod 起不来,事件里是挂载超时,老节点一切正常。原因:open-iscsi 是宿主机依赖,不在镜像里,装完还要保证服务开机自启。处置:把它写进节点初始化脚本或镜像模板,并在节点加入集群的准入检查里加一条探测。
Longhorn 是对的选择,通常具备这几个特征:已经有 Kubernetes 且不想再引入一套独立存储集群;团队里没有专职存储工程师,需要出了问题能靠 ls 和日志自己看懂;卷的数量在几十到一两百的量级,单卷规模在 TB 级以下;能接受副本带来的容量翻倍,也就是 1 TB 有效数据实际要占 2 到 3 TB。它最大的价值是让中小团队用买几块 NVMe 的钱,换来一套能自动重建、能快照、能备份的有状态存储,而不用养一套复杂的存储栈。
该换方案的情况也很明确。追求极低事务延迟的核心库,本地盘加本地卷仍然是最短路径,中间多一跳 iSCSI 和多一份网络同步就是多一份延迟;单卷数 TB 以上且持续高吞吐的场景,重建成本和写放大会变得难以承受;以多挂载共享读写为主的场景,Longhorn 的共享卷底层依赖 NFS 组件,性能和运维复杂度都不如直接用成熟的文件存储或对象存储网关;需要跨机房强一致双活的,应该交给数据库层的主从或分布式方案,而不是指望存储层。
最后一条判断标准落在团队本身。Longhorn 的运维复杂度集中在三处:卷状态与副本健康的日常巡检、存储组件的版本升级、故障时的重建与恢复。如果团队里已经有人能看懂 iSCSI 会话、能读得懂副本目录里的文件、愿意每季度做一次恢复演练,那长期成本是可控的;如果连在节点上装 open-iscsi 这件事都要外包,那更该考虑托管型的存储服务,而不是自己维护一套分布式存储。工具没有好坏,只有和团队能力是否匹配。
上生产前,建议按顺序跑完这六项验证。第一,用 fio 在节点本地盘上测基线,记录 4K 随机写的稳态 IOPS 和 p99 延迟,再挂一个 Longhorn 卷用同样参数测一遍,得到自己的损耗倍数,这个数字决定你能不能接受。第二,做节点故障演练:驱逐并关掉一台机器,观察卷的重建耗时、重建期间业务的响应时间曲线,以及重建完成后副本是否回到健康。第三,做满盘演练:造一个大卷把某块盘压到水位以下,确认调度行为和告警链路符合预期。
第四,做备份恢复演练:从备份存储完整恢复一次,记录耗时和 IO 峰值,把数字写进应急预案。第五,做快照链压力演练:连续跑一天高频快照再集中清理,观察合并时业务的抖动幅度,据此定下正式的快照策略。第六,做网络抖动演练:在存储网上注入短时间丢包,看 iSCSI 能否重连成功、卷会不会被判故障。这六项全部跑通并留下记录,Longhorn 才算真正可以进生产。
如果把这篇手册压缩成三句话:第一,Longhorn 的性能天花板是任意一份副本所在的那块盘,钱应该优先花在企业级 NVMe 和万兆存储网上,而不是 CPU 核数上。第二,副本数、快照策略、备份窗口这三件事必须一起定,它们共同决定了重建带宽、磁盘水位和业务抖动,单独优化任何一项都会把压力转移到别处。第三,水位线不是建议而是底线,每块盘留 25% 到 30%,按盘监控而不是按集群监控。
对三到十台机器的中小团队,我们的建议是:标准档起步,三台机器、每节点企业级 NVMe、万兆内网、副本 2 到 3 按业务分级,快照按恢复点目标定频并按期清理,备份推到内网对象存储并每季度演练一次恢复。把这套跑稳半年,再决定要不要扩到高可用档。先跑验证再上生产,是这篇手册里最想传达的一条。
一万网络深耕 19 年(成立于 2007 年),长期做服务器租用与托管,接触过大量 Kubernetes 集群的存储选型与扩容需求。围绕 Longhorn 这类有状态场景,我们可以协助做几件事:按你的卷数量、单卷规模和恢复点目标,给出 CPU、内存、盘位、单盘容量与内网带宽的配置建议;帮你判断该选单台验证、三台起步还是独立存储网的高可用形态;在机器到位后协助确认磁盘与网络的基线表现,把 fio 实测数字和你的业务要求对齐。
具体到机型、盘位数量、可选单盘容量与内网带宽规格,不同机房不同时期的可选项都不一样,我们不在这里给出报价,具体以官方实时报价为准,需向服务商确认。你可以把现有的集群规模、卷清单和业务类型发过来,我们从硬件账的角度帮你算一遍,再决定要不要上、上哪一档。
Copyright © 2013-2020 idc10000.net. All Rights Reserved. 一万网络 科技有限公司 版权所有 深圳市科技有限公司 粤ICP备07026347号
本网站的域名注册业务代理北京新网数码信息技术有限公司的产品