AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 523445
Accepted
Luis Lobo Borobia
Luis Lobo Borobia
Asked: 2013-07-16 08:29:29 +0800 CST2013-07-16 08:29:29 +0800 CST 2013-07-16 08:29:29 +0800 CST

当aws ec2主机名更改或增加时如何自动更新nginx上游服务器列表?

  • 772

我想在 AWS 中设置自动缩放。我不想使用弹性负载均衡器。

Amazon 中的 Autoscaling 在需求高峰期间无缝创建 EC2 实例以保持性能,并在需求平缓期间自动减少以最小化成本。

由于此 EC2 实例是自动创建的,因此 NGINX 不知道它们的主机名。

我知道并且已经在 nginx 中设置了 10 个 EC2 实例的上游。

当自动缩放添加/更新/删除 EC2 实例时,我希望能够将服务器名称自动添加/更新/删除到我的上游 nginx 配置中。

nginx
  • 3 3 个回答
  • 8791 Views

3 个回答

  • Voted
  1. Best Answer
    Upendra
    2015-01-21T11:25:49+08:002015-01-21T11:25:49+08:00

    这可以通过使用 Amazon SDK(我几乎完成它,将其放在 github 上),利用 SNS、EC2 和 Autoscaling 服务来实现。

    我已按照以下步骤实现此目的:

    1. 启用 HTTP 通知并订阅我的网络服务器。
    2. 向我的自动缩放组添加了一个生命周期挂钩,心跳为 1 分钟(在终止前等待 1 分钟)以终止服务器
    3. 创建了一个索引文件来解析消息以检测它是什么类型的消息(即启动或终止)
    4. 一旦确定了事件类型,我就查询 EC2 以获取实例的私有 ip
    5. 在启动的情况下,等到收到标头 200,然后将 ip 添加到 nginx 配置并重新加载
    6. 在终止的情况下从配置中删除 IP 并重新加载 nginx

    请在此处找到脚本https://github.com/singhupendra/aws-autoscale

    • 7
  2. Luis Lobo Borobia
    2013-08-24T10:35:01+08:002013-08-24T10:35:01+08:00

    谢谢@talonx,我做了一些研究,Amazon Autoscale 有一个 api 来查询当前的自动缩放组状态,并枚举其成员。它返回实例 ID(http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/api_requests.html#query-example),然后您可以使用描述工具获取服务器名称(http://docs .aws.amazon.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-DescribeInstances.html),最后重新创建上游包含文件。我可以感觉到自动缩放通知来启动执行这些任务的进程。

    我仍然没有实现它,但它是一条路要走。

    还可以将 Autocaling 与 SNS http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/ASGettingNotifications.html一起使用

    • 2
  3. Ville
    2015-08-22T10:20:58+08:002015-08-22T10:20:58+08:00

    我自己还没有实现这个,但我正在考虑使用NGiNX Plus的On-the-fly Reconfiguration。我认为 AMI 或设置 Auto Scaling Group 实例的配置管理(Puppet、Salt 等)可以访问 NGiNX 重新配置 API(可能通过内部 Route53 域名,因此没有固定 IP需要使用),并将自己添加到上游集群中进行反向代理。之后,NGiNX 的内置健康检查将接管那个 [添加的] 实例,并在它变得不可用时将其删除。这似乎是最干净的解决方案,添加实例没有延迟,删除它也几乎没有延迟,因为 NGiNX Plus 具有带外健康检查功能。

    这种方法避免了需要设置自动发现系统(Consul、Serf 等),对于较小的设置,这在设置/管理以及所需的 EC2 实例方面通常看起来开销很大。例如,Consul 至少需要三个实例才能稳定。Serf 或许可以在 ASG 实例本身上运行,但仍然存在维护它的开销,并且如果 ASG 缩减到一两个实例,您将失去法定人数。

    最后,这可以与 Auto Scaling Group 更改的自动通知相结合,可能在用于负载平衡的 NGiNX 服务器上。由此类通知触发的侦听器(这可能是 Upendra 也提到的)然后可以通过 On-the-fly 修改 API 立即将新实例添加到 NGiNX。除了 NGiNX Plus 的成本之外,这让人想知道为什么有人会首先使用具有众多问题的 Elastic Load Balancer。

    编辑 2015-12-07:ngx_openresty的balancer-by-lua(参见这个 GitHub 线程)提供了另一种可能的开源解决方案,用于从 NGiNX 上游组中热添加/删除服务器。我自己还没有尝试过这个,但想在这里为任何偶然发现这篇文章的人添加一个提及。

    • 1

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve