1. 引言:为什么需要共享文件存储
在传统的单服务器架构中,应用程序的数据通常存储在服务器的本地磁盘上。然而,当业务规模增长到需要多台服务器协同工作时,本地存储的局限性就暴露出来了——每台服务器都有自己的文件系统,数据无法在服务器之间自然共享。想象一下这样一个场景:一个Web应用集群由多台ECS实例组成,用户上传的图片被随机分配到某台服务器上,当该服务器宕机或用户请求被负载均衡转发到另一台服务器时,图片就无法被访问到。这就是典型的"数据孤岛"问题。
阿里云文件存储NAS正是为解决这类问题而生的云原生共享存储服务。它是一种可共享访问、弹性扩展、高可靠以及高性能的分布式文件系统。NAS基于POSIX文件接口,天然适配原生操作系统,提供共享访问,同时保证数据一致性和锁互斥。简单来说,NAS就像一个挂在云上的超大容量硬盘,多台服务器可以同时把它挂载到自己的文件系统中,就像访问本地目录一样读写数据,而所有服务器看到的都是同一份数据。
单个NAS文件系统可以同时挂载至最多1000个计算节点。存储容量会随着文件的添加和删除自动弹性增长和收缩。无论是Web集群的静态资源统一存储、容器化应用的持久化数据卷、还是大数据分析平台的共享数据集,NAS都能提供稳定高效的底层存储支撑。本文将从零开始,手把手讲解如何通过阿里云NAS实现多服务器的文件共享,涵盖从创建、挂载、权限管理到性能优化和高可用部署的完整链路。
需要先登录阿里云控制台,点击:阿里云控制台
2. 认识阿里云文件存储NAS
2.1 NAS是什么
阿里云文件存储NAS(File Storage NAS)是面向阿里云ECS实例、E-HPC、容器服务等计算节点的文件存储服务。它提供标准的NFS和SMB访问协议,支持NFS v3和NFS v4.0、SMB 2.1和SMB 3.0,兼容主流的Linux和Windows操作系统。这意味着无论你的服务器运行什么操作系统,都可以通过标准的网络文件协议接入NAS。
2.2 核心优势
共享访问:一个NAS文件系统可以同时挂载到多个计算节点上,由这些节点共享访问,从而节约大量拷贝与同步成本。任何文件修改成功后,所有挂载该NAS的节点都能够立刻看到修改结果。
弹性扩展:无需提前规划存储容量,NAS的存储空间会随着数据的增加和删除自动弹性增长和收缩。你只需要为实际使用的存储空间付费,不需要提前配置存储,也不存在最低费用或设置费用。
高可靠性:NAS采用单可用区数据存储机制,将用户的数据在后端进行多副本存储,每份数据都会存储在同一个可用区内多个不同的设备上,提供99.999999999%(11个9)的数据持久性和99.95%的服务可用性。
安全可控:基于RAM实现的资源访问控制,基于VPC实现的网络访问隔离,结合传输加密与存储加密特性,保障数据安全。
2.3 存储类型选型
阿里云NAS提供了多种存储类型以适应不同业务场景:
- 通用容量型NAS:适用于Linux或Windows企业应用、Web内容管理、数据库备份、日志存储等通用类文件共享业务。
- 通用性能型NAS:在容量型基础上提供更高的IOPS和吞吐能力,适合对性能有一定要求的通用业务。
- 极速型NAS:基于阿里云最新一代网络架构和全闪存储打造的高性能共享文件存储产品,适用于Linux时延敏感型企业应用、CI/CD开发测试环境、高性能Web服务、在线游戏服务、数据库等场景。
对于大多数Web集群共享静态资源、日志集中存储等场景,通用容量型NAS已经足够。如果对延迟有极致要求,比如高频交易系统或实时数据处理,则应考虑极速型NAS。
3. 创建NAS文件系统
3.1 前提条件
在开始创建NAS之前,需要明确几个关键信息:NAS必须与将要挂载它的ECS实例处于同一地域;NAS的VPC网络必须与ECS实例的VPC保持一致;通用型NAS支持跨可用区挂载,但极速型NAS建议在同可用区挂载,否则会影响性能。
3.2 控制台创建步骤
登录NAS控制台,在左侧导航栏选择"文件系统" -> "文件系统列表",点击"创建文件系统"。在创建页面中,需要配置以下关键参数:
- 文件系统类型:选择通用型或极速型。
- 地域:选择和ECS实例相同的地域。
- 专有网络VPC:选择和ECS实例相同的VPC。
- 协议类型:Linux环境选择NFS,Windows环境选择SMB。如果需要在Linux和Windows混合环境中共享,则选择SMB协议。
- 存储类型:根据性能需求选择容量型、性能型或极速型。
完成配置后点击确认,NAS文件系统即创建完成。
3.3 添加挂载点
创建文件系统后,还需要添加挂载点才能让ECS实例访问它。在文件系统列表中找到刚刚创建的NAS,点击"管理"进入详情页,在左侧导航栏点击"挂载使用",然后点击"添加挂载点"。在添加挂载点时,需要选择VPC和交换机,系统会自动生成一个挂载点地址(格式类似于 `<挂载点域名>:/`),这个地址将在后续挂载操作中使用。
通用型NAS最多可以添加两个挂载点,极速型NAS只支持添加一个挂载点。
4. 将NAS挂载到多台ECS服务器
创建好NAS文件系统和挂载点之后,核心环节就是将NAS挂载到需要共享文件的多台ECS服务器上。阿里云提供了多种挂载方式,适用于不同的场景和需求。
4.1 方式一:控制台一键挂载(单台ECS)
对于单台ECS实例的快速挂载,NAS控制台提供了一键挂载功能。在文件系统列表中找到目标NAS,点击操作列的"挂载"。在挂载面板中,选择挂载点,然后选择目标ECS实例。需要注意:ECS实例必须与NAS在同一VPC下,否则会提示网络不通。配置挂载路径(即ECS上的本地挂载目录),默认勾选"开机自动挂载",这样ECS重启后无需重复挂载。点击确认即可完成挂载。这种方式虽然便捷,但每次只能选择一台ECS实例。
4.2 方式二:云助手批量挂载(多台ECS)
当需要将同一个NAS挂载到多台ECS实例时,使用云助手批量挂载是最高效的方式。云助手是阿里云提供的ECS实例运维自动化工具,支持在一批ECS实例上同时执行命令。
操作步骤如下:在ECS控制台左侧导航栏选择"运维与监控" -> "云助手",在"公共命令"页签中搜索挂载命令 `ACS-NAS-ClickMount-Mount-Linux-NFS.sh`,点击执行。在执行命令面板中,配置命令参数并选中需要挂载NAS的多台ECS实例(仅支持Linux操作系统),选择执行计划(立即执行或定时执行),点击确认即可完成批量挂载。
使用云助手批量挂载有几个限制条件:ECS实例必须处于"运行中"状态;ECS实例必须和NAS在同一地域内;仅支持NFS协议文件系统。
4.3 方式三:手动mount命令挂载
对于需要精细控制挂载参数或无法使用云助手的场景,可以登录到每台ECS实例上手动执行mount命令挂载NAS。这种方式适用于所有Linux环境,也是最灵活的挂载方式。
第一步:安装NFS客户端
在Linux系统挂载NFS协议文件系统前,需要先安装NFS客户端。不同Linux发行版的安装命令不同:
# Alibaba Cloud Linux / CentOS / Red Hat sudo yum install nfs-utils # Ubuntu / Debian sudo apt-get update sudo apt-get install nfs-common
第二步:创建挂载目录
在ECS实例上创建一个目录作为NAS的挂载点,例如:
sudo mkdir -p /mnt/nas
第三步:执行挂载命令
使用mount命令将NAS挂载到刚才创建的目录:
sudo mount -t nfs -o vers=4.0 <挂载点地址> /mnt/nas
其中 `<挂载点地址>` 是创建挂载点时生成的NAS挂载点域名。推荐使用NFS v4.0协议挂载,因为它支持文件锁(range lock),如果多台Linux ECS实例需要同时修改同一个文件,必须使用NFS v4.0协议。如果不需要文件锁功能,使用NFS v3协议可以获得更好的访问性能。
第四步:验证挂载
执行以下命令确认挂载是否成功:
df -h | grep nas
如果能看到NAS文件系统的挂载信息,说明挂载成功。也可以在挂载目录中创建测试文件,然后在另一台挂载了同一NAS的ECS上查看该文件是否出现,以此验证多服务器共享是否生效。
4.4 方式四:配置/etc/fstab实现开机自动挂载
手动mount方式挂载的NAS在ECS重启后会失效,需要重新挂载。为了避免服务器重启后挂载信息丢失,建议配置/etc/fstab文件实现开机自动挂载。
编辑 `/etc/fstab` 文件:
sudo vi /etc/fstab
在文件末尾添加以下内容:
<挂载点地址> /mnt/nas nfs vers=4.0,timeo=600,noresvport 0 0
参数说明:
- `vers=4.0`:指定NFS协议版本。
- `timeo=600`:NFS请求超时时间(单位:0.1秒),600即60秒。
- `noresvport`:在网络重连时使用新的临时端口,有助于提升网络稳定性。
保存文件后,可以执行以下命令测试fstab配置是否正确:
sudo mount -a
如果没有报错,说明配置正确。重启ECS后,NAS将自动挂载到 `/mnt/nas` 目录。
5. 权限管理与访问控制
在多服务器共享文件存储的场景中,权限控制是保障数据安全的核心议题。阿里云NAS提供了从网络层到文件层的多层次权限管理体系。
5.1 权限组:网络白名单机制
权限组是NAS最基础的访问控制机制,本质上是一个IP白名单。在权限组中,你可以为不同的IP地址或网段授予不同的访问权限(读写或只读)。只有IP地址在权限组白名单中的ECS实例才能挂载和访问NAS。
每个阿里云账号会自动生成一个默认权限组。你也可以创建自定义权限组以满足更精细的控制需求。创建权限组时,需要指定授权地址(即允许访问的ECS实例的VPC IP地址或网段)和读写权限。
需要注意:挂载点所绑定的权限组规则中的授权地址必须包含计算节点的VPC IP地址。如果ECS实例和NAS挂载点不在同一个VPC中,需要先通过云企业网等方式打通网络。
5.2 NFS ACL:细粒度文件权限
权限组只能控制到IP级别,无法针对不同的用户或用户组设置不同的文件权限。阿里云NAS提供了NFS ACL功能(包括NFSv4 ACL和POSIX ACL),可以实现更细粒度的权限控制。
ACL(Access Control List)是与文件或目录关联的权限列表,由一个或多个访问控制项(ACE)组成。通过NFS ACL,可以给不同的用户和用户组设置不同目录或文件的读写执行权限。例如,可以让开发团队对 `/project/src` 目录有读写权限,而测试团队只有只读权限。
使用NFS ACL的前提是使用NFSv4协议挂载NAS。NFSv3协议不支持ACL功能。
5.3 接入点:多业务隔离访问
接入点是通用型NAS NFS协议文件系统中针对不同应用程序或用户访问文件系统的接入方式。通过接入点,可以为NAS的不同目录创建独立的访问入口,并为每个接入点配置不同的RAM策略。单个通用型NAS NFS协议文件系统最多支持在2个交换机下共创建1000个接入点。接入点特别适合多业务团队共享同一个NAS但需要数据隔离的场景。
5.4 RAM访问控制
除了上述NAS层面的权限控制,还可以结合阿里云的RAM(资源访问管理)进行账号级别的授权。通过RAM,可以控制哪个RAM用户或RAM角色有权限创建、删除、管理NAS文件系统,实现最小权限原则。
这三层权限体系从网络(权限组)、文件(NFS ACL)、账号(RAM)三个维度层层递进,共同构建了NAS的安全防护网。在实际部署中,建议根据业务需求组合使用这些权限控制手段。
6. 性能优化
当多台服务器同时访问NAS时,性能优化变得尤为重要。以下从挂载参数、网络配置、缓存策略等角度介绍NAS性能优化的核心方法。
6.1 nconnect参数:提升吞吐性能
`nconnect` 是NFS客户端Linux挂载选项,通过在客户端和服务器之间建立更多的TCP连接来提高吞吐性能。经过测试,使用nconnect参数可以将单ECS访问NAS的吞吐提升3倍到6倍,达到3 GB/s。
在挂载命令或 `/etc/fstab` 中添加 `nconnect` 参数即可启用:
sudo mount -t nfs -o vers=4.0,nconnect=4 <挂载点地址> /mnt/nas
`nconnect=4` 表示建立4条TCP连接。可以根据实际网络带宽和负载情况调整这个数值。需要注意的是,nconnect参数在部分旧版Linux内核中可能不支持,请确保操作系统版本较新。
6.2 NFS版本选择
NFS v3和NFS v4.0在功能和性能上有所差异:
- NFS v3:协议开销更小,访问性能略高。适合不需要文件锁功能的纯读取或写入场景。
- NFS v4.0:支持文件锁(range lock),多台ECS同时修改同一个文件时必须使用。功能更丰富但协议开销稍大。
如果业务场景不需要多台服务器同时写入同一个文件,优先使用NFS v3协议以获得更好的性能。如果需要并发写入,必须使用NFS v4.0。
6.3 调整NFS客户端并发能力
可以通过调整NFS客户端的并发请求数量来提升性能。执行以下命令将客户端的并发请求数量修改为128:
if (lsmod | grep sunrpc); then (modinfo sunrpc | grep tcp_max_slot_table_entries) && sysctl -w sunrpc.tcp_max_slot_table_entries=128 (modinfo sunrpc | grep tcp_slot_table_entries) && sysctl -w sunrpc.tcp_slot_table_entries=128 fi (modinfo sunrpc | grep tcp_max_slot_table_entries) && echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf (modinfo sunrpc | grep tcp_slot_table_entries) && echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
这个调整可以提升NFS客户端在高并发场景下的请求处理能力。
6.4 缓存优化与数据一致性
在高并发场景下,NFS客户端的属性缓存(attribute cache)可能导致数据一致性问题。例如,一台ECS修改了文件,另一台ECS由于缓存未刷新可能看不到最新内容。可以通过挂载参数调整缓存行为:
sudo mount -t nfs -o vers=3,noac <挂载点地址> /mnt/nas
`noac` 参数禁用属性缓存,每次访问都从服务器获取最新元数据,保证强一致性但会牺牲部分性能。对于读多写少的场景,可以适当调大缓存时间以提升性能,但需接受短暂的不一致窗口。
如果业务对数据一致性要求极高且并发写入频繁,建议使用NFS v4.0协议配合文件锁机制,确保同一时刻只有一个客户端能写入特定文件区域。
7. 高可用与容灾部署
对于生产环境,存储的高可用性至关重要。阿里云NAS在多个层面提供了高可用保障。
7.1 数据多副本
NAS采用单可用区数据存储机制,将用户的数据在后端进行多副本存储,每份数据都存储在同一个可用区内多个不同的设备上。这意味着即使某个存储设备发生故障,数据也不会丢失,系统会自动切换到其他副本继续提供服务。这提供了11个9的数据持久性保障。
7.2 跨可用区挂载
通用型NAS支持跨可用区挂载。如果你的ECS实例分布在同一个地域的不同可用区,可以将通用型NAS挂载到这些跨可用区的ECS上,实现计算层的高可用分布。但需要注意的是,跨可用区访问会增加网络延迟,性能不如同可用区访问。极速型NAS建议在同可用区挂载,否则会影响性能。
7.3 基于rsync的主备容灾方案
对于需要跨可用区容灾的场景,阿里云提供了基于rsync命令工具构建通用型NAS同地域跨可用区主备容灾的方案。方案的核心思路是:在同地域的不同可用区分别创建两个NAS文件系统(主NAS和备NAS),通过rsync定期将主NAS的数据同步到备NAS。当主NAS所在可用区发生故障时,可以快速将业务切换到备NAS上,保证服务的连续性。
rsync同步命令示例:
rsync -avz --delete /mnt/primary_nas/ /mnt/backup_nas/
可以将此命令配置为cron定时任务,根据业务对RPO(恢复点目标)的要求设置同步频率。
8. 容器场景中的NAS共享存储
随着Kubernetes成为容器编排的事实标准,如何在容器环境中使用NAS实现跨Pod的数据共享成为越来越多开发者的关注点。阿里云NAS与ACK(阿里云容器服务)深度集成,提供了多种挂载方式。
8.1 CSI驱动挂载NAS
CSI(Container Storage Interface)是Kubernetes推荐的存储接入标准。阿里云提供了CSI存储插件,支持将NAS文件系统以存储卷(PV)和存储声明(PVC)的方式挂载到Kubernetes集群中。通过CSI驱动,可以动态创建NAS存储卷,挂载到不同业务的Pod中。NAS支持ReadWriteMany访问模式,即一个PVC可以同时被多个Pod挂载和使用,实现跨Pod的数据共享。
使用CSI静态挂载NAS的基本流程:首先在NAS控制台创建好文件系统和挂载点,然后在Kubernetes集群中创建PV和PVC,在Pod的YAML中通过PVC声明来挂载NAS存储卷。
8.2 CNFS:声明式管理NAS
CNFS(Container Network File System)是阿里云推出的容器网络文件系统,可将NAS文件系统作为原生Kubernetes资源进行管理,以声明式方式完成NAS的创建、纳管和使用。CNFS提供了更便捷的NAS管理体验,尤其适合需要频繁创建和管理NAS存储卷的云原生场景。
通过CNFS,开发者可以用Kubernetes的YAML语法来描述NAS资源,实现基础设施即代码(IaC)的管理理念。
9. 常见问题与解答
问:一台ECS可以同时挂载多个NAS文件系统吗?
可以。一台ECS实例可以同时挂载多个NAS文件系统,只需为每个NAS创建不同的本地挂载目录即可。例如,将NAS-A挂载到 `/mnt/nas_a`,将NAS-B挂载到 `/mnt/nas_b`。
问:NAS挂载后,多台ECS同时写入同一个文件会怎样?
如果使用NFS v3协议,多台ECS同时写入同一个文件可能导致数据损坏或覆盖。如果业务需要多台ECS并发写入同一个文件,必须使用NFS v4.0协议挂载,NFS v4.0支持文件锁(range lock),可以确保并发写入的安全性。
问:Windows服务器如何挂载NAS?
Windows服务器使用SMB协议挂载NAS。在创建NAS文件系统时选择SMB协议,然后在Windows ECS中通过"映射网络驱动器"或命令行 `net use` 命令进行挂载。NAS支持SMB 2.1和SMB 3.0协议。
问:NAS的数据安全如何保障?
NAS从多个层面保障数据安全:网络层面通过VPC隔离和权限组IP白名单控制访问来源;传输层面支持加密传输;存储层面采用多副本冗余存储防止硬件故障导致的数据丢失;管理层面通过RAM进行账号授权管理。
问:NAS挂载后无法访问,如何排查?
首先检查ECS与NAS是否在同一VPC内;其次检查权限组白名单是否包含该ECS的IP地址;然后确认NFS客户端是否已正确安装;最后查看挂载命令中的挂载点地址是否正确。阿里云NAS提供了排查脚本,可以一键诊断挂载失败的原因。
问:NAS的计费方式是怎样的?
NAS采用按量付费方式,按照实际使用的存储空间计费。不需要提前购买存储容量,也没有最低消费。通用型NAS和极速型NAS的单价不同,具体价格请参考阿里云官网的定价页面。
10. 总结
阿里云文件存储NAS为多服务器文件共享提供了一个成熟、稳定、高效的解决方案。从基础的NAS创建与挂载,到权限管理、性能优化、高可用部署,再到容器场景的深度集成,NAS展现出了作为云原生共享存储基础设施的全面能力。无论是传统的Web集群、微服务架构,还是AI训练、大数据分析等新兴负载,NAS都能作为统一的数据层,让数据在多台服务器之间自由流动。
在实际项目中,建议根据业务的具体需求选择合适的NAS存储类型和挂载方式,合理配置权限和性能参数,并结合业务的重要程度规划高可用方案。希望本文能帮助读者全面掌握阿里云NAS多服务器共享的实践方法,在云上构建出稳定、高效、安全的共享存储架构。