- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们正在使用 AWS Aurora 作为数据库运行基于 REST API 的 spring boot 应用程序。我们的应用程序连接到只读的 Aurora MySQL RDS 实例。我们正在对其进行负载测试。最初我们有一个数据库,我们有自动缩放,这是在高 CPU 上触发的。现在我们期望如果我们通过一个数据库实例获得一些 X 的吞吐量,那么当自动缩放发生时我们应该获得大约 1.8 倍的吞吐量,并且连接应该在新创建的数据库实例之间平均分配。但这并没有发生,而是数据库连接在两个数据库实例上不规律地上升和下降。因此,我们的负载没有得到平均分配,我们也没有获得所需的吞吐量。有时,一个数据库在 100% CPU 上运行,而另一个数据库仍在 20% CPU 上运行,几分钟后它就会逆转。以下是数据库连接配置:-
Driver - com.mysql.jdbc.driver
Maximum active connections=100
Max age = 300000
Initial pool size = 10
Tomcat jdbc池用于连接池
注意:1) 我们还禁用了 jvm 网络 DNS 缓存。2) 我们还尝试每 5 分钟刷新一次数据库连接,即使是活跃的。3) 我们已经尝试了 AWS 建议的所有方法,但没有任何效果。4)我们甚至编写了一个 lambda 代码来在新的数据库实例出现时更新 Route 53 以避免集群端点缓存,但仍然存在同样的问题。任何人都可以帮助什么是最佳实践,因为目前我们无法将其投入生产。
最佳答案
这不是一个很好的答案,但由于您还没有收到任何回复,所以有些想法。
1) 您看到的行为复制了负载均衡器的错误路由逻辑
这并不会让您感到惊讶,但这过去在小型 Web 服务器部署中更为常见——尤其是长时间运行的查询。使用连接池,您可以反射(reflect)这种情况。
2) 将这个假设向前推进,我们需要猜测亚马逊如何选择平衡只读副本的流量。
即使在他们的白皮书中,他们也没有提到他们是如何进行路由的:https://www.allthingsdistributed.com/files/p1041-verbitski.pdf
可能的选项是 route53 或 NLB。我最好的猜测是他们正在使用 NLB。 NLBs 在 2017 年第三季度才对我们可用,而 Aurora 是 2 年前,但这仍然是一个合理的猜测。NLB 可以让我们根据最少的连接数进行平衡(比循环法要好得多)。
3) 验证假设
如果正在使用 route53,那么我们将能够使用 DNS 来查找。我对 route53 端点进行了挖掘,发现它给了我一个答案
dig +nocmd +noall +answer zzz-databasecluster-xxx.cluster-ro-yyy.us-east-1.rds.amazonaws.com
zzz-databasecluster-xxx.cluster-ro-yyy.us-east-1.rds.amazonaws.com. 1 IN CNAME zzz-0.yyy.us-east-1.rds.amazonaws.com.
zzz-0.yyy.us-east-1.rds.amazonaws.com. 5 IN A 10.32.8.33
我又做了一次,得到了不同的答案。
dig +nocmd +noall +answer zzz-databasecluster-xxx.cluster-ro-yyy.us-east-1.rds.amazonaws.com
zzz-databasecluster-xxx.cluster-ro-yyy.us-east-1.rds.amazonaws.com. 1 IN CNAME zzz-2.yyy.us-east-1.rds.amazonaws.com.
zzz-2.yyy.us-east-1.rds.amazonaws.com. 5 IN A 10.32.7.97
你可以看到只读端点给我一个 CNAME 结果给
Zzz 是我的集群的名称,yyy 来 self 的 cloudformation 堆栈结构,yyy 来自 amazon。
注意:zzz-0 和 zzz-2 是两个只读副本。
我们在这里可以看到我们有用于负载平衡的 route53。
4) Route53 负载均衡
他们可能会在所有健康的只读副本上设置 Route53 循环。
TTL 可能是 5s。健康节点将被删除,但没有基于
5) 后果
A) 使用只读端点只能平衡流量远离不健康的实例
B) 数据库池将保持连接很长时间,这意味着新的只读副本不会被触及
如果我们的服务器数量较少,我们将失去平衡——我们对此无能为力。
6) 关于你能做什么的想法
A) 通过 dig 验证自己是否获得了正确的 DNS 解析,并且每 5 秒在副本之间轮换一次。
如果你不这样做,这是你需要解决的问题
B) 定期回收数据库客户端
新的副本将被使用,虽然你会不平衡,但这将有助于保持变化。但关键是您不能让所有客户同时回收。否则,您将面临所有人都获得相同时间的风险。我建议为每个客户做一些随机 ttl(在最小/最大范围内)。
C) 自己管理
总结:连接时,直接连接到具有最少连接/最低 CPU 的只读副本。
如何做到这一点并不简单。我建议使用 lambda 函数将此连接字符串保存在可查询的位置。让它以一定的频率更新。我会说更新首选数据库的频率是您回收数据库连接的频率的 1/10。如果数据库运行相似,您可以添加逻辑,您给出只读端点..并且只在存在显着不平等时给出一个明确的端点。
当出现新实例时,我会提醒您注意 float 。
D) 增加客户端数量或只读副本数量
这两者都会降低两个框出现显着差异的可能性。
关于database - Aurora 自动缩放实例中没有发生平等的连接分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51537774/
有没有办法加快 Amazon Aurora 集群快照的恢复? 我们的数据库现在有 20 兆字节,但执行快照还原需要一个小时。 最佳答案 经典 RDS Mysql 会拍摄 EBS 卷的快照,因此拍摄快照
我正在寻找这个亚马逊页面 - https://aws.amazon.com/rds/aurora/serverless/它有这样的报价: You pay on a per-second basis f
是否可以在 AWS aurora 中编写 CTE?即是否存在 WITH支持? 如果没有,你如何在极光中实现同样的目标? 最佳答案 不,Aurora 目前模仿不支持它的 MySQL 5.6。后端不太灵活
我正在尝试从本地计算机连接到我的数据库,但出现以下错误。 ERROR 2003 (HY000): Can't connect to MySQL server on 'finaltesting2.clu
我正在使用 AWS Aurora serverless 设置一个新数据库,并且需要启用 binlog。我想我已经按原样遵循了文档,但无法使其正常工作。我该如何设置? 按照文档,以下是我尝试启用 bin
今天我在 us-west-2 中为 PostGreSql 创建了 Amazon Aurora Serverless 集群,确保了 VPC 和安全组在 一种方式,它应该是公开可访问的。但我无法使用 Na
我已经看到 DynamoDB 作为 AWS AppSync 数据源的示例,但我想知道是否可以使用 Aurora(特别是 PostgreSQL)?如果是,对于基本示例,解析器会是什么样子?是否有任何资源
我们有一个 AWS Aurora 数据库,位于一个实例上,用于保存我们所有的生产数据。我希望能够在不在我们的生产环境中对这些数据执行分析,因此我想每天将生产数据复制到完全不同实例上的另一个 AWS A
我想在事件 RDS 上启用新的“性能洞察”。 我可以在不期望任何停机时间的情况下做到这一点吗? 谢谢 最佳答案 Performance Insights 确实需要您提及修改的调度规则 [1],这确实表
我有一个SpringBoot应用程序,它使用以下配置与PostgreSQL通信,通过AWS Beanstrik部署:。在我将AWS Aurora证书更新为rds-ca-ecc384-g1之前,一切都很
我们在Aurora集群中使用MySQL我们有 2 个实例 - master 和 slave。我们正在 c3po 连接池之上处理 spring 事务。我们正在使用 mariadb jdbc 驱动程序(版
我们在 AWS ec2 实例(r3.4xlarge 类型)上安装并运行了 mysql 5.5。我们想要迁移到 RDS/Aurora 1- RDS/Aurora 可支持 mysql 5.6 及以上版本。
我的 S3 存储桶中有不同扩展名的文件。我只想加载 CSV 扩展程序。有没有办法在 LOAD FROM S3 命令中指定这一点? 最佳答案 根据文档link ,有一种方法可以指定 PREFIX 并加载
在针对 AWS aurora-mysql 数据库运行的系统中,运行以下(显然极其简化)代码。它是一个高度并发的系统(如果重要的话,用java编写),具有多个线程,多个到数据库的连接。我们遇到的问题是当
我有位于新加坡的 AWS MySQL RDS 实例,我计划将其迁移到 AWS Aurora(孟买)。这个过程大约需要30-40分钟左右。我不想在迁移过程中出现任何停机时间。我的应用程序服务器在 nod
我们正在使用 AWS Aurora 作为数据库运行基于 REST API 的 spring boot 应用程序。我们的应用程序连接到只读的 Aurora MySQL RDS 实例。我们正在对其进行负载
还有其他人遇到这个问题吗? 我已启用 Cloudwatch 日志记录并将发布切换为打开以获取一般日志、审计日志、慢速日志和错误日志,但我从未看到失败登录的条目。 也许 AWS-RDS 对错误日志的过滤
我在生产环境中运行 Aurora MySql Engine 版本 5.6.10a。 5 月 9 日的自动数据库快照大小为 120 GB,该快照大小增加了 27 GB 至 147 GB。我检查过 DB
我有一个在本地运行的 postgres 数据库,我想将其迁移到 AWS Aurora(或 AWS postgres)。 我已经 pg_dump 得到了我想要的数据库,它被压缩了 ~30gb。 我应该如
所以我正在使用 Aurora MYSQL DB,并且我的 AWS Lambda 实例需要执行以下操作。假设一个表有两列:ID 和翻译后的 ID。我可以访问 Lambda 函数,该函数将 ID 作为输入
我是一名优秀的程序员,十分优秀!