自动缩放和 NFS 服务器

自动缩放和 NFS 服务器

我在 AWS 上设置了一台 Web 服务器(WS-1)和一台 NFS 服务器(NFS-1)。WS-1 由弹性负载均衡器管理,并且可自动缩放。它还在 /var/www 上安装了一个 EBS,其中包含所有应用程序代码。

  • 在自动缩放期间,如果启动了另一个 WS-X,/var/www 挂载的 EBS 是否也会被克隆并附加到该卷?如果没有,除了在根 EBS 卷上托管代码外,我还有什么选择?

  • NFS 内部的访问是根据 IP 定义的,例如 10.0.0.1/32(rw,...)。在自动扩展期间,将启动更多实例,我如何允许它们连接到 NFS 服务器并挂载共享目录?我不想使用 NFS 授予对私有 IP 子网的访问权限,而在安全组级别,我已将对 NFS 服务器的访问权限授予 0.0.0.0/0。NFS 服务器使用固定端口,例如 111、2049、4000-4002。

答案1

在扩展时,EBS 卷及其数据不会被“克隆”。要实现此行为,您需要在启动时自动执行此操作。

  1. 获取 WS-1 EBS 卷的最新快照
  2. 创建并附加卷

另一种方法是将其从 S3 中拉下来,具体取决于 EBS 上的数据量。

使用安全组,您可以允许 app_security_group 中的任何服务器访问 nfs_server_group 中的任何服务器。这将允许您动态更新安全组。

希望这是有意义的。

答案2

仅当您最近为实例拍摄了 AMI(Amazon Machine Image)时,您的实例才会被“克隆”。自拍摄快照以来,您的文件系统可能会发生一些变化,因此最好使用AWS 用户数据创建一个 Bash/CloudInit 脚本,它将触发对将要发生变化的区域(例如代码库、媒体等)的更新。

更新某些区域的选项可以是以下任一项(列出优点和缺点):

  1. S3 上的中央存储点
    • 访问存储桶的权限通过您分配给实例的 IAM 角色进行管理
    • AWS 服务之间的快速 I/O 带宽
    • 持续正常运行
    • 缺点:除非你使用存储桶版本控制,您无法获得源代码控制提供的修订灵活性
  2. 用于引导数据的源代码控制(Git、Subversion)存储库:
    • 允许您通过源代码控制动态更新引导脚本,并拥有贡献和历史记录等
    • 缺点:需要与 Git 主机建立(潜在的)外部连接,并需要权限和安全组配置才能实现这一点
    • 缺点:可能比 S3 慢一点

以下是引导脚本的示例,您可以将其应用于启动配置,以触发它动态执行引导任务。请注意,用户数据脚本以 root 用户身份执行。

#!/bin/bash
# Update your packages
yum update -y
# Get/execute bootstrapping
cd /tmp
git clone ssh://your-git-server/bootstrapping-repo.git
chmod +x /tmp/your-repo/bootstrapping.sh
# Execute it
/tmp/your-repo/bootstrapping.sh
# Remove the bootstrapping script remnants
rm -rf /tmp/your-repo

此方法使您可以灵活地根据需要随时更新“bootstrapping-repo”,而无需定期创建新的 AMI。

在背景中,我使用用户数据中的 S3 来获取相关的 SSH 密钥、主机文件等,并使用 Git 作为引导存储库。

尽可能定期更新 AMI 并将其保存到启动配置中也是一个好主意,这样启动的新实例就不必花太长时间进行自我更新。您是时不时手动执行此操作还是编写脚本通过 API 或 CLI 执行此操作取决于您。

供参考:实例启动时调用的用户数据和后续脚本的输出将记录到文件中/var/log/cloud-init-output.log

相关内容