我有一个网站在基于 Linux 的 Amazon EC2 实例上运行,并映射到常规域名 (x.com)。此网站与第二个 EC2 实例上的数据库通信。
我需要关闭此实例并增加其背后的计算能力……如果我这样做,需要多长时间,然后当我再次启动机器时,我的网站会重新上线吗? IP 地址、DNS 信息等是否都会保留,以便域名继续工作,并且它仍然能够与数据库通信?
仅供参考,这是我目前在 AWS EC2 信息面板中看到的 Web 服务器信息(确切的 IP 地址略有变化,但您可以明白我的意思):
Public DNS: ec2-54-1-1-1.us-west-1.compute.amazonaws.com
Private DNS: ip-10-1-1-1.us-west-1.compute.internal
Private IPs: 10.1.1.1
答案1
停止和启动 EBS 启动实例与简单地重新启动实例非常相似,但有一些例外,最值得注意的是:
该实例被分配了一个新的内部 IP 地址。
该实例被分配了一个新的公共 IP 地址。
如果实例不在 VPC 中,则任何弹性 IP 地址都会与该实例取消关联。
临时存储(通常在 /mnt 下)上的所有数据丢失
我在本文中还描述了一些计费和可用性影响:
重启与停止/启动 Amazon EC2 实例
http://alestic.com/2011/09/ec2-reboot-stop-start
VPC 实例的行为略有不同,包括通过停止/启动保留弹性 IP 地址。
如果您将实例用作数据库服务器,并且想要使用内部 IP 地址(更便宜、更快速)连接到该实例,并且您不想在停止/启动后重新配置数据库客户端,那么您可以为该实例分配一个弹性 IP 地址并使用外部弹性 IP DNS 名称。在您将弹性 IP 地址重新关联到重新启动的实例后,这将解析为当前内部 IP 地址,并且您的客户端将从中断的地方继续。
我在本文中更详细地介绍了这种方法:
使用弹性 IP 识别 Amazon EC2 上的内部实例
http://alestic.com/2009/06/ec2-elastic-ip-internal
正如您所预料的那样,停止/启动是一种更改实例硬件的简单方法。我在本文中写了一些说明和警告:
将 EC2 实例移动到更大(或更小)的实例类型
http://alestic.com/2011/02/ec2-change-type
对于您的特定情况,我建议为实例分配一个弹性 IP 地址,并使用外部 DNS 名称的 CNAME 更改您的 DNS 以指向弹性 IP 地址。您可以在停止/启动后立即执行此操作,也可以提前执行此操作,确保在停止/启动之前一切正常。
答案2
所以,从您的信息中我可以看出,您似乎没有使用弹性 IP。
我相信您一定在 DNS 中使用了 CNAME 来指向此实例。如果您重新启动计算机,则此ec2-54-1-1-1.us-west-1.compute.amazonaws.com
DNS 名称将更改,并且您的网站将停止工作。
就内部 IP 而言,它也会改变,除非您使用 VPC,但您实际上并没有使用 VPC。
所以,如果我是你,我会非常小心地重新启动这台机器。
就时间而言,它不会花费超过几分钟的时间。
此外,如果您在 DB 实例上运行任何 iptables,只允许这个内部 IP 连接到 DB,那么它也不会工作,因为您的内部 IP 会发生变化。
所以,如果您想重启这个实例,请小心,并仔细考虑。
答案3
您的内部 IP/主机名将会改变,并且您的弹性 IP 将会分离(除非您在 VPC 中)。
重新启动实例后重新连接弹性 IP。我经常这样做来更改实例大小,而你只需要等待几分钟的停机时间。
验证 Apache 和任何其他服务是否设置为启动(chkconfig
如果您运行 amazon linux ami)。
答案4
如前所述,如果您有弹性 IP,它将重新连接到实例,因此您的 DNS 设置不需要改变。但是,无论如何,您的私有 IP 都会改变。这可能意味着您需要更新 mysql 中的 GRANT 设置。因为您还没有GRANT ALL PRIVILEGES ON *.* to 'somedude'@'%'
……对吧?;)