亚马逊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
- 根据AWS官方文档部署AWS托管AD,连接如下:https://docs.thinkwithwp.com/zh_cn/directoryservice/latest/admin-guide/ms_ad_getting_started_create_directory.html
部署Amazon FSx for Windows File Server
- 登陆AWS控制台并切换到FSx服务,创建文件系统并选择Amazon FSx for Windows File Server, 点击Next至文件系统详细配置页面,输入文件系统名称->部署类型选择Single-AZ1(只有此类型支持DFS复制)->存储类型选择SSD->存储容量我们配置10240GB->吞吐配置最大值2048MB/s。
- 点击文件系统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
- 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并完成发布。
- 通过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功能进一步扩大文件系统的吞吐来满足用户对高吞吐的要求。
参考链接:
- FSx for Windows File Server 官方文档:
https://docs.thinkwithwp.com/fsx/latest/WindowsGuide/what-is.html
- FSx for Windows File Server Workshop
https://github.com/aws-samples/amazon-fsx-workshop