HAProxy mysql 配置

HAProxy mysql 配置

我尝试了几次,但还是搞不清楚为什么我的带有 haproxy 的 mariadb 负载均衡器无法正常工作。我有:

  • 1 HAProxy(CentOS):10.181.102.249
  • 1 个主服务器(CentOS):10.183.241.150
  • 2 个从属服务器(CentOS):10.182.2.50 和 10.181.164.36

HAproxy 配置:

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    stats socket /var/lib/haproxy/stats

defaults
    mode                    http
    log                     global
    option                  dontlognull
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

listen mysql-read 0.0.0.0:3307;
    mode tcp
    balance roundrobin
    option tcpka
    option httpchk
    server db2 10.182.2.50:3306 check port 9201 inter 1s rise 1 fall 1
    server db3 10.181.164.36:3306 check port 9201 inter 1s rise 1 fall 1
    #server db1 10.183.241.150:3306 check port 9201 inter 1s rise 1 fall 1
    server db1 10.183.241.150:3306 backup

listen mysql-write 0.0.0.0:3306
    mode tcp
    option mysql-check user haproxy
    balance roundrobin
    server db1 10.183.241.150:3306 check

listen stats :1981
    mode http
    stats enable
    stats uri /
    stats realm Strictly\ Private
    stats auth test:test

我禁用了firewalld,并确保没有安装iptables,并且selinux不工作,以便首先进行测试以了解它是否正常工作。

但当我尝试连接时:

mysql -hlocalhost -uuser -P 3307 -p -e "show variables like 'server_id'";

或者

mysql -hlocalhost -uuser -p -e "show variables like 'server_id'";

我得到:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

从远程服务器到haproxy也是一样的。

如果我列出 haproxy 服务器的端口,我会得到:

[root@haproxy ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      21261/haproxy       
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      21261/haproxy       
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1294/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1533/master         
tcp        0      0 0.0.0.0:1981            0.0.0.0:*               LISTEN      21261/haproxy       
tcp6       0      0 :::22                   :::*                    LISTEN      1294/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1533/master 

有任何想法吗 ?

谢谢。

答案1

正如您的错误消息所示,该mysql命令尝试通过 UNIX 套接字而不是 TCP 套接字进行连接,因此会忽略端口号。mysql如果您将端口号localhost作为主机参数给出,则会出现这种情况。请尝试使用-h 127.0.0.1

答案2

MySQL 客户端并未尝试通过系统的 IP 进行连接,而是尝试使用套接字文件(可能在您的 中定义)my.cnf。由于该服务未在本地运行,因此无法正常工作。

尝试使用以下IP连接:

mysql -h10.181.102.249 -uuser -P 3307 -p -e "show variables like 'server_id'";

或者

mysql -h10.181.102.249 -uuser -p -e "show variables like 'server_id'";

相关内容