EC2上的负载均衡器+自动扩展+MySQL

4
我们有一个EC2实例,它是一个网站,使用的是另一个在同一区域内的EC2实例上的mysql数据库。在mysql中,我们基于服务器弹性IP地址提供了受限访问,以防止入侵。
现在,我们决定在此服务器上安装ELB。实际上ELB部分运行良好,但是当自动扩展启动新实例时,它具有随机的公共IP地址,因此无法添加到mysql的异常列表中。
我尝试将ELB DNS(A记录)添加到mysql中以提供访问,但仍然无法工作。ELB工作正常,自动扩展启动新实例,但由于未连接到数据库,网站显示错误。
如何解决这个问题?

这个问题与软件开发无关,纯粹是操作方面的事情。数据库管理员或系统管理员比软件开发人员更有能力回答这个问题。 - Shadow
1
为什么不让他们使用用户名、密码进行连接,其中该用户名在授权中有一个host通配符%的条目?或者这是一个EC2安全组问题(防火墙)。通过查看select user,host from mysql.user,可以了解主服务器是如何连接的。推测可能是通过localhost连接的。 - Drew
2个回答

4
不要通过IP地址限制访问权限,使用Security Groups:
- 创建一个安全组(例如 `App-SG`),并将其与任何允许与MySQL服务器通信的实例相关联。 - 为MySQL实例创建一个安全组(例如 `SQL-SG`),并允许从 `App-SG` 进行入站连接。
这样,只有具有 `App-SG` 的机器才能与MySQL实例通信。当自动扩展启动与 `App-SG` 相关联的新实例时,它们也将能够与MySQL进行通信。
尽可能避免硬编码IP地址(就是说,永远不要使用它们!)。

谢谢!这似乎是一个很好的想法。但现在我们有一个问题,我们已经在代码的各个位置使用了DB实例的公共IP,纠正这一点将是一个容易出错的任务。由于安全组只允许通过私有IP或公共DNS访问,我们不知道该怎么办。 - Bharat Mukheja
如果您的数据库与应用服务器位于同一VPC中,应用服务器不应该通过公共IP地址访问数据库。这将导致流量通过VPC(通过Internet网关)出去,然后再次返回,这会产生1c / GB的流量费用。相反,您应该通过DNS名称引用数据库,该名称解析为数据库的私有IP。这种使用安全组建议如上所述,还可以让您更改数据库的私有IP地址,以防需要在另一个实例(例如位于不同的AZ /子网中)上启动它。 - John Rotenstein

1
不要限制数据库访问IP,考虑按子网进行限制。您将拥有一个公共子网(Web服务器和ELB位于其中)和一个私有子网(数据库服务器位于其中)。公共子网中的计算机可以被互联网上的所有人访问,而私有子网中的计算机只能被公共子网中的计算机访问。
有关此类配置的更多信息,请参见此处: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html 为了管理您的数据库服务器,您可以设置跳板主机: http://blogs.aws.amazon.com/security/post/Tx2ZWDW1QA6D62Y/Controlling-Network-Access-to-EC2-Instances-Using-a-Bastion-Server

我之前已经尝试过子网,因为我之前就考虑到了这个问题。但现在的问题是实例已经在运行中,我找不到任何方法来更改这些实例的子网。否则这是一个非常好的解决方案。 - Bharat Mukheja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接