Elastic Beanstalk、Java Spring Boot 和 RDS 多可用区部署

Posted

技术标签:

【中文标题】Elastic Beanstalk、Java Spring Boot 和 RDS 多可用区部署【英文标题】:Elastic Beanstalk, Java Spring Boot and RDS Multi AZ Deployment 【发布时间】:2021-04-06 08:26:23 【问题描述】:

我们即将在运行 Java 8(不是 Corretto 8)的 Elastic Beanstalk 上部署 Spring Boot 2.3 应用程序。 我们正在考虑将 Multi AZ 用于 RDS,我正在阅读自述文件 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html 并且有一部分指出我们应该注意 DNS 缓存以防故障转移Setting the JVM TTL for DNS name lookups 它说的是以下内容

The default TTL can vary according to the version of your JVM and whether a
 security manager is installed. 
Many JVMs provide a default TTL less than 60 seconds. 
If you're using such a JVM and not using a security manager, 
you can ignore the rest of this topic. For more information on security managers 
in Oracle, see The security manager in the Oracle documentation. 

Elastic Beanstalk 中 Java 8 的默认值是多少?好像没找到。 同样根据我的理解,如果 ttl 值很大,并且数据库发生故障,它不会故障转移到另一个 AZ 中的实例,因为 DNS 不会改变。对吗? 也是默认值太大,Spring Boot 不使用 XML 文件设置该属性的方式是什么? 提前非常感谢

【问题讨论】:

这个答案可能对你有帮助:***.com/questions/29579589/… 【参考方案1】:

您可以在 JVM 中使用以下代码进行调整:

java.security.Security.setProperty("networkaddress.cache.ttl" , "1");
java.security.Security.setProperty("networkaddress.cache.negative.ttl" , "1");

这个值是缓存数据的秒数。

但是,您可能还需要考虑RDS Proxy,因为它可以加快故障转移速度。应该没有代码更改,只有配置更改。 RDS Proxy 无需额外费用。

【讨论】:

在哪里放置这些 setProperty 调用?您还知道 Elasticbeanstalk 的默认值是多少吗? 在您与数据库交互之前,该代码需要在您的代码中,可能在@PostConstruct 或通过ApplicationListener。不,我不知道默认值,但您可以通过获取上述属性找到它。不过有点痛。 我创建了一个设置这些属性的@Configuration 类,但从日志看来HikariPool-1 - Start completed. 在设置属性之前就开始了。那会是个问题吗?这算作与数据库的交互吗?

以上是关于Elastic Beanstalk、Java Spring Boot 和 RDS 多可用区部署的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Elastic Beanstalk 上安装/运行 Spark Java 框架?

AWS Elastic Beanstalk 和 JAVA_OPTS

Amazon Elastic Beanstalk Java 如何获取 Oracle JDK

使用 CLI/Boto 创建 Java 7、Tomcat 7 Elastic Beanstalk 实例

您如何使用 Elastic Beanstalk 和 Java 使用 cron 作业?

AWS Elastic Beanstalk 上的 Java 应用程序会话超时