测试 Amazon RDS 实例与外部服务器之间的连接延迟

Test connection latency between Amazon RDS instance and external server

我需要测试位于我自己的数据中心的服务器与 Amazon RDS 实例之间的连接。我试过

time telnet <dns-of-my.instance> 3306

但它会跟踪从我发出命令到我结束命令的时间,这无关紧要。

有什么方法可以测量吗?

我的回答不假定允许 ICMP ping,它使用基于 TCP 的措施。但是您必须确保有安全组规则允许从 shell 运行 测试访问 RDS 实例

首先,确保安装了一些有用的包

apt-get install netcat-openbsd traceroute

检查数据库端口的基本连接是否有效。此示例适用于 Oracle,确保您使用控制台中的端点和端口

    nc -vz dev-fulfil.cvxzodonju67.eu-west-1.rds.amazonaws.com 1521

然后看看延迟是多少。你要的是最后一个(第12步)

sudo tcptraceroute dev-fulfil.cvxzodonju67.eu-west-1.rds.amazonaws.com 1521

traceroute to dev-fulfil.cvxzodonju67.eu-west-1.rds.amazonaws.com (10.32.21.12), 30 hops max, 60 byte packets
 1  pc-0-3.ioppublishing.com (172.16.0.3)  0.691 ms  3.341 ms  3.400 ms
 2  10.100.101.1 (10.100.101.1)  0.839 ms  0.828 ms  0.811 ms
 3  xe-10-2-0-12265.lon-001-score-1-re1.interoute.net (194.150.1.229)  10.591 ms  10.608 ms  10.592 ms
 4  ae0-0.lon-001-score-2-re0.claranet.net (84.233.200.190)  10.575 ms  10.668 ms  10.668 ms
 5  ae2-0.lon-004-score-1-re0.claranet.net (84.233.200.186)  12.708 ms  12.734 ms  12.717 ms
 6  169.254.254.6 (169.254.254.6)  12.673 ms * *
 7  169.254.254.1 (169.254.254.1)  10.623 ms  10.642 ms  10.823 ms
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * 10.32.21.12 (10.32.21.12) <syn,ack>  20.662 ms  21.305 ms

"latency" 的更好度量可能是 "the time a typical transaction takes with no or little data to transfer"。为此,请编写一个脚本元素,在循环中执行此操作,可能循环 1000 次,然后使用高精度计时器对其计时。但具体细节因您的需要而异

使用 ping。您将需要 enable ping on your EC2 instance per this answer

Ping 将为每个 ping 提供一个时间(以毫秒为单位):

ping 34.217.36.7
PING 34.217.36.7 (34.217.36.7): 56 data bytes
64 bytes from 34.217.36.7: icmp_seq=0 ttl=227 time=68.873 ms
64 bytes from 34.217.36.7: icmp_seq=1 ttl=227 time=68.842 ms
64 bytes from 34.217.36.7: icmp_seq=2 ttl=227 time=68.959 ms
64 bytes from 34.217.36.7: icmp_seq=3 ttl=227 time=69.053 ms

查询时间。 RDS 必须托管一个 SQL 数据库服务器,因此向它发出一个简单的 SQL 查询并确定执行时间。

例如,如果您的 RDS 实例是 PostgreSQL,请使用 psql 连接并启用 \timing

psql -h myhost -U myuser

postgres=> \timing
Timing is on.
postgres=> SELECT 1;
 ?column?
----------
        1
(1 row)

Time: 14.168 ms

本例中的延迟为 14.168 毫秒。请参阅手册以了解您的特定 SQL 服务器实施的时间。