2011-05-18 83 views
2

书写时使用Django或这样的Web应用程序,什么是连接到动态的EC2实例的最佳途径,比如Redis的内存缓存或实例的集群? IP地址在重启之间发生变化等。弹性IP默认限制为5个 - 有哪些其他选项可用于自动发现/自动更新哪些机器可用?我听说在AWS网络研讨会最近提到如何管理和连接到EC2实例的动态IP?

回答

1

一种方法是存储这类的SimpleDB的信息。本质上,您将使用SimpleDB作为中央配置位置,并且您启动的每个实例都将使用此配置注册其IP等,因此您始终可以在一个位置完整描述所有实例。我在实践中没有看到这一点,所以我不知道最佳做法究竟是什么,但这个想法听起来很合理。我想你可以使用SNS或其他东西来指示所有其他实例,只要配置发生变化,所有人都可以刷新其配置的内存缓存。

我真的不知道AWS管理API,但可能有一个API调用来列出您的EC2实例,此时您可以使用某种自定义协议来ping每一个,并询问它是什么 - 部分memcache集群,Redis等。

0

如果你想留在EC2实例中(我在同一条船上,我读过你可以用他们的VPC做这种事情或者使用S3桶或类似的东西),但在EC2中,我是这样写的东西的中间......这一切都非常简单了,直到你需要与你的数据中心或某事的服务器与服务器联系的部分。目前,我正在做的方法是使用API​​来创建实例,并启动它...那么一旦它准备好了,我联系服务器执行PowerShell脚本我有在服务器上.... PowerShell的重命名电脑并重新启动它......这需要我们的数据中心防火墙需要主机名和MAC。我还没有找到远程重命名计算机的方法。

就知道了IP,弹性IP地址是要走的路。他们说你只被允许5,并且需要申请更多,但我们经常要求更多,他们给我们..我们现在喜欢15,他们还没有抱怨。

,如果你不'想要做的所有的计算机和重命名等...你可以使用DHCP和设置您的计算机,所以当它启动时它会从DHCP计算机名和一切....我的另一种选择我不知道该如何做到这一点,我遇到非常聪明的人告诉我,这是在我为亚马逊研究期间做到这一点的方式。

我肯定会推荐你进入亚马逊API ......我一直在使用它不到一个月,我可以做各种疯狂的事情。我的代码可以检测到我们的系统受到压力的区域,启动10台亚马逊服务器,全部配置为任何需要缓解压力的服务,并准备在不到7分钟的时间内向所有人发送作业。给我的眼睛带来一滴眼泪。

该文档非常完整... API本身是一门艺术作品,也是一种快乐的程序,我非常喜欢使用它。 (和不,我不'为他们工作哈哈)

+0

为了澄清一些事情,我们遇到的问题需要我们采取重命名路线,因为我们的数据中心防火墙需要知道我们的计算机名称和mac地址是什么,才能让它与我们进行交互(或更具体地说,其服务与我们互动)。如果您不需要这种预防措施,那么您可以非常轻松地使用API​​来获取有关正在运行的实例所需的每一点信息......使用DescribeInstancesRequest和DescribeInstancesResponse方法。 – 2011-06-07 19:49:14

1

我有一个类似的问题,并没有找到一个解决方案,因为我们还需要映射负载平衡器地址。

对于您的问题,有两个很好的选择:

如果你不使用EC2微实例或负载平衡器,你一定要使用亚马逊虚拟私有云,因为它可以让你控制实例IP地址和路由表( check all limitations before using this service)。

如果您仅使用EC2实例,则可以编写一个脚本,该脚本使用EC2 API工具运行命令ec2-describe-instances以查找所有实例及其公用/专用IP。然后,该脚本可以将实例名称参数化为主机并更新/ etc/hosts。最后,您应该将脚本放在需要访问EC2实例的每台计算机/实例的crontab中(请参阅ec2-describe-instances)。

0

传统方式:使用DNS。这是它的目的,所以使用它!当机器启动时,让它询问与其功能相关的域名,并将其用于您的配置。如果它停止响应,请重新解析DNS(或者只是定期执行此操作)。

我认为route53和弹性负载平衡的东西可以用来做到这一点,如果你想坚持亚马逊的解决方案。

2

晚的答案,但使用的Boto:http://boto.cloudhackers.com/en/latest/index.html

您可以使用安全组,标签等手段打EC2 API和挑选每一件事情的情况下/ IPS(DB服务器,缓存服务器,等等。 )在加载时。我们在部署中取得了巨大的成功,并且正在使用我们的Django settings.py。