簡體   English   中英

從 Spring 引導應用程序寫入轉發的多區域 Aurora

[英]Multi-Region Aurora with write forwarding from Spring Boot Application

我創建了一個基於 MySql 引擎的多區域(例如兩個區域)Aurora 集群。 它具有包含 1 個寫入器實例和 1 個讀取器實例的主集群,以及僅包含讀取器實例的輔助集群。

根據此處的 Aurora 文檔,在讀取器實例的次要區域中執行命令,可以將任何寫入調用轉發到主集群寫入器實例。

SET aurora_replica_read_consistency = 'session';

這工作正常,當我通過mysql客戶端執行相同操作時。 我也可以使用輔助讀取器實例進行寫入操作。

現在,我已經為這兩個區域創建了一個具有單獨實例的應用程序。 與具有寫入器和讀取器的主要 Aurora 集群連接的主要應用程序實例,因此我可以在那里進行讀取和寫入操作。

對於連接到只有讀取器實例的輔助 Aurora 集群的輔助應用程序實例,只有讀取操作有效。

作為解決方案,我在spring啟動應用程序中創建了 writeForward.sql 以僅在輔助集群上的應用程序初始化期間執行和設置aurora_replica_read_consistency 為此,我僅在次要區域的參數存儲中添加了以下屬性:

spring.datasource.data=classpath:writeForward.sql

但這在某種程度上不起作用,輔助應用程序仍然無法執行任何寫操作。

我正在尋找有關如何處理此問題的幫助。

再次閱讀 Aurora 文檔后,我意識到僅當為每個 session 設置屬性aurora_replica_read_consistency時,從次區域寫入轉發才有效。

始終為要轉發寫入的任何 session 設置 aurora_replica_read_consistency 參數。 如果不這樣做,Aurora 不會為該 session 啟用寫轉發。

為了實現這一點,應用程序建立的每個數據庫連接都需要執行此命令:

SET aurora_replica_read_consistency = 'session';

對於使用 Hikari DB 連接池的 Spring Boot 應用程序,我使用了以下屬性,它會為與 DB 維護的每個連接自動執行上述 SQL 命令。

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

關於 Hikari 連接池的詳細信息可以在這里找到,其中提到了connectionInitSql屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM