我是 MariaDB galera 集群负载均衡的新手,我正在尝试使用 HAProxy 来进行负载均衡。我已经设置了 MariaDB Galera 集群并且它运行得很好。
在 Haproxy 中,我为数据库集群创建了一个 VIP,如果我查看 HAProxy 统计页面,它会显示该 VIP 并且所有三个节点都是绿色的。这就是我的配置方式:
#---------------------------------------------------------------------
# frontend_db_domain.com
#---------------------------------------------------------------------
frontend db_domain.com
bind ip:3306
mode tcp
option mysql-check user haproxy_check
default_backend back_db_domain.com
#---------------------------------------------------------------------
# backend_db_domain.com
#---------------------------------------------------------------------
backend back_db_domain.com
balance roundrobin
server db01.domain.com ip:3306 check
server db02.domain.com ip:3306 check
server db03.domain.com ip:3306 check
我配置了一个 WordPress 站点以使用 VIP 地址 db.domain.com,并且 WordPress 显示
Error establishing a database connection
。如果我使用直接命中节点的数据库主机名或 IP,一切都会正常工作。
这是 HAProxy 日志中显示的内容:
Mar 24 04:07:27 localhost haproxy[22096]: 1.2.3.4:56022 [24/Mar/2022:04:07:16.987] domain.com~ back_domain.com/nginx01.domain.com 68/0/1/10095/10164 500 2842 - - ---- 3/1/0/0/0 0/0 "GET /webdesigns/website1/ HTTP/1.1"
这是 nginx 日志:
45.77.206.174 - - [24/Mar/2022:04:07:27 +0000] "GET /webdesigns/website1/ HTTP/1.1" 500 2539 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0" "1.2.3.4"
没有适当的防火墙可以阻止所有这些主机之间的任何内容。它们都可以相互连接。这就是数据库节点的配置方式:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
#bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="test_cluster"
wsrep_cluster_address="gcomm://10.1.96.12,10.1.96.13,10.1.96.14"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="10.1.96.14"
wsrep_node_name="db03"
不确定我缺少什么,但我认为我在 HAProxy 端配置错误,但不确定它可能是什么。我还有其他 VIP,但它们用于网络服务器和类似的东西,一切都工作正常。这是我遇到的第一个 VIP。我将不胜感激任何和所有的帮助。
谢谢!
所以,这就是我必须做的来解决这个问题。
通过阅读,似乎 MariaDB 集群要在 HAProxy 中工作,您必须在 TCP 模式下执行此操作。我原来的 haproxy 对处于 HTTP 模式,因此 MariaDB 集群无法工作。
我必须构建一个新的 haproxy 对并将其配置为 TCP 模式,并且集群按预期在 HAProxy 中工作。不幸的是,似乎你不能在 haproxy 中混合模式。
如果有人找到一种混合模式的方法,或者如果它出现在未来的版本中,那就太棒了。
谢谢!
cli ip 检查您的 VIP 是否在 haproxy 主机上工作\
对我来说,它有助于在前端和后端设置“模式 tcp”:
#---------------------------------------------------------------------
# frontend_db_domain.com
#---------------------------------------------------------------------
frontend db_domain.com
bind ip:3306
mode tcp
option mysql-check user haproxy_check
default_backend back_db_domain.com
#---------------------------------------------------------------------
# backend_db_domain.com
#---------------------------------------------------------------------
backend back_db_domain.com
balance roundrobin
mode tcp
server db01.domain.com ip:3306 check
server db02.domain.com ip:3306 check
server db03.domain.com ip:3306 check