神器EFS来啦!几分钟拥有一个弹性共享存储!
前不久,aws中国区域终于落地了EFS服务,真可谓是千呼万唤始出来啊,为什么这个服务这么牵动人心呢?其实啊这是由咱们实际的使用需求决定的,在这个服务没有出来之前,我们做生信分析组建云端集群,基本都是用EBS卷来做NFS文件系统,实现多台EC2之间的共享读写,这种方式和本地是一样一样的,但是已经上云的先行者们,他们的思维方式已经发生了巨大的转变,毕竟云上的每个占用的资源都是要付费的嘛~举例来说,用EBS组建的了10T的NFS系统,哪怕我里面放的文件只占用了10G,收费可还是按照10T来收;如果我实际占用超过了10T,我还要去调整EBS共享存储的大小,着实不太方便,这一点也不符合云端灵活的特点嘛! 那有没有一种共享存储方案类似S3服务,是按照我实际占用的空间收费,而且在我占用增大的时候,会自动扩容呢?对了,EFS就能满足你的这个需求。
--D.C
废话不多说,看完原理图,我们直接插入正题。
创建efs文件系统。
- 登录aws console,搜索efs,点击登录。(宁夏区为例)
- 在efs控制台里,点击Create file system。
- 这个时候出来一个配置界面,用于指定我们的EC2实例所在的VPC(一般是默认),以及在各个可用区的子网内创建一个mount target,以便在同一个VPC内的不同可用区的EC2都能够mount到这块EFS上。点击下一步。
- 接下来是设置efs自己,打标签 就不用多说了,启用生命周期管理 这个是和钱有关的,各位要竖起耳朵,不对,是瞪大眼睛看哦,提供的选项可以设置成7-14-30-60-90天不碰的数据,自动帮你放到EFS非频繁访问层,降低你的成本!官方说用得好,最高可以省92%的费用~
其他选项分别是:设置 吞吐模式,性能模式 ,是否加密,保持默认的够用了。点击 下一步。
- 这一步是安全性设置,选择policy或是JSON格式写,保持默认即可。还有一项是Access Points, 中文叫访问点,这是专门针对应用程序访问efs而设定,用于管理诸多应用程序对efs的访问。,访问点可以为通过访问点发出的所有文件系统请求强制执行用户认证(包括用户POSIX组)。访问点还可以为文件系统强制执行不同的根目录,这样不同的客户端就只能访问指定目录或子目录中的数据。这是个进阶功能,不适合本文的气质,后面开专贴讨论。
这一步我都保持默认,直接点击 下一步。
默认的JSON格式安全策略:
{
"Version": "2012-10-17",
"Id": "efs-policy-wizard-fc436d5f-a87f-4bef-b11b-3a34e7ec2dc3",
"Statement": [
{
"Sid": "efs-statement-53841e56-22be-4606-ad44-fb25a8a062b6",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"elasticfilesystem:ClientMount",
"elasticfilesystem:ClientWrite",
"elasticfilesystem:ClientRootAccess"
]
}
]
}
- 看一眼,点击 Create File System。随后我们可以看到,这个文件系统已经创建好了。选中这个文件系统,可以看到详情。
用EC2实例连接EFS
- 点击efs详情页中的 Amazon EC2 mount instructions (from local VPC),弹窗里有详细的说明。
- 另外打开一个EC2的控制界面,选中一台我们要连接的EC2,按图中所示,更改它的安全组设置,我的这台EC2安全组为
launch-wizard-1
,我还需要把default
这个安全组选中,点击Assign Security Groups。
- 如果有其他EC2也需要连接到这个efs,相同操作。随后我们登陆EC2机器,进行命令行设置,这里贴出我的命令供大家参考。
$ sudo yum install -y amazon-efs-utils
$ sudo mkdir efs
$ sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-38fd1cdd.efs.cn-northwest-1.amazonaws.com.cn:/ efs
# check disk
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 484M 64K 484M 1% /dev
tmpfs 493M 0 493M 0% /dev/shm
/dev/xvda1 50G 6.4G 43G 13% /
fs-38fd1cdd.efs.cn-northwest-1.amazonaws.com.cn:/ 8.0E 0 8.0E 0% /home/ec2-user/efs
# 试着在EFS创建一个1GiB的文件
$ sudo dd if=/dev/zero of=~/efs/1GiB bs=1M count=1024 status=progress
$ cd /efs
$ ls -lh
total 1.0G
-rw-r--r-- 1 root root 1.0G Jan 31 10:58 1GiB
- 瞧,我的EC2终于鸟枪换炮,用上了弹性伸缩的共享文件系统EFS,再也不用算我的EBS该设多大了!(其他EC2的挂载设置同上)
PS: 在创建完1GiB的文件以后,EFS的大小也会随之更新,反映到界面上有一丢丢的延时。
黑暗不是没有光,只是鲜有人看见。