AWS RDS中止连接Haproxy

时间:2016-01-25 08:47:08

标签: mysql mariadb haproxy aws-rds

我在AWS RDS中创建了1个master和2个复制,在haproxy中创建了1个EC2

listen rds-cluster
    bind 172.30.0.xxx:3306
    mode tcp
    option mysql-check user ha_check
    balance roundrobin
    server mysql-1 replica1.xxxx.ap-southeast-1.rds.amazonaws.com:3306 check weight 1 fall 2 fastinter 1000
    server mysql-2 replica2.xxxx.ap-southeast-1.rds.amazonaws.com:3306 check weight 1 fall 2 fastinter 1000

如果我可以使用端点直接连接到副本服务器, 但如果我使用haproxy

$ mysql -h172.30.0.xxx -uha_read -ppassword -e "show variables like 'server_id'"
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

我收到了这个错误

我已经增加了connect_timeout

如果我检查

SHOW GLOBAL STATUS LIKE 'Aborted_connects';

它不断增加

===============

这篇文章解决了我的问题 CUSTOM CONFIGURATION OF AMAZON RDS INSTANCES

1 个答案:

答案 0 :(得分:0)

默认情况下,如果在启动RDS时未更改安全组设置,则只有您的IP才有权访问您的数据库。在您的情况下,您还需要授权您的haproxy节点访问您的数据库。

转到RDS,选择您的实例,然后选择安全组,编辑,添加新规则以启用HAproxy(最佳实践)的安全组或HAproxy IP(如果这是弹性IP仍然足够好)端口3306上的数据库。

希望这很清楚:)

编辑:我知道你解决了你的问题,但对于后来阅读的人(或者如果你想提高安全性,甚至是你),我会添加一些关于我所说的内容的信息: 当DNS查询从同一VPC中的实例发送到该VPC中的Amazon提供的DNS服务器时,RDS主机名将解析为专用IP。因此,在您的安全组中,在这种情况下,您必须允许haproxy的子网或其私有IP(不是公共IP)。