亚马逊AWS官方博客

如何利用 DFS on FSx for Windows File Server 实现文件系统高吞吐要求

背景介绍

Amazon FSx for Windows File Server是基于Windows Server上构建的完全托管的文件存储,提供用户配额,用户文件恢复和Microsoft Active Directory(AD)集成等众多管理功能,它可提供单可用区和多可用区部署选项、完全托管的备份并可为静态数据和动态数据加密。用户可通过多种客户端和访问方式访问 Amazon FSx for Windows File Server(支持的客户端和访问方式可参考官方文档)。 您可以使用 SSD 和 HDD 存储选项针对工作负载需求优化成本和性能。Amazon FSx for Windows File Server 可帮助您通过数据去重降低 TCO,将通用文件共享的成本最多降低 50-60%。入门非常简单;没有最低承诺用量或前期费用。针对SSD型介质类型,Amazon FSx for Windows File Server提供每TiB 750MB/s的吞吐,单文件系统最高2048MB/s的吞吐值,同时借助于Amazon FSx for Windows File Server的基于内存的缓存技术将单文件系统吞吐提高至最高3GB/s。

在实际的项目中针对某些客户的特殊使用场景,客户希望能够实现数百个节点同时访问文件系统且吞吐量希望能够达到10GB/s以上,在Amazon FSx for Windows File Server单文件系统无法满足的情况下我们可以借助Windows DFS 功能来扩展文件系统的吞吐量,本文针对此场景进行部署以满足用户需求。

网络规划

测试之前请务必规划好VPC和子网设置,我们这里准备VPC和两个公有子网并配置路由(生产环境建议根据实际需求确定使用公有子网还是私有子网)。

VPC CIDR: 10.100.0.0/16

PubSubnet1: 10.100.0.0/24

PubSubnet2: 10.100.1.0/24

部署AWS 托管 AD

 

  • 根据步骤1中的提供的DNS信息,切换到VPC服务中配置DHCP Options并关联到此次测试的VPC。

部署Amazon FSx for Windows File Server

  • 登陆AWS控制台并切换到FSx服务,创建文件系统并选择Amazon FSx for Windows File Server, 点击Next至文件系统详细配置页面,输入文件系统名称->部署类型选择Single-AZ1(只有此类型支持DFS复制)->存储类型选择SSD->存储容量我们配置10240GB->吞吐配置最大值2048MB/s。

 

  • 网络与安全选项中选择规划好的的VPC、安全组和所在子网(这里我们只选择一个公有子网)。

 

 

  • 在Windows Authentication选项中选择我们上述步骤中创建的托管, 选择KMS加密密钥并点击下一步完成文件系统创建。
  • 重复上述步骤创建5个文件系统。

 

  • 点击文件系统ID,记录每个文件系统对应的DNS Name:

fsxdemo1: fs-0239f399ca56ad5f2.fsxdemo.local

fsxdemo2: fs-0239f399ca56ad5f2.fsxdemo.local

fsxdemo3: fs-066499b43ff1abe02.fsxdemo.local

fsxdemo4: fs-0240bbb359c579516.fsxdemo.local

fsxdemo5: fs-0ffb08f073661a530.fsxdemo.local

部署DFS Namespace

  • 准备好一台已经加入域的Windows Server 2016服务器(考虑到HA建议生产环境使用2台服务器做DFS Namespace服务器)。 RDP远程连接到此服务器,在服务器添加角色和功能的Server Roles页面勾选DFS Namespaces和DFS Replication,点击Next按钮继续完成安装。
  • 安装完毕后点击windows开始菜单->运行->输入dfsmgmt.msc打开DFS管理控制台, 菜单栏选择Action->New Namespaces->输入本机Hostname->输入Namespaces名字并在编辑设置中设置相应的权限。
  • 选择Domain-based namespace并勾选Enable Windows Server 2008 mode, 下一步review并完成配置。
  • 如果需要多个namespace则需要选中左侧控制台中的namespace然后点击右侧菜单栏中的Add Namespace Server根据向导完成多台Namespaces的添加(可选项)。

部署DFS复制组

目前AWS暂不支持通过DFS管理控制台来配置基于Amazon FSx for Windows File Server文件系统的DFS 复制组我们需要通过PowerShell来进行手动配置,PowerShell配置方法如下:

  • 远程链接至Namespace服务器,关闭其他应用程序并以管理员权限打开PowerShell命令, 创建过程和注释参考以下内容

#定义DFS复制组名称、复制组文件夹名称和本地文件夹路径

$Group = "Group" # e.g. "ReplicationGroup"
$Folder = "Folder" # e.g. "ReplicatedFolder"
$FirstFSReplicationPath = "D:\Share"
$RestoredFSReplicationPath = "D:\Share" 

#创建DFS复制组和DFS复制组文件夹
New-DfsReplicationGroup -GroupName $Group | Out-Null
New-DfsReplicatedFolder -GroupName $Group -FolderName $Folder | Out-Null

