简介:这是一份深信服企业级分布式存储aStor-EDS 3.0.4的部署与配置最佳实践指南,面向网络设计工程师、运维人员等需要落地分布式存储项目的IT人员。文档围绕硬件环境准备、操作系统安装、集群网络规划、存储私网/外网配置等关键步骤展开,同时也覆盖基本操作、存储管理、安全管理等日常使用内容,能够帮助读者在真实环境中快速完成EDS部署并规避常见配置风险。资源包为单个PDF文件,大小498KB,配有前言、目录、符号约定、术语解释和技术支持信息,体量不大但结构完整,便于按需查阅。目前已有240人学习,内容偏工程实践,步骤描述清晰,对需要搭建或维护aStor-EDS环境的技术人员来说具有直接参考价值,也适合作为项目交付前的操作核对清单。
1. aStor-EDS 部署文档里藏着的东西,比命令多得多
拿到《深信服企业级分布式存储 aStor-EDS 部署和配置最佳实践_V3.0.4.pdf》这份文档的人,通常不是来学概念的,而是被生产环境里的某个具体问题逼到这一步的:要么是机房里的集中式存储容量见底,扩容要按柜买授权,预算批不下来;要么是虚拟化平台跑了一批关键业务,但存储的 IOPS 和时延在晚高峰波动得让 DBA 半夜爬起来看慢查询。aStor-EDS 这类分布式存储的价值,就落在这两个点上——它用通用 x86 服务器加万兆/二十五万兆网络,把多台节点的磁盘聚合成一个统一存储池,通过副本或纠删码来扛磁盘和节点故障,然后以块、文件、对象三种接口对外提供服务。V3.0.4 是 2024 年前后的稳定分支,部署和配置逻辑在 3.x 系列里是一致的,理解这一版的关键路径,后面小版本升级基本不需要改架构认知。本文按一线运维真正会碰到的顺序来走:先讲部署前那堆没人替你想的规划,再讲初始化配置里最容易反复返工的参数,然后落到性能调优和排障,最后给一个我在生产环境里常用的验证技巧。
部署 aStor-EDS 的坑,十有八九不在安装这一步,而在工程师对「分布式存储的延迟来自网络和磁盘协同」这件事的体感不足。很多人把节点装完、存储池建好、业务挂上就以为完事了,等出现性能抖动或节点异常,才发现自己连日志从哪儿看、指标在哪个命令下都摸不着门。这份文档我建议你带着三个问题去读:节点间的心跳和数据复制走哪个网络平面、磁盘分组时 SSD 和 HDD 的比例怎么算、故障域是照着机架设还是照着节点设。这三个问题想清楚,部署和配置的过程会顺非常多。
2. 部署前置规划:硬件选型、网络平面和故障域设计
2.1 先算容量和性能,再定节点数量,而不是反过来
很多人部署 aStor-EDS 的第一步是问「我要几台机器」,这是典型的倒果为因。正确顺序是先算清楚业务侧对容量和性能的约束,再反推节点最低数量。文档 V3.0.4 里给的官方建议是副本模式下最少 3 节点,纠删码模式下最少 4 节点,但如果你的业务模型是 OLTP 数据库这类高 IOPS 小 IO 场景,3 节点的延迟和并发能力会很吃紧,生产环境我一般建议从 4 节点起步。单节点能提供的裸容量,取决于你插了多少块盘——aStor-EDS 对磁盘数量没有硬性下限,但你至少要留出一块系统盘,剩下的才是数据盘。一个常见实践是每节点 12 块 3.84TB NVMe SSD 加 2 块系统盘,12 块盘做数据盘时,单节点裸容量约 44TB,4 节点 176TB,扣掉副本或纠删码开销后可用容量得按公式单独算。
容量计算时有个容易忽略的点:aStor-EDS 的可用容量不等于裸容量除以副本数。它还要扣除系统预留、元数据空间和告警阈值。我一般会在规划文档里用这个公式来估:
可用容量 ≈ (单节点数据盘裸容量 × 节点数) × (1 - 系统预留比例) / (副本数 或 纠删码开销)其中系统预留比例在 V3.0.4 里常见取值为 5%-8%,这包含了根分区、日志、元数据等开销。纠删码模式下,4+1 或 8+2 的开销需要按具体策略查配置界面里的说明,不能简单按 2/3 或 4/5 去估,因为不同纠删码算法对 CPU 占用和网络带宽的影响差异很大。规划节点数量时,除了容量还要留 20%-30% 的性能余量,尤其当存储池里同时跑块存储和文件存储业务时,SCSI 锁和元数据操作的争用会让延迟明显上升。
2.2 网络平面至少拆成三个:业务、存储、管理
aStor-EDS 部署文档里最容易被跳过的章节是网络规划,但生产环境里 80% 的「存储变慢」问题都出在这里。V3.0.4 版本默认要求业务网络和存储网络分离,管理网络可以复用业务网络,但我强烈建议三个平面全部独立,成本增加不大,排障时能省太多时间。业务网络面向的是虚拟化主机或数据库服务器,承载 iSCSI/NFS/S3 等前端协议;存储网络承载的是节点间的数据复制和心跳通信,这块儿带宽不够,集群就容易出现节点误判和副本同步滞后。
| 网络平面 | 推荐带宽 | 承载流量 | 故障影响 |
|---|---|---|---|
| 业务网 | 万兆起 | iSCSI/NFS/SMB/对象访问 | 业务侧连接中断 |
| 存储网 | 万兆起,建议双万兆绑定 | 节点间数据复制、Rebalance | 数据冗余下降,IO 延迟升高 |
| 管理网 | 千兆即可 | Web 管理台、SSH、监控采集 | 管理面不可用,数据面不受影响 |
文档里给的 V3.0.4 默认配置中,存储网络的 MTU 默认是 1500,但我建议在交换机支持的前提下设置成 9000,也就是开启巨帧。调整方式是在每台节点上把存储网卡的 MTU 改成 9000,同时交换机对应端口也要放行,否则会出现一种很隐蔽的现象:心跳正常、管理面正常,但数据复制带宽上不去,存储池状态始终处于「同步中」。
# 以 CentOS/Rocky Linux 为例,设置存储网络 MTU 为 9000 nmcli connection modify ens7f1 mtu 9000 nmcli connection up ens7f1设置完用ping -M do -s 8972来验证对端也是 9000 的 MTU,能通说明端到端没问题,不通就查交换机端口的mtu配置,别先怀疑存储软件。这个细节在文档里藏在「网络配置建议」一节,但实际生产环境中检查它的优先级应该排在最前面。
2.3 故障域设计:节点级还是机架级
故障域是部署前必须做的另一个决策。V3.0.4 默认支持节点级和机架级两种故障域配置。节点级故障域表示同一个数据块的多个副本分散在不同节点上,节点宕机不影响数据可用性;机架级故障域则要求副本分散在不同机架,能扛住整个机架断电或交换机宕机。对于机架数量少于 3 个的中小型机房,节点级已经足够;但如果你的集群规模超过 10 个节点且分布在多个机架,机架级故障域可以显著降低同时掉多块盘导致数据不可用的概率。
故障域的设计直接影响副本策略的创建。文档里推荐的规划方式是:先画机房拓扑图,标清楚每台节点所在的机架位置,再把副本数或纠删码的failure domain参数按拓扑来设置。如果创建存储池时选错了故障域策略,后续调整需要重建存储池,数据迁移的时间和风险都很大。这就是为什么我在部署前一定要先拿到机房的网络拓扑图,而不是等存储池建好了再补。
3. 安装和初始化配置:从 ISO 到第一个存储池
3.1 安装方式选择和最小化系统准备
aStor-EDS V3.0.4 官方支持的安装方式有两种:一种是使用深信服提供的 ISO 镜像直接安装,适用于全新服务器,安装完自带存储操作系统和集群管理组件;另一种是在已有的 CentOS/Rocky Linux 上部署软件包,适合已有虚拟化平台或不想被绑定特定 OS 的场景。生产环境我强烈推荐第一种,原因很简单——aStor-EDS 需要精确控制内核模块、网卡驱动、IO 调度器和文件系统参数,基于统一 ISO 的版本组合是厂商验证过的,后续排障时能得到更有效的支持。
用 ISO 安装时,最少要准备一个 RAID 卡或直通模式(HBA)下的磁盘配置。这块有个常见的部署争议:系统盘能不能和数据盘混插在同一个 RAID 卡后面。我的建议是分开。数据盘如果走 RAID 卡,必须设置为 JBOD 或直通模式,不能做 RAID5/RAID10,因为分布式存储需要直接看到每块物理盘的 SMART 状态和空间,RAID 会遮挡这些信息,导致 aStor-EDS 误判磁盘健康度。系统盘可以保留 RAID1,操作系统本身对这类管理的可靠性要求更高。
安装完成后,第一件事不是登录 Web 管理台,而是在命令行检查三个东西:时区是否一致、主机名是否符合规划、节点间 SSH 免密是否已配置。前两个不做会导致后续监控时间线错乱,第三个不做的话,你会在节点加入集群时卡在密钥交换的报错上。
# 统一时区为 CST(Asia/Shanghai),所有节点执行 timedatectl set-timezone Asia/Shanghai chronyc makestep # 配置各节点 hosts 解析,用管理网 IP 互相解析 cat >> /etc/hosts <<EOF 10.10.20.11 eds-node01 10.10.20.12 eds-node02 10.10.20.13 eds-node03 10.10.20.14 eds-node04 EOF这一步做完,再到 Web 管理台里做集群初始化,节点间的通信就会顺畅很多。很多部署文档上来就引导你添加节点,但节点发现和心跳是靠 IP 和主机名匹配的,解析不一致会导致节点反复「离线」「在线」切换,看起来像网络抖动,实际是名字解析没配好。
3.2 初始化集群的四个必选参数
初始化是 aStor-EDS 部署的第一步,也是参数最集中、最容易出错的一步。V3.0.4 的初始化向导会让你设置集群名称、admin 密码、NTP 服务器、存储网络网段、告警邮件服务器等。这几个参数里,我建议重点关注四个,因为它们决定了后续所有存储池和业务通道的走向。
第一个是存储网络网段,它要和业务网段严格分开,并且所有节点的存储网卡 IP 必须在同一网段内。第二个是集群名称,命名规则建议带业务属性,比如proddb-eds或backup-eds,别用cluster1这种,等集群多了之后 Web 管理台的辨识度会非常痛苦。第三个是 NTP 服务器,生产环境必须指向内网可用的 NTP 源,不能用系统默认的互联网时间服务器,否则在政务网或隔离网里时间同步会持续失败。第四个是告警邮件服务器,别图省事不填,存储集群的坏盘告警是运维的唯一预警渠道。
这四个参数对应文档里「初始化集群」章节的步骤,理论上照着向导填就行。但有个隐藏细节:初始化向导里会让你上传或确认 license 文件。V3.0.4 的容量授权文件是按节点数和容量购买的,license 不提前准备好,初始化完成后存储池创建会被拦下来。所以部署前要确认 license 文件是否能覆盖规划中的节点数和容量,否则建存储池时会出现「容量超过授权」的报错,这个报错容易让人误以为是磁盘配置问题,其实只是授权没对上。
初始化命令在命令行模式下也可以执行,适合没有图形界面或要通过脚本批量交付的场景:
# 以 aStor-EDS CLI 的初始化命令为例(V3.0.4) astor-eds cluster init --name proddb-eds \ --ntp 10.10.20.2 \ --storage-net 10.10.30.0/24 \ --license /path/to/license.dat--storage-net参数在 V3.0.4 的 CLI 里是一个网段,不是单个 IP,它决定了存储网络的广播域。如果这里写错了,节点加入时存储网卡不在同一网段,集群初始化会一直卡在「等待节点上报存储 IP」这一步。遇到这种情况,检查的重点是每台节点上实际存储网卡的 IP 是否真的属于10.10.30.0/24,而不是管理网段。
3.3 添加节点时的等待机制和常见阻塞点
初始化完成后,接下来是把所有节点加进集群。这一个步骤在生产部署中耗时最长,也最容易让新手误以为机器卡死了。在 Web 管理台的「添加节点」流程里,你选择一台未加入的节点,输入它的管理 IP 和 root 密码,系统会自动执行节点检查、安装存储组件、配置网络、加入集群。整个过程通常会持续 15 到 30 分钟,期间节点的屏幕上会打印大量安装日志,如果停留在某一步超过 10 分钟没有新输出,就需要介入排查了。
文档里对这个过程的描述不够细致,实际常见的阻塞点有三个。第一个是节点检查失败,比如磁盘数量不足或未识别到数据盘;第二个是存储网络不通,节点间无法通过存储 IP 互相访问;第三个是节点上的老数据未清理,比如之前装过其他集群,磁盘上残留分区表,系统会认为磁盘不可用。第三个问题尤其常见,因为大多数服务器的数据盘在出厂时可能已经有分区或文件系统残留。
# 清理数据盘残留分区表(谨慎操作,确认盘符后再执行) for disk in /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk /dev/sdl; do wipefs -a "$disk" sgdisk --zap-all "$disk" done执行这个操作前,务必确认列出的盘符都确实是数据盘而不是系统盘。在带 RAID 卡的服务器上,盘符顺序可能不固定,建议先把系统盘拔掉或确认好盘符映射再操作。清理完成后,重新进入添加节点流程,一般就能正常通过。
3.4 创建存储池:副本还是纠删码
存储池创建是部署过程中最需要业务判断的一步,因为选错冗余策略,后续调整的成本非常高,往往意味着数据迁移和业务中断。V3.0.4 的存储池创建界面会让我们选择数据冗余策略,常见的有 2 副本、3 副本和纠删码(EC)策略。2 副本的可用容量是裸容量的一半,写性能较好;3 副本的可用容量是裸容量的三分之一,但容忍两台节点同时故障;纠删码则会在 CPU 占用和网络开销上更高,但可用容量更高,适合大文件、备份归档类业务。
我的默认建议是:跑数据库、虚拟化这类对延迟敏感的关键业务的存储池,用 3 副本;跑备份、文件归档这类大块顺序写业务的存储池,用纠删码。生产环境里很多团队为了省空间把数据库存储池做成 2 副本,一旦一台节点硬件故障加上另一块盘同时坏掉,数据丢失的窗口会非常大。V3.0.4 的文档里有个表格专门对比了不同冗余策略的可用空间和容忍能力,建议部署前认真看一遍。
创建存储池时还有一个容易忽略的参数是「热备空间」。V3.0.4 默认会在每个存储池中预留 5%-10% 的空间用于数据重构,相当于全局热备盘。如果业务容量需求非常紧张,有人会把热备空间调到 0%,这会导致某块盘掉线时数据重构没有临时空间可用,整个集群进入只读保护状态。我的经验是热备空间至少保留 5%,这个比例在性能和安全性之间最均衡。
创建命令可以通过 CLI 完成:
# 创建块存储池,3 副本 astor-eds pool create --name pool_block --type block --replica 3 # 创建对象存储池,纠删码 4+2 astor-eds pool create --name pool_object --type object --ec 4:2创建存储池后,系统会自动开始后台数据均衡。刚创建完的存储池性能不会马上达到峰值,要等 30 分钟左右的数据分布稳定后,再接入业务,否则容易出现短时间延迟偏高。文档里没提这个等待期,但实际部署时我一定会跟业务方说明白这个时间窗口。
4. 业务接入与性能基线:块、文件、对象三种场景的差异化配置
4.1 块存储接入:iSCSI 的 target 和 initiator 配置
aStor-EDS V3.0.4 最常见的业务接入方式就是 iSCSI 块存储,虚拟化平台、数据库服务器都通过它来挂载存储池中的 LUN。接入过程涉及两个角色:aStor-EDS 一侧创建 target 并配置 LUN,业务服务器一侧配置 initiator 发起连接。生产环境里,我一般建议把 target 的 CHAP 认证加上,虽然配置多了一步,但能避免内网里其他机器因为 IP 误配而挂上这个存储。
创建 target 和 LUN 的路径,V3.0.4 的 Web 管理台在「块存储 > iSCSI Target > 创建」下面,可以一次性把 target、LUN 和允许访问的 initiator IQN 都配置好。以下是在业务服务器上连接 target 的常用命令:
# 安装 iscsi-initiator-utils 后(CentOS/Rocky 示例) yum install -y iscsi-initiator-utils # 设置 initiator 名称 echo "InitiatorName=iqn.2024.prod:db01" > /etc/iscsi/initiatorname.iscsi # 配置 CHAP 用户名和密码(需和 aStor-EDS target 侧一致) cat >> /etc/iscsi/iscsid.conf <<EOF node.session.auth.authmethod = CHAP node.session.auth.username = user_proddb node.session.auth.password = "YourStrongPassword" EOF # 发现 target iscsiadm -m discovery -t sendtargets -p 10.10.20.10 # 登录 target iscsiadm -m node -L all执行登录后,用iscsiadm -m session查看已建立的会话,确认其中的 target 名称和 IP 正确。这里有个部署文档很容易忽略的点:在管理台创建 LUN 时,每个 LUN 默认会有一个容量上限,比如 1TB。如果业务侧执行multipath -ll看到磁盘容量比预期小,先回到存储管理台确认 LUN 的容量是否定义正确,别在业务侧反复调操作系统层的分区。
块存储接入后要做的第一件事不是创建文件系统,而是配置多路径。V3.0.4 的块存储会典型地为同一个 LUN 提供多条路径,不做多路径聚合的话,I/O 会随机走在某一条路径上,带宽和延迟都不稳定。多路径配置在 etc/multipath.conf 中,这是业务接入的最后一步,但也是性能稳定性的关键一步。
4.2 文件存储接入:NFS 的挂载参数和企业版 SMB 的坑
文件存储场景中,NFS 是 Linux 主机挂载共享目录最常用的协议。V3.0.4 的文件存储 > 共享目录里创建 NFS 共享之后,业务侧挂载时最好不要直接用默认参数,生产环境需要显式指定nolock和noatime,前一个避免 NFS 锁相关的问题,后一个减少访问时间戳更新带来的额外写入。特别是在跑容器平台或大数据计算时,这两个参数对性能的影响非常明显。
# 在业务服务器上挂载 NFS 共享 mkdir -p /data/eds_share mount -t nfs4 10.10.20.10:/volume1/eds_share /data/eds_share \ -o nolock,noatime,rsize=1048576,wsize=1048576,hard,intrrsize和wsize是 NFS 的读写块大小,V3.0.4 默认值通常比较保守,手动加到 1MB 能明显提升大文件传输性能。如果业务侧都是小文件操作,也可以不做这个调整,因为 MTU 9000 环境下块大小过大对小文件场景反而会增加延迟。
SMB 场景下最常见的坑是「文件锁不释放」。V3.0.4 的 SMB 服务默认支持多用户共享,但 Windows 客户端打开文件后如果未正常关闭,文件锁会保留在服务端,其他客户端会出现「文件被占用」的报错。出现这种情况时,在管理台的「会话管理」里强制释放会话是应急办法,但更根本的解决是检查业务端的应用配置,避免设置过长的文件锁超时。这部分内容文档里没讲透彻,通常需要结合自己的业务行为排查。
4.3 对象存储接入:S3 兼容接口下的桶策略和生命周期
对象存储是 V3.0.4 后期版本重点扩展的功能,兼容 S3 API,所以对接的方式和 AWS S3 基本一致。创建用户和 AccessKey/SecretKey 后,用 s3cmd 或 aws cli 配置访问端点即可。文档里给出的默认监听端口是 80/443,在接入前要确认防火墙是否放行。
配置示例(以 aws cli 为例):
aws configure --profile eds_s3 <<EOF AKIAEXAMPLEACCESSKEY SecretKeyExampleSecretKey cn-north-1 json EOF # 查看已创建的桶 aws --endpoint-url http://10.10.20.10:80 s3 ls --profile eds_s3对象存储的一个高风险操作是桶策略配置。V3.0.4 的桶策略支持 IP 白名单和读写权限分离,但权限判断的逻辑与原生 AWS S3 存在差异。生产环境中我遇到过「桶策略配置为私有,但业务通过预签名 URL 访问时报 403」的情况,后来排查发现是s3:PutObject权限还需要额外的s3:GetObject配合,在配置桶策略时把读写权限同时授予才能避免。
对象存储的生命周期规则支持自动清理过期数据,适合日志归档类业务。创建规则时可以用通配符前缀过滤对象,再设置过期天数。这个功能能帮你避免数据无限增长的问题,但它不会精确到你设置的某个小时,实际触发可能延迟到下一个调度周期,所以别依赖它做严格的时间点删除。
4.4 性能基线测试:用 fio 在接入后立刻测一遍
接入业务前,给新存储做一次性能基线测试是非常有必要的。它能帮你确认存储配置的正确性,也能给后续性能问题排查提供对照数据。我一般在每套 aStor-EDS 集群交付时,都会用 fio 做一组 4K 随机读、4K 随机写、128K 顺序读、128K 顺序写测试,输出到一份文件归档。
# 4K 随机写测试,运行 300 秒,队列深度 32 fio --name=randwrite --ioengine=libaio --iodepth=32 \ --rw=randwrite --bs=4k --size=20G --numjobs=4 \ --runtime=300 --time_based --group_reporting \ --filename=/data/eds_share/testfile --output=randwrite_4k.json # 128K 顺序读测试 fio --name=seqread --ioengine=libaio --iodepth=16 \ --rw=read --bs=128k --size=40G --numjobs=4 \ --runtime=300 --time_based --group_reporting \ --filename=/data/eds_share/testfile_seq --output=seqread_128k.json测试完成后,重点看iops和clat(完成延迟)的p99值。文档里提供的参考数值是以特定硬件配置为前提的,如果你的硬件规格比参考配置低,性能数据低于文档值不一定是部署问题。我更关心的是同一配置下读写之间的性能差距是否合理,以及长时间运行后延迟是否有缓慢爬升的趋势。如果有,且存储池处于健康状态,大概率是业务侧的 IO 队列深度设置或网络平面的配置出了问题,需要回到前面的网络规划步骤去复检。
5. 可靠性防御体系:巡检项、快照容灾和常见故障排查
5.1 每季度一次的巡检:磁盘健康、网络丢包和 IO 延迟
aStor-EDS 的运维,防远比治重要。V3.0.4 的集群自带监控看板,但不能依赖它推送所有问题。磁盘的坏道、网络微丢包、存储池的重建进度,这些都需要主动巡检才能提前发现。我通常建议每季度做一次巡检,重点看三个层面。
第一是磁盘健康度,登录管理台的「硬件监控」页面,检查每块盘的 SMART 状态和「当前待映射扇区」数量。如果看到非零值,建议尽快联系厂商换盘。磁盘处于亚健康状态时,集群会尝试通过后台重建恢复数据,但重建期间的性能损失对业务影响非常大,所以越早发现越好。
第二是存储网络的丢包率。可以在每台节点的存储网卡上执行ping -f打流测试,但更精确的做法是从业务服务器向存储节点发起大包 ping 测试,确认 MTU 9000 端到端生效。丢包哪怕只有 0.1%,对分布式存储的数据复制也会产生显著影响,因为重传会消耗大量 CPU 和带宽,延长数据同步时间。
第三是 IO 延迟的基线漂移。对比每个季度的 fio 测试结果,查看clat平均值和 p99 值是否有明显上升。延迟上升可能是存储池碎片化、磁盘老化或者网络问题,单看一项不容易定位,但基线对比能让你提前发现变化趋势。
5.2 快照容灾要纳入日常备份方案,不能只靠副本
副本冗余只是数据安全的一个层面,它防的是硬件故障,不防逻辑错误和误删除。一个应用操作失误或者脚本 bug,可能瞬间覆盖掉整份数据,副本机制完全帮不上忙。因此生产环境一定要启用 aStor-EDS 的快照功能,把它纳入日常备份方案中。
V3.0.4 的快照功能支持对存储池和 LUN 级快照,可以手动创建也可以配置定时策略。我推荐给数据库存储池配置每日凌晨 2 点的定时快照,保留最近 7 份,这样在误删除或数据损坏时可以恢复到 24 小时内的任意时间点。快照对性能的影响通常在 5% 以内,在业务低峰期执行不会有明显感知。
# 查看已有快照 astor-eds snapshot list --pool pool_block # 手动创建 LUN 快照 astor-eds snapshot create --pool pool_block --lun lun_db01 --name snap_daily_$(date +%Y%m%d) # 设置定时快照策略,每日凌晨 2 点执行,保留 7 份 astor-eds snapshot policy create --name daily_snap \ --pool pool_block --cron "0 2 * * *" --retain 7快照不是备份的替代品。它是一个「快速恢复」的手段,如果你担心存储节点整体损坏、机房级灾难,仍然需要一套独立于 aStor-EDS 的备份系统,把数据复制到另一个站点。我见过有些团队的快照策略只保留 3 份,觉得够用,但一旦发现逻辑错误的时间点已经超过保留周期,恢复就没有任何希望了。快照数量多一些的成本,远小于数据丢失的代价。
5.3 采用「先看日志、再看指标、最后动数据」的排障顺序
aStor-EDS 的排障,最忌讳一上来就动数据。比如节点显示离线,有些人会直接重启节点,如果此时集群正处在数据重构中,重启反而会加剧副本分布的风险。V3.0.4 的日志可以通过 Web 管理台导出,日志文件的核心内容包括集群事件日志、存储池状态变更记录、各节点监控数据等。我把 V3.0.4 的运行日志场景分成三类:存储池状态变化、节点状态变化、性能指标异常,分别对应evt.log、node.log和perf.log,排查前先去对应的日志模块查证,确认现象后再采取行动。
# SSH 登录管理节点后,常用日志路径示例 tail -n 200 /var/log/aStor/evt.log tail -n 200 /var/log/aStor/node.log日志里最有价值的信号是「存储池降级」和「数据重构启动」这两个事件。一旦看到这两条日志,说明有盘或节点出问题了,需要立即关注。从「降级」状态恢复到「健康」状态的时间,取决于数据量和网络带宽,正常情况下一块 3.84TB 盘在万兆网络下重构需要 4-8 小时,如果超过了这个窗口,需要检查存储网络是否有丢包。
5.4 最后的技巧:用一个「最小写入并发测试」区分是不是网络问题
这里分享一个我常用的排障技巧。当遇到存储性能下降,且无法判断是存储集群本身瓶颈还是网络瓶颈时,我会在业务服务器上跑一个最小化的写入并发测试,用dd直接写一个 1GB 文件到共享存储目录,同时用iperf3测一下业务服务器到存储节点的网络带宽。
# 在业务服务器上,写入 1GB 文件 time dd if=/dev/zero of=/data/eds_share/test.img bs=1M count=1024 oflag=direct # 并行测网络带宽 iperf3 -c 10.10.20.10 -t 30 -i 5如果dd写入速度低于带状存储本身的预期,而iperf3带宽正常,瓶颈大概率在存储集群或协议层;如果iperf3带宽也远低于万兆预期,那问题在链路或交换机,和存储集群无关。这个区分很重要,因为排障方向错了,花再多时间也解决不了问题。这个技巧在文档里没有专门章节,但它帮我省下的排查时间非常可观。
本文还有配套的精品资源,点击获取