在配置PXC+keepalived+haproxy高可用群集时,由于资源所限,将keepalived与haproxy安装在了pxc0/pxc1两个节点上。
通过vip连接mysql时提示 Too many connections 。检查keepalived服务正常,但发现haproxy服务启动失败。提示:Starting frontend pxc-onenode-front: cannot bind socket [0.0.0.0:3306]
网上比较多的解决方案是修改/etc/sysctl.conf 文件,添加net.ipv4.ip_nonlocal_bind = 1 与net.ipv4.ip_forward = 1(内核转发)
但修改后仍然无法启动。
后来观察haproxy配置文件时发现,在同一台机上mysql已经打开了3306端口,这时再去监听3306端口,必然会引起冲突,导致haproxy无法启动。
解决办法:将3306改为其它任何一个空闲端口即可
$ vi /etc/haproxy/haproxy.cfg
......
frontend pxc-onenode-front # 在这个前端监听的定义中,表示监听3316端口的请求,再转发到“pxc-onenode-back”这个后端所定义的ip池中,原来绑定的是3306,当然会与mysql冲突了
bind *:3316
mode tcp
default_backend pxc-onenode-back
......
backend pxc-onenode-back # 对应前端pxc-onenode-front
mode tcp
balance leastconn
option httpchk
server pxc_node0 192.168.53.153:3306 check port 9200 inter 12000 rise 3 fall 3
server pxc_node1 192.168.53.154:3306 check port 9200 inter 12000 rise 3 fall 3 backup
server pxc_node2 192.168.53.155:3306 check port 9200 inter 12000 rise 3 fall 3 backup
故障原因是:原来haproxy用的是两台独立的主机,监听3306当然没问题,现在被移到了跑着mysql服务的机器上,但绑定的监听端口没有变,就发生冲突了。
PS: 这时候要提醒程序员数据库的连接端口改变了,比较,用mysql连接的话,要用:mysql -h 你的vip -P3316 -uroot -pXXXX
-P:端口号
-p: 密码
网友评论