我有一台位于 AWS 之外的服务器。我希望能够将 EFS 卷挂载到它,但我不确定这是否可行。
也许如果您创建一个 VPC,并通过 VPN 创建隧道?
有谁知道这是否可能?
我有一个 WordPress 网站,截至目前,我完全在Amazon Lightsail实例上运行。它得到了正确的备份;可用性还可以;安全性好;这是一个易于维护的简单设置。没关系。
我想通过将站点移至Amazon Elastic Beanstalk并对站点的后端进行一些其他重大更改(使站点数据库独立于 PHP 服务器、移至 nginx 等)来提高可用性和加载时间。这有很多好处,其中最主要的原因是:EBS 只是比 Lightsail 更强大的服务器设置。
在亚马逊提供的教程创建魔豆上一个WordPress站点只建议安装/wp-content/uploads/
上的亚马逊弹性文件系统,默认的配置脚本这样做的客户。这样做的缺点是核心 WordPress 文件不会在 EC2 实例之间共享;相反,它们会在每个实例上复制,因此在您的站点上运行 WordPress 更新过程意味着某些实例实际上并未更新,从而产生不良行为。
本教程建议通过使用 WordPress 的(测试版)导出工具导出所有网站内容并在运行的新 Beanstalk 环境中使用(测试版)导入工具重新导入它的可怕过程来更新 WordPress(和插件)。更新了 WordPress。
我并不完全反对自动化这个过程,以便更新 WordPress 对我来说更容易,但我重视保持最新的更新,所以我想为此进行优化,我怀疑这对我(或任何客户)来说是最好的解决方案是在更新系统或插件的过程中使用 WordPress 的 beta 导入导出工具。
例如,有时这些更新是 WordPress 为其提供自动修补系统的安全更新,这对于最大限度地提高站点安全性非常理想。但是,如果由于我已经概述的更新挑战而未在 EC2 实例之间共享核心 WordPress 文件,则自动修补将无法按预期工作。
综上所述:
如果我将所有 WordPress 文件(而不仅仅是/wp-content/uploads/
目录)放在共享 EFS 存储上,我可能会遇到哪些架构或系统问题?
当然,我会进行自己的测试以了解事情的进展情况,但我想知道要注意什么(如果有的话),以及在尝试这样做时应该在哪里设定我的期望。
启动配置上的用户数据:
#!/bin/bash
echo ECS_CLUSTER=prodcluster >> /etc/ecs/ecs.config
sudo yum install -y nfs-utils
sudo mkdir /home/ec2-user/web_file_uploads
sudo chmod 777 /home/ec2-user/web_file_uploads
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-abcdef.efs.ap-southeast-2.amazonaws.com:/ /home/ec2-user/web_file_uploads
Run Code Online (Sandbox Code Playgroud)
任务定义:
{
"networkMode": "bridge",
"containerDefinitions": [
{
"portMappings": [
...
],
"essential": true,
"mountPoints": [
{
"containerPath": "/src/temp_uploads/",
"sourceVolume": "web_file_uploads",
"readOnly": null
}
],
"name": "webapp",
"readonlyRootFilesystem": null,
"image": "911911911.dkr.ecr.ap-southeast-2.amazonaws.com/webapp:release6",
"memoryReservation": 150
}
],
"volumes": [
{
"host": {
"sourcePath": "/home/ec2-user/web_file_uploads"
},
"name": "web_file_uploads"
}
],
"family": "webapp-task"
}
Run Code Online (Sandbox Code Playgroud)
注意:我已将所需的端口添加到安全组。src/temp_uploads 文件夹必须包含在使用此任务定义启动的所有其他容器实例中。
问题:如果我使用 …
在 Amazon EFS 挂载点内执行 ls 时,它会挂起。
AWS 上的 EFS 故障排除部分有关 AWS EFS 故障排除的
提到以下内容:
安装没有响应
Amazon EFS 装载似乎没有响应。例如,像 lshang 这样的命令。
采取的行动
如果另一个应用程序正在向文件系统写入大量数据,则可能会发生此错误。在操作完成之前,对正在写入的文件的访问可能会被阻止。通常,任何尝试访问正在写入的文件的命令或应用程序都可能会挂起。例如,ls 命令在到达正在写入的文件时可能会挂起。这是因为某些 Linux 发行版给 ls 命令起了别名,以便除了列出目录内容之外还可以检索文件属性。
要解决此问题,请验证另一个应用程序是否正在将文件写入 Amazon EFS 挂载,并且它处于不间断睡眠 (D) 状态,如下例所示:
$ ps 辅助| grep large_io.py
根 33253 0.5 0.0 126652 5020 点/3 D+ 18:22 0:00 python large_io.py /efs/large_file
验证情况确实如此后,您可以通过等待其他写入操作完成或实施解决方法来解决该问题。在 ls 的示例中,您可以直接使用 /bin/ls 命令,而不是别名,这将允许命令继续执行,而不会挂在正在写入的文件上。一般来说,如果写入数据的应用程序可以强制定期刷新数据(也许通过使用 fsync(2)),这可能有助于提高文件系统对其他应用程序的响应能力。但是,这种改进可能会以牺牲应用程序写入数据时的性能为代价。
所以我验证了一下是否有东西写入其中,但唯一出现的是
根 43556 0.0 0.0 124356 756 点/6 D+ 19:15 0:00 ls --color=auto /efs/
根 43558 0.0 0.0 112664 972 点/3 S+ …
我尝试使用 inotify 通知来检查文件系统事件,但它不起作用。没有文件系统通风通知程序工作。
是否有适用于远程文件系统(如 EFS、NFS、GFS 等)的 inotify 实用程序?
我们刚刚获得了一个 AWS 账户,我正在测试 EFS。我创建了一个 EFS,将其安装在 Amazon Linux 实例上,并将其设置为在 samba 中共享。然后我能够将共享映射为 Windows 7 和 Windows Server 2012 中的驱动器,但与它相关的所有内容都非常慢(查看文件、创建文件、查看共享属性 - 一切)。我认为这是由于装载为 8 EXA字节。
有没有办法在实例或 samba 中安装共享来调整共享大小或将其分成更小的部分?
有没有办法直接调整efs的大小?我们永远不会使用 8 艾字节!
有没有办法判断除了大小之外是否还有其他原因导致它变慢?
我们真的需要能够将其映射为 Windows 中的驱动器。
amazon-efs ×6
amazon-ecs ×1
amazon-vpc ×1
docker ×1
inotify ×1
mappeddrive ×1
nfs ×1
samba ×1
windows ×1
wordpress ×1