You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MaxScale无法连接Galera集群且进程反复重启故障求助

MaxScale无法连接Galera集群且进程反复重启故障求助

我完全能理解你现在的困扰——在Docker环境下搭好了3节点的Galera集群,想通过MaxScale做负载均衡,结果不仅连不上集群,MaxScale进程还一直在反复重启,太影响进度了。我结合你给出的配置和日志,整理了几个排查方向和可能的解决办法,你可以逐一试试:

一、先确认MaxScale容器能正常解析Galera节点的主机名

虽然Docker同网络内应该能通过服务名(galera0/1/2)解析到对应容器,但还是先验证下:

  1. 进入MaxScale容器:docker exec -it <maxscale_container_id> bash
  2. 执行ping galera0,看看能不能正常ping通,DNS解析是否正常。如果ping不通,那可能是Docker网络的问题,比如galera_net网络的DNS配置有问题,或者Galera容器的hostname设置异常。

二、检查MaxScale监控用户的权限是否足够

你已经初始化了maxscale用户,但MariaDB Monitor(mariadbmon)需要的权限可能不止这些。建议你在任意一个Galera节点里执行以下命令,补充必要的权限:

GRANT REPLICATION CLIENT ON *.* TO 'maxscale'@'%';
FLUSH PRIVILEGES;

这个权限是mariadbmon用来检测集群状态、主节点信息的关键权限,缺失的话会直接导致MaxScale无法正常连接集群,进而启动失败。

三、查看MaxScale的详细启动日志,定位具体错误

你现在看到的只是Monit的重启日志,看不到MaxScale本身的启动失败原因。建议你进入MaxScale容器,查看MaxScale的核心日志:

cd /var/log/maxscale
cat maxscale.log

日志里会明确告诉你是配置文件语法错误、数据库连接失败还是权限不足,这是定位问题最直接的方式。

四、检查MaxScale配置文件的权限和语法

  1. 权限问题:你挂载了自定义的maxscale.cnf到容器里,要确保容器内的MaxScale进程有读取权限。进入容器执行:
ls -l /etc/maxscale.cnf

如果文件权限是root:root,而MaxScale是用maxscale用户运行的,可能会导致无法读取配置。你可以在宿主机上修改文件权限:chmod 644 maxscale.cnf,然后重启MaxScale容器。
2. 语法问题:检查maxscale.cnf的语法是否正确,比如有没有遗漏括号、拼写错误。比如你配置里的[MaxScale]段是对的,但可以试试把threads = auto改成具体数值(比如threads = 4),有些版本的MaxScale对auto参数的支持可能有兼容性问题。

五、手动启动MaxScale,查看实时错误信息

直接在MaxScale容器里手动启动MaxScale,能看到更详细的启动报错:

maxscale -f /etc/maxscale.cnf -d

执行后控制台会输出启动过程中的所有信息,比如哪个服务器连接失败、哪个配置项有问题,这能帮你快速定位故障点。

六、验证Galera节点的3306端口是否对外监听

进入任意一个Galera容器,执行:

netstat -tulpn | grep 3306

确保输出的是0.0.0.0:3306(监听所有地址),而不是只绑定127.0.0.1。如果是后者,MaxScale容器就无法连接到Galera节点的3306端口。


附:你的关键配置信息(方便排查参考)

docker-compose.yml核心部分

version: "3.8"
services:
  galera0:
    image: bitnami/mariadb-galera:10.4.31
    hostname: galera0
    networks:
      - galera_net
    # 其他配置省略...
  galera1:
    image: bitnami/mariadb-galera:10.4.31
    hostname: galera1
    networks:
      - galera_net
    # 其他配置省略...
  galera2:
    image: bitnami/mariadb-galera:10.4.31
    hostname: galera2
    networks:
      - galera_net
    # 其他配置省略...
  mariadb-maxscale:
    image: mariadb/maxscale:23.08
    hostname: mariadb-maxscale
    networks:
      - galera_net
    volumes:
      - ./maxscale.cnf:/etc/maxscale.cnf
    depends_on:
      galera0:
        condition: service_healthy
      galera1:
        condition: service_healthy
      galera2:
        condition: service_healthy
networks:
  galera_net: {}

maxscale.cnf核心配置

[mariadb1]
type            = server
address         = galera0
port            = 3306
protocol        = MariaDBBackend
serv_weight     = 1

[mariadb2]
type            = server
address         = galera1
port            = 3306
protocol        = MariaDBBackend
serv_weight     = 1

[mariadb3]
type            = server
address         = galera2
port            = 3306
protocol        = MariaDBBackend
serv_weight     = 1

[MaxScale]
threads                 = auto
log_augmentation        = 1
ms_timestamp            = 1
syslog                  = 1

[MariaDB-Monitor]
type                    = monitor
module                  = mariadbmon
servers                 = mariadb1,mariadb2,mariadb3
user                    = maxscale
password                = my_s3cret
monitor_interval        = 2000

# 服务和监听器配置省略...

init_db_for_maxscale.sql

CREATE USER IF NOT EXISTS 'maxscale'@'%' IDENTIFIED BY 'my_s3cret';
GRANT SELECT ON mysql.user TO 'maxscale'@'%';
GRANT SELECT ON mysql.db TO 'maxscale'@'%';
GRANT SELECT ON mysql.tables_priv TO 'maxscale'@'%';
GRANT SELECT ON mysql.columns_priv TO 'maxscale'@'%';
GRANT SELECT ON mysql.procs_priv TO 'maxscale'@'%';
GRANT SELECT ON mysql.proxies_priv TO 'maxscale'@'%';
GRANT SELECT ON mysql.roles_mapping TO 'maxscale'@'%';
GRANT SHOW DATABASES ON *.* TO 'maxscale'@'%';
GRANT ALL PRIVILEGES ON *.* TO maxscale@'%';

备注:内容来源于stack exchange,提问作者milanbalazs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:34:34