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 实例