我正在尝试使用 HAProxy 作为 2 个 mysql 节点的负载均衡器。我让 HAProxy 在 3307 上监听,并将请求路由到 3306 上的数据库。当客户端尝试连接到代理 (mysql -u ... -h .. -P3307 -p...) 时,它会收到以下错误:
错误 2013(HY000):在“读取初始通信包”时与 MySQL 服务器失去连接,系统>错误:0
当客户端尝试直接连接到数据库时,它工作正常。我不知道为什么当流量通过代理时它会失败。
以下是我已经检查过的内容:
/etc/hosts.allow 包括“mysqld:ALL:允许”
MySQL 配置文件(my.cnf)没有绑定地址行(对所有人开放)。
我正在使用 HAProxy 1.5dev、Mysql 5.1.x,整个 enchilada 都在 Amazon Linux 上的 ec2 中运行。
这是 HAProxy 配置文件:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
user haproxy
group haproxy
maxconn 4096
daemon
#debug
#quiet
defaults
log global
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 4096
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend mysql_cluster
bind 10.0.0.150:3307
default_backend mysql_cluster
backend mysql_cluster
mode tcp
balance roundrobin
option tcpka
option httpchk
server lb1 10.0.0.140:3306 check port 9200 inter 5s rise 2 fall 2
server lb2 10.0.0.214:3306 check port 9200 inter 5s rise 2 fall 2
listen stats 10.0.0.150:8081
mode http
option httpclose
balance roundrobin
stats uri /
stats realm Haproxy\ Statistics
stats auth ***:***
有人解决过这个问题吗?有什么解决办法吗?
任何帮助都非常感谢
答案1
好的,我解决了。我的 xinetd 脚本有问题。
无法绑定到 9200 - 已在 /etc/services 文件中修复。
答案2
这通常发生在您的xinetd
健康检查服务响应错误时。
您可以xinetd
这样调试telnet
:
telnet IPADDR PORT # IPADDR: one of the IPs of your nodes
# PORT: the port that node is listening.
输出会告诉您有关问题的信息。
答案3
在我的设置中,我没有运行 xinetd,但发现 mysql-check 选项导致了问题。因此,我至少可以通过注释掉它来启动并运行 haproxy。我怀疑 mysql-check 与使用了错误的 mysql 用户或缺少授权有关。
答案4
谢谢亲爱的,太好了,
HAproxy 需要正确配置 xinetd 才能工作,否则会出现以下错误,
错误 2013(HY000):在“读取初始通信包”时与 MySQL 服务器失去连接,系统错误:0
如果 Xinetd 已在运行则需要重新启动。
https://docs.openstack.org/ha-guide/shared-database-manage.html