HAProxy 未连接到 MariaDB Galera 集群后端

HAProxy doesn't connect to MariaDB Galera cluster backend

我是 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 站点来使用 db.domain.com 的 VIP 地址,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,但它们用于 Web 服务器和类似的东西,一切正常。这是我遇到问题的第一个 VIP。我将不胜感激任何帮助。

谢谢!

cli ip a 检查你的 vip 是否在 haproxy 主机上工作\

所以,这就是我必须做的来解决这个问题。

从周围阅读来看,MariaDB 集群似乎要在 HAProxy 中工作,您必须在 TCP 模式下这样做。我拥有的原始 haproxy 对处于 HTTP 模式,因此 MariaDB 集群无法正常工作。

我不得不构建一个新的 haproxy 对并将其配置为 TCP 模式,并且集群按预期在 HAProxy 中工作。不幸的是,您似乎不能在 haproxy 中混合模式。

如果有人找到混合模式的方法,或者如果它出现在未来的版本中,那就太棒了。

谢谢!