从 Spring 引导应用程序写入转发的多区域 Aurora

Multi-Region Aurora with write forwarding from Spring Boot Application

我已经创建了一个基于MySql引擎的多区域(例如两个区域)Aurora集群。它的主集群有 1 个写入器和 1 个 reader 实例,辅助集群只有 Reader 个实例。

根据 Aurora 文档 here,在 reader 实例上的次要区域中执行命令,可以将任何写入调用转发到主集群编写器实例。

SET aurora_replica_read_consistency = 'session';

这很好用,当我通过 mysql 客户端执行相同操作时。我也可以使用辅助 reader 实例进行写操作。

现在,我已经为这两个区域创建了一个具有单独实例的应用程序。与主 Aurora 集群连接的主应用程序实例具有 writer 和 reader,因此我可以在那里进行读写操作。

对于连接到只有 reader 个实例的辅助 Aurora 集群的辅助应用程序实例,只有读取操作有效。

作为解决方案,我在 spring 启动应用程序中创建了 writeForward.sql 以执行并设置 aurora_replica_read_consistency 仅在辅助集群上的应用程序初始化期间。为此,我仅在次要区域的参数存储中添加了以下 属性:

spring.datasource.data=classpath:writeForward.sql

但这在某种程度上不起作用,辅助应用程序仍然无法执行任何写入操作。

我正在寻求有关如何处理此问题的帮助。

又看了一遍Auroradocumentation,发现只有在属性aurora_replica_read_consistency[=时才可以从secondary region写转发27=] 为每个会话设置。

Always set the aurora_replica_read_consistency parameter for any session for which you want to forward writes. If you don't, Aurora doesn't enable write forwarding for that session.

为了实现这一点,应用程序建立的每个数据库连接都需要执行此命令:

SET aurora_replica_read_consistency = 'session';

对于使用 Hikari DB 连接池的 Spring 引导应用程序,我使用了以下 属性,它会为与 DB 维护的每个连接自动执行上述 SQL 命令。

spring.datasource.hikari.connection-init-sql= SET aurora_replica_read_consistency = 'session'

关于 Hikari 连接池的详细信息可以在 here 中找到,其中提到 connectionInitSql 属性。