#定义DNS复制组成员信息
$FirstFSDnsName = "fs-06d8fd81bd7bac338.fsxdemo.local"
$RestoredFSDnsNames = ('fs-010411a47567f07e0.fsxdemo.local','fs-026e6adc1ee277560.fsxdemo.local’)
$FirstFSComputerName = (Resolve-DnsName ${FirstFSDnsName} -Type CNAME).NameHost

Add-DfsrMember -GroupName $Group -ComputerName $FirstFSComputerName | Out-Null
Set-DfsrMembership –GroupName $Group –FolderName $Folder –ContentPath $FirstFSReplicationPath –ComputerName $FirstFSComputerName –PrimaryMember $true -Confirm:$false -Force | Out-Null
Write-Host " Making a pause for 60 seconds in order to let folder initialize"
Start-Sleep -Seconds 60

foreach ($RestoredFSDnsName in $RestoredFSDnsNames)
 {
 $RestoredFSComputerName = (Resolve-DnsName ${RestoredFSDnsName} -Type CNAME).NameHost
 Add-DfsrMember -GroupName $Group -ComputerName $RestoredFSComputerName
 Add-DfsrConnection -GroupName $Group -SourceComputerName $FirstFSComputerName -DestinationComputerName $RestoredFSComputerName
 Add-DfsrConnection -GroupName $Group -SourceComputerName $RestoredFSComputerName -
 Set-DfsrMembership –GroupName $Group –FolderName $Folder –ContentPath $RestoredFSReplicationPath –ComputerName $RestoredFSComputerName –PrimaryMember $false -Confirm:$false -Force | Out-Null
 }

#检查创建的DFS复制组和复制组文件夹信息
Get-DfsReplicatedFolder -FolderName $Folder
Get-DfsrMember -GroupName $Group

#设置DFS Connection Schedule类型
Get-DfsrConnection -GroupName $Group | Set-DfsrConnectionSchedule -ScheduleType UseGroupSchedule
Set-DfsrGroupSchedule -GroupName $Group -ScheduleType Always

#设置成员Staging Quota大小,建议设置单个最大文件大小的32倍或以上
Get-DfsrMember -GroupName $Group | Set-DfsrMembership -FolderName $Folder -StagingPathQuotaInMB (102400) -force

  • 登陆DFS管理控制台,根据下图提示选择显示我们通过上述PowerShell脚本手动创建的DFS复制组, 点击确定后即可以看到DFS复制组中的所有节点

 

 

 

  • PowerShell创建的DFS集群是集散模式拓扑, 从性能出发建议修改为Full Mesh模式。点击Connection,在右边的菜单中选择创建新连接,这里务必确保每个节点之间都有连接,实现Full Mesh的拓扑模式.

 

  • 选中创建的复制组名称,在中间页面中选择Replication Folders, 选中我们创建的文件夹右键菜单中选择Share and Publish Replicated Folder->勾选“Share and publish the replicated folder in a namespace”->列举出我们之前创建的所有文件系统对应的DNS名称->点击浏览,选择之前创建的Namespaces->输入Folder Name->Review并完成发布。

 

 

 

  • 创建完成后点击对应Namespace目录下的文件夹即可看到所有节点的信息,如下图所示。

 

  • 通过Windows File Explorer分别打开一个文件系统共享目录如\\fs-0239f399ca56ad5f2.fsxdemo.local\share ,在此目录创建文件后打开另外一个Windows File Explorer访问其他共享文件系统共享目录如\\ fs-0239f399ca56ad5f2.fsxdemo.local\share, 检查文件是否正常同步(可能会有几分钟的延迟)
  • 在windows客户端net use Y: \\fsxdemo.local\corp\share <domain-password> /user:fsxdemo.local\<domain-user> 挂载DFS集群,确保读写能够正常工作。

测试数据文件

根据我们预先配置好的AMI和Autoscaling模版分别配置测试100,200和400节点的机器并发读取DFS Namespaces发布的存储路径,经过CloudWatch监控到文件系统的性能指标如下图所示(分别在100、200和400客户端节点下测试数据),计算单位为每分钟读取的数据量。

经过CloudWatch的数据看到每分钟读取的数据量最高为871GB/分钟,除以60s可以换算到吞吐约为14.5GB/s。根据多个测试场景我们整理出以下测试结果,通过数据我们可以看到因为Amazon FSx for Windows File Server的In-memory cache技术的存在,单个Amazon FSx for Windows File Server文件系统的吞吐超过2048MB/s。

在多个节点数量的场景下性能均能较好的满足用户对高吞吐的性能要求。

FSx文件系统数 客户端节点数 访问协议 文件大小 网络吞吐量 理论值
5 100 SMB 混合 13.5GB/s 15GB/s
5 200 SMB 混合 14.2GB/s 15GB/s
5 400 SMB 混合 14.5GB/s 15GB/s

 

总结

FSx for Windows File Server做为托管的原生基于Windows的文件系统,无论在维护性、扩展性和高性能方便表现优秀,同时利用Windows的DFS功能进一步扩大文件系统的吞吐来满足用户对高吞吐的要求。

 

参考链接:

  1. FSx for Windows File Server 官方文档:

https://docs.thinkwithwp.com/fsx/latest/WindowsGuide/what-is.html

  1. FSx for Windows File Server Workshop

https://github.com/aws-samples/amazon-fsx-workshop

 

本篇作者

刘光

AWS解决方案架构师,目前负责基于AWS云计算方案架构的咨询和设计,同时致力于AWS云服务在政企、教育和医疗行业客户的推广。在加入AWS之前就职于Citrix,具有多年企业虚拟化、VDI架构设计和支持经验。