我正在 Amazon RDS Aurora 上运行具有两个实例的数据库集群。一个实例是 master ,另一个实例是只读的副本。复制副本的目的是允许第三方应用程序访问数据库的某些表以进行报告。因此,报告工具可以访问只读群集终结点,这可以很好地工作。为了实现零停机时间维护,AWS随时都会将“副本”提升为“主服务器”。这很酷,并且不会影响报告工具,因为它访问了cluster-ro端点,该端点始终将流量路由到正确的(只读)副本。
但是,这意味着我必须在两个实例上都启用“可公开访问:是”标志,以便报表工具(位于VPC外部)可以访问所有实例,因为我无法预测哪个实例将成为是母版还是副本,对吗?
我希望只能从VPC内部访问“主”实例(无论是哪种实例)。我该如何实现?
我的理解是,我在“主”实例上所做的每个更改都是在副本上自动完成的,例如包括添加/删除安全组。因此,如果我打开防火墙以允许访问报告工具的副本,则相同的IP地址也可以访问常规群集终结点和实例(不仅是cluster-ro终结点)。我该如何预防?
答案 0 :(得分:1)
不幸的是,您将需要为此定制一些东西。从设计的角度来看,很少有以下选择:
Aurora群集在您调出的所有实例之间共享安全组设置。如果要进行自定义设置,则可以考虑的是仅使整个群集成为VPC,然后具有将请求转发到数据库实例的ALB或EC2代理。然后,您可以拥有多个“代理”,并为每个代理关联单独的安全组。
这种体系结构的一个重要要求是,您需要确保彻底处理故障转移。您的代理应始终与群集端点通信,而从不与实例端点通信,因为实例可以在后台从READER更改为WRITER。例如,ALB不允许您创建将请求转发到DNS的侦听器,它们只能与IP一起使用。这意味着您将需要其他基础结构来监视读取器和写入器的IP并保持ALB的更新。
EC2代理绝对是这种设计的更好选择,但要增加成本。如果您对此设置有特定疑问,我可以详细介绍。这绝对是该方法的总结,尚未准备就绪。
同样,为什么不能改为使用读取受限的db用户,而保持群集为公共状态(当然启用了ssl)?