EC2上的负载平衡器+自动缩放+Mysql

EC2上的负载平衡器+自动缩放+Mysql,mysql,amazon-ec2,load-balancing,amazon-elb,autoscaling,Mysql,Amazon Ec2,Load Balancing,Amazon Elb,Autoscaling,我们有一个EC2实例,它是一个网站,它使用一个mysql数据库,该数据库位于同一地区的另一个EC2实例上。在mysql中,我们提供了基于服务器弹性IP的受限访问,以防止入侵。 现在,我们决定在此服务器上安装ELB。ELB部分实际上工作得很好,但是当自动扩展一个新实例时,它有一个随机的公共IP地址,因此不能添加到mysql的异常中。 我尝试将ELB dnsA名称添加到mysql以提供访问,但它仍然不起作用。ELB工作正常,自动缩放会增加一个新实例,但网站显示错误,因为未连接到数据库 如何纠正这个错

我们有一个EC2实例,它是一个网站,它使用一个mysql数据库,该数据库位于同一地区的另一个EC2实例上。在mysql中,我们提供了基于服务器弹性IP的受限访问,以防止入侵。 现在,我们决定在此服务器上安装ELB。ELB部分实际上工作得很好,但是当自动扩展一个新实例时,它有一个随机的公共IP地址,因此不能添加到mysql的异常中。 我尝试将ELB dnsA名称添加到mysql以提供访问,但它仍然不起作用。ELB工作正常,自动缩放会增加一个新实例,但网站显示错误,因为未连接到数据库


如何纠正这个错误?

< p>而不是限制IP的数据库访问,考虑子网的限制。< /P> 您将有一个公共SubentWebServer和ELB,还有一个私有的one数据库服务器 公用子网中的计算机可供internet中的每个人访问,而专用子网中的计算机仅可供公用子网中的计算机使用

有关此类配置的更多信息,请参见:

为了管理数据库服务器,您可以设置堡垒主机:
使用安全组,而不是通过IP地址限制访问:

创建一个安全组,例如appsg,并将其与允许与MySQL服务器通信的任何实例相关联 为MySQL实例创建一个安全组,例如称之为SQL-SG,并允许从App SG进行入站连接 这样,只有带有appsg的机器才允许与MySQL实例通信。当Auto Scaling启动与App SG关联的新实例时,它们也将能够与MySQL通信


你应该尽可能避免硬编码的IP地址。。。永远不要使用它们

这个问题与软件开发无关,这是纯操作性的东西。DBA或系统管理员比软件开发人员更能回答这个问题。为什么不让他们使用用户名、密码进行连接,其中用户名在授权中的条目为主机通配符%?或者是EC2安全组发布的防火墙。从mysql.user浏览一下selectuser和host,就会了解主服务器是如何连接的。大概是通过本地主机,谢谢!这似乎是个好主意。但现在我们遇到了一个问题,我们已经在代码中的不同位置使用了DB实例的公共IP,而纠正这一问题将是一项容易出错的任务。由于安全组只允许访问私有ip或公共dns,我们不知道该怎么办。如果您的数据库与应用服务器位于同一VPC中,应用服务器不应通过公共ip地址访问数据库。这会导致流量通过互联网网关离开专有网络,然后再回到专有网络,这会产生1c/GB的流量成本。相反,您应该通过解析为数据库私有IP的DNS名称来引用数据库。使用上述建议的安全组,还可以更改数据库的私有IP地址,以防需要在另一个实例上启动它,例如在不同的AZ/子网中。我已经尝试了子网,正如我以前所想的那样。但问题是现在实例已经在运行,我找不到任何方法来更改这些实例的子网。否则,这是一个非常好的解决方案。