mysql - AWS RDS 中止连接 Haproxy

标签 mysql mariadb haproxy amazon-rds

我使用 haproxy 在 AWS RDS 和 1 EC2 中创建 1 个主节点和 2 个副本

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

最佳答案

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

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

希望这已经够清楚了:)

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

关于mysql - AWS RDS 中止连接 Haproxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34988344/

相关文章:

php - Mysql 服务器在特定定位查询时超时

mysql - Liquibase : postgres fails, mysql - 好的

mysql 触发更新 : how to detect NULL values?

python - 为 mariadb 10 Ubuntu 13.10 安装 mysqldb python 接口(interface)时找不到 mysql_config

load-balancing - haproxy https 健康检查

haproxy - 生成客户端证书时,set_serial选项的意义是什么?

mysql - 使用许多表创建 View ?

php - 使用 CTE 的 SQL 错误

mysql - 从 mariadb 中删除清除重复/重复记录

Haproxy 1.6.2 无法识别解析器部分