亚马逊AWS官方博客

如何在云上快速搭建 NFS

简介

传统架构中我们常使用 NFS 来作为共享文件的存储。那么在搬迁到云中的时候我们该如何快速搭建相应的 NFS 系统?

本文将为您介绍快速搭建 NFS 系统的解决方案的四个关键词,分别是:

·         利用适用于文件的 AWS Storage Gateway 搭建云中NFS

·         在 EC2 上使用 NFS

·         NFS 只在 VPC内网可连

·         工作于由光环新网运营的 AWS 中国(北京)区域

服务简介

File Gateway

文件网关提供了一个文件接口,让您可以使用行业标准 NFS 文件协议将文件作为对象存储在 Amazon S3 中,并通过 NFS 从您的数据中心或 Amazon EC2 访问这些文件,或通过 S3 API 以对象形式访问这些文件。所有权、权限和时间戳作为与该文件关联的对象的用户元数据,永久存储在 S3 中。当对象传输到 S3 之后,它们可以作为原生 S3 对象进行管理,版本控制、生命周期管理和跨区域复制等存储桶策略将直接应用于存储在存储桶中的对象。

客户使用文件网关 NFS 接口将文件数据存储到 S3 中,这些数据便可以供基于对象的工作负载使用,用作传统备份应用程序的经济高效的存储目标,或者用作应用程序文件存储的云端存储库或存储层。

在 EC2 上使用 File Gateway 作为 NFS

工作方式:

·         对象数据存储在S3中,提供数据可靠性和持久性

·         Gateway缓存为一个EC2实例,和S3定期同步数据

·         使用NFS的实例与gateway缓存实例交流读写数据

搭建步骤

创建网关

1.  创建Storage Gateway, 选择文件网关类型

2.  选择Amazon EC2作为主机平台,按照设置说明配置VPC,主机类型,添加新EBS卷,安全组等。

注意:

1)我们将配置NFS服务器只在VPC可连,所以请禁用自动分配公有IP选项

2)对添加的EBS卷,设置大小在150G以上

3)在安全组上临时配置安全策略,允许VPC内其它机器通过80端口访问该机器

4)保证该机器能够访问公网,一般通过NAT网关(https://docs.aws.amazon.com/zh_cn/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html)等方式实现。

3.  等待EC2创建完成,点击进入EC2详情页,记录下该机器的私有IP (下文称该IP为: Gateway私有IP)

 

链接并激活网关

1.  在IAM中创建新的EC2角色,配置拥有 AWS Storage Gateway Full Access

2.  在同一个VPC中创建另外一台临时的EC2实例(Amazon Linux),并满足以下条件

a.  能够使用SSH登录

b.  绑定上一步中创建的EC2角色(ec2-storage-gateway)

3.  SSH登录到临时EC2实例

4.  运行以下命令得到gateway实例的激活码

curl -I [gateway私有IP]/?activationRegion=cn-north-1

记录下激活码activationKey的值

5.  运行以下命令激活file gateway

aws storagegateway activate-gateway –activation-key [activationKey] –gateway-name [gateway name] –gateway-timezone “[time zone]” –gateway-region cn-north-1 –gateway-type FILE_S3 –region cn-north-1

激活成功后命令返回GatewayARN

6.  返回Storage Gateway,检查my_gateway是否已经建立

7.  点击my_gateway,编辑本地磁盘,将创建时添加的EBS卷配置成缓存,并且保存。

关联S3和file gateway

1.点击并创建文件共件

2.配置文件共享设置。

1)选择网关my_gateway

2)S3存储段名称填写s3存储桶名称,可以为现有的s3存储桶,也可以新建一个

3. 在S3存储桶和file gateway不在同一账号的情况下,我们也可以关联两者。需要在S3存储桶上额外设置存储桶策略。如果只是同一账号的情景,请直接跳到下一步。

注意:以下策略中的Principal中配置的角色为上一步中自动创建的新IAM角色。可以在IAM界面中查询到。

{
                "Version": "2012-10-17",
    "Id": "FGWPolicy",
    "Statement": [
        {
            "Sid": "FGWStmt",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws-cn:iam::[account id]:role/service-role/StorageGatewayBucketAccessRole8e94d222-b375-4f29-ac2a-99d77c1bf3"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws-cn:s3:::images-andrew",
                "arn:aws-cn:s3:::images-andrew/*"
            ]
        }
    ]
}

当然,你也可以控制file gateway账户只对S3存储桶拥有只读权限。

      {
    "Version": "2012-10-17",
    "Id": "FGWPolicy",
    "Statement": [
        {
            "Sid": "FGWStmt",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws-cn:iam::[account id]:role/service-role/StorageGatewayBucketAccessRole8e94d222-b375-4f29-ac2a-99d77c1bf3"
            },
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws-cn:s3:::images-andrew",
                "arn:aws-cn:s3:::images-andrew/*"
            ]
        }
    ]
}

4.点击下一步,确认,等待文件共享状态变为可用。

在Ec2上使用file gateway上的NFS

1.  登录已经创建的临时EC2实例。我们将在该机器上测试NFS的配置。

2.  运行以下命令

sudo mount -t nfs -o nolock [gateway私有IP]:/[s3存储桶名] [MountPath]

3.  成功mount后,您就可以在/nfs文件夹看到s3存储桶中的内容了。您可以添加,删除,或者查看这些内容。

注意: 您在/nfs文件夹下的操作会直接映射到gateway缓存实例上。缓存实例会定期和S3做同步。所以如果您添加了一个文件在/nfs中,过若干秒就能在S3存储桶中看到它了。

注意事项

Gateway缓存实例在该架构中为一个潜在的单点故障,建议使用一些机制来减小它的影响。比如在该机器上设置自动恢复机制。详情请参考:

https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ec2-instance-recover.html

任庆杰

任庆杰,AWS解决方案架构师。负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内和全球的应用和推广。在加入AWS前,拥有超过7年的软件开发和IT项目管理经验。