amazon-web-services - Amazon RDS Aurora 主/副本访问限制
问题描述
我在Amazon RDS Aurora上运行一个带有两个实例的数据库集群。一个实例是主实例,另一个实例是只读副本。副本的目的是允许第三方应用程序访问数据库的某些表以进行报告。因此,报告工具访问只读集群端点,它工作得非常好。为了实现零停机维护,AWS 随时将“副本”提升为“主”。这很酷,并且不会影响报告工具,因为它访问 cluster-ro 端点,该端点总是将流量路由到正确的(只读)副本。
但是,这意味着我必须在两个实例上启用“可公开访问:是”标志,以便报告工具(位于 VPC 外部)可以访问所有实例,因为我无法预测哪个实例成为主实例或复制品,对吗?
我更喜欢“主”实例(无论是什么实例)只能从 VPC 内部访问。我怎样才能做到这一点?
我的理解是,我在“主”实例上所做的每一项更改都是在副本上自动完成的,例如添加/删除安全组。因此,如果我打开防火墙以允许访问报告工具的副本,相同的 IP 地址也可以访问正常的集群端点和实例(不仅是 cluster-ro 端点)。我怎样才能防止这种情况?
解决方案
不幸的是,您将需要为此构建一些自定义的东西。从设计角度考虑的几个选项如下:
Aurora 集群在所有实例中共享安全组设置,就像您所说的那样。如果您想拥有自定义设置,那么您可以考虑只创建整个集群 VPC,然后让 ALB 或 EC2 代理将请求转发到您的数据库实例。然后,您可以拥有多个这样的“代理”并为每个代理关联单独的安全组。
这种架构的一个重要提示是您需要确保干净地处理故障转移。您的代理应始终与集群端点通信,而不是与实例端点通信,因为实例可以在幕后从 READER 更改为 WRITER。例如,ALB 不允许您创建将请求转发到 DNS 的侦听器,它们仅适用于 IP。这意味着您将需要额外的基础架构来监控读取器和写入器的 IP 并保持 ALB 更新。
EC2 代理绝对是这种设计的更好选择,但需要注意的是会增加成本。如果您对此设置有具体问题,我可以详细介绍。这绝对是该方法的总结,并没有准备好。
同样,为什么您不能使用读取受限的数据库用户并保持集群公开(当然启用了 ssl)?
推荐阅读
- reactjs - 如何向 react-router-dom 添加属性?
- angular - Angular Material 选项卡在 ngOnInit 之后导航到选定的选项卡
- excel - 无法获取范围类的 FindNext 属性
- sql - Oracle 查询(PROC)没有给出想要的结果
- modx - Modx 赋予用户添加新用户的权限
- java - HTML 文件中显示的编码字符
- java - 无法在休眠状态下连接到服务器数据库
- spring-boot - spring boot 2:手动加载application.properties
- installation - 下载 Fuchsia 源码——更新项目或包时,由于致命错误,Jiri 钩子无法运行
- oracle - Oracle 报告 REP-0820:无法导入指定的图像