HAProxy 未连接到 MariaDB Galera 集群后端

问题描述 投票:0回答:3

我是 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。我将不胜感激任何和所有的帮助。

谢谢!

mysql mariadb load-balancing haproxy galera
3个回答
1
投票

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

通过阅读,似乎 MariaDB 集群要在 HAProxy 中工作,您必须在 TCP 模式下执行此操作。我原来的 haproxy 对处于 HTTP 模式,因此 MariaDB 集群无法工作。

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

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

谢谢!


0
投票

cli ip 检查您的 VIP 是否在 haproxy 主机上工作\


0
投票

对我来说,它有助于在前端和后端设置“模式 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
© www.soinside.com 2019 - 2024. All rights reserved.