我想在带有容器的单个节点中配置数据库场。我的想法是使用子域访问每个数据库,例如 mysql1.example.com:3306、mysql2.example.com:3306、mysql3.example.com:3306。
我正在尝试使用 HAProxy 实现此模型,似乎我第一次通过 HAProxy 连接到一个数据库时它就可以工作。当我重新连接时,我得到: 错误 2013 (HY000):在“读取初始通信数据包”时失去与 MySQL 服务器的连接,系统错误:0
我在HAproxy中使用的模板是:
global
maxconn 256
debug
defaults
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen www
bind *:3306
mode tcp
acl host_mysql hdr(host) -i mysql1.example.com
server mysql_db_1 172.31.20.75:3307
acl host_mysql hdr(host) -i mysql2.example.com
server mysql_db_2 172.31.20.75:3308
acl host_mysql hdr(host) -i mysql3.example.com
server mysql_db_3 172.31.20.75:3309
最佳答案
我会自动回复。由于 Mysql 使用 TCP 协议(protocol),因此不可能创建此实现,因此它不在 header 中包含 URL。因此 HAproxy 无法重定向到正确的服务器。
我正在考虑使用分配给每个数据库的虚拟 IP 来实现此环境。另一种实现是在同一服务器和不同端口中运行所有数据库。
关于带有 haproxy 的 mysql 农场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33630268/