我尝试了几次,但还是搞不清楚为什么我的带有 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'";