我已经设置了MariaDB Galera集群,我测试过它在以下服务器上正常运行: db1 192.169.0.1 db2 192.169.0.2 db3 192.169.0.3
它们都在CentOS-6.5上运行,而MariaDB版本在10.0
我的目标是使用HAproxy来执行负载平衡。我在单独的服务器上安装并配置了HAproxy
db4 192.168.0.4
没有安装群集或MariaDB,只有HAproxy。问题是,HAproxy似乎不起作用,即进行负载平衡。它启动正常,我可以通过网络界面访问它:
http://192.168.0.4:9000/haproxy
但是服务器的状态显示它们已关闭,即使它们实际上已在各自的计算机上运行。 HAproxy配置如下:
global
log 127.0.0.1 local0 notice
user haproxy
group haproxy
defaults
log global
retries 2
timeout connect 1000
timeout server 5000
timeout client 5000
listen mariadb-cluster
bind 0.0.0.0:3306
mode tcp
option mysql-check user haproxy
balance roundrobin
server db1 192.168.0.1:3306 check
server db2 192.168.0.2:3306 check
server db4 192.168.0.3:3306 check
listen webinterface
bind 0.0.0.0:9000
mode http
stats enable
stats uri /haproxy
stats realm Strictly\ Private
stats auth admin:password
db1,db2,db3和db4只是每个服务器的主机名。因此,当我在第一台服务器上运行命令#hostname时,它将显示db1。
答案 0 :(得分:1)
我相信你已经检查了日志,在那里你可以看到连接进入和存在,或者没有被定向到它们应该被认为的节点/服务器。
我不知道这是不是一个错字,但我相信你已经将db4(haproxy机器)作为一个节点包括在内,对吧?它应该是db3)
还要检查是否可以从HAproxy机器访问端口3306到每个数据库节点
如果没有,请检查您为检查过程定义的haproxy用户是否具有mysql权限。如果没有,请登录到其中一个节点服务器并执行以下操作:
mysql> GRANT USAGE ON *.* TO 'haproxy'@'%';
(出于安全考虑,你应该将'%'限制在正在运行HAproxy的IP地址上)
我的配置与您的配置类似,但添加了每个节点的节点权重和最大连接数的引导选项。我也更喜欢使用“leastcon”而不是“round robin”,所以请评估它是否符合您的目的。
haproxy.cfg
global
log 127.0.0.1 local0
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 512
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats mode 666
defaults
log global
mode http
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 1024
timeout connect 3s
timeout client 50s
timeout server 50s
timeout check 10s
listen website_cluster 0.0.0.0:3306
mode tcp
balance leastconn
option tcpka
option httpchk
option mysql-check user haproxy
stick store-request src
stick-table type ip size 200k expire 30m
server db1 192.168.0.1:3306 weight 40 check port 3306 inter 5000 rise 1 fall 3 maxconn 120
server db2 192.168.0.2:3306 weight 30 check port 3306 inter 5000 rise 1 fall 3 maxconn 75
server db3 192.168.0.3:3306 weight 30 check port 3306 inter 5000 rise 1 fall 3 maxconn 75
在MariaDB的网站上,还有一个教程可能也可以帮助您完成任务:here
答案 1 :(得分:0)
我也遇到了这个问题,并且花了近一天的时间才发现HAPROXY有两种后端平衡/健康检查模式。第4层检查在OSI第4层上运行,而第7层在应用程序级别上运行。我正在使用option mysql-check
检查第7层,并且需要在HAPROXY服务器/节点上安装mysql-client
。我在HAPROXY机器/容器(docker)上没有任何Mysql-client软件包。然后我将选项检查转换为option tcp-check
它工作正常。这是我haproxy.cfg
global
log haproxy-logger local0 notice
fuser haproxy
group haproxy
defaults
log global
retries 2
timeout connect 3000
timeout server 5000
timeout client 5000
listen mysql-cluster
bind 0.0.0.0:3306
mode tcp
#option mysql-check user haproxy_check
option tcp-check
balance roundrobin
server mysql1 mysql1:3306 check
server mysql2 mysql2:3306 check weight 2
listen mysql-clusterstats
bind 0.0.0.0:8080
mode http
stats enable
stats uri /
stats realm Strictly\ Private
stats auth status:mypass
最后通过将其转换为第4层负载平衡来修复
在我的博客上可以看到更多细节 - HAProxy – Mysql cluster on Docker
答案 2 :(得分:0)
在我的情况下, SELinux 阻止了连接。