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

MaxScale无法连接Galera Cluster 技术问题求助

MaxScale在Docker Swarm中循环重启且无法连接的问题排查与解决

问题背景

正在搭建分布式高可用云系统,在Docker Swarm中部署了由3台独立服务器组成的Galera Cluster,集群运行正常。因引导启动需求,为Galera节点创建了3个独立服务,需部署3副本的MaxScale负载均衡代理来访问集群。

尝试配置MaxScale服务后,在容器内执行maxctrl list servers命令时提示:Error: Could not connect to MaxScale。启动命令为docker-compose up --remove-orphans --force-recreate。

复现环境

为复现问题,本地搭建了单节点测试环境(生产环境为3管理节点+3数据库节点),涉及配置文件:

  • docker-compose.yml(包含3个Galera节点和MaxScale服务配置)
  • maxscale.cnf配置文件
  • init_db_for_maxscale.sql初始化脚本(已确认MariaDB容器中MaxScale用户及权限配置正常)

错误现象

MaxScale容器日志显示进程无限循环重启,重复内容如下:

mariadb-maxscale_1  | Starting...
mariadb-maxscale_1  | MaxScale PID = 1698
mariadb-maxscale_1  | 
mariadb-maxscale_1  | Awakened by User defined signal 1
mariadb-maxscale_1  | 'maxscale' monitor action done
mariadb-maxscale_1  | 'maxscale' process is not running
mariadb-maxscale_1  | 'maxscale' trying to restart
mariadb-maxscale_1  | 'maxscale' start: '/usr/bin/maxscale-restart'
mariadb-maxscale_1  | 'mariadb-maxscale' unmonitor on user request
mariadb-maxscale_1  | 'maxscale' unmonitor on user request
mariadb-maxscale_1  | Monit daemon with PID 12 awakened
mariadb-maxscale_1  | 'mariadb-maxscale' monitor on user request
mariadb-maxscale_1  | 'maxscale' monitor on user request
mariadb-maxscale_1  | Monit daemon with PID 12 awakened
mariadb-maxscale_1  | 'mariadb-maxscale' monitor action done
mariadb-maxscale_1  | Awakened by User defined signal 1
mariadb-maxscale_1  | 'maxscale' failed to start (exit status 0) -- '/usr/bin/maxscale-restart': Stopping...
mariadb-maxscale_1  | Starting...
mariadb-maxscale_1  | MaxScale PID = 1713
mariadb-maxscale_1  | 
mariadb-maxscale_1  | 'maxscale' monitor action done
mariadb-maxscale_1  | 'maxscale' trying to restart
mariadb-maxscale_1  | 'maxscale' process is not running
mariadb-maxscale_1  | 'maxscale' start: '/usr/bin/maxscale-restart'
mariadb-maxscale_1  | 'mariadb-maxscale' unmonitor on user request
mariadb-maxscale_1  | 'maxscale' unmonitor on user request
mariadb-maxscale_1  | Monit daemon with PID 12 awakened
mariadb-maxscale_1  | 'mariadb-maxscale' monitor on user request
mariadb-maxscale_1  | 'maxscale' monitor on user request
mariadb-maxscale_1  | Monit daemon with PID 12 awakened
mariadb-maxscale_1  | 'maxscale' failed to start (exit status 0) -- '/usr/bin/maxscale-restart': Stopping...
mariadb-maxscale_1  | Starting...
mariadb-maxscale_1  | MaxScale PID = 1728
mariadb-maxscale_1  | 
mariadb-maxscale_1  | 'mariadb-maxscale' monitor action done
mariadb-maxscale_1  | Awakened by User defined signal 1
mariadb-maxscale_1  | 'maxscale' monitor action done
mariadb-maxscale_1  | 'maxscale' process is not running
mariadb-maxscale_1  | 'maxscale' trying to restart
mariadb-maxscale_1  | 'maxscale' start: '/usr/bin/maxscale-restart'
mariadb-maxscale_1  | 'mariadb-maxscale' unmonitor on user request
mariadb-maxscale_1  | 'maxscale' unmonitor on user request
mariadb-maxscale_1  | Monit daemon with PID 12 awakened
mariadb-maxscale_1  | 'mariadb-maxscale' monitor on user request
mariadb-maxscale_1  | 'maxscale' monitor on user request
mariadb-maxscale_1  | Monit daemon with PID 12 awakened

补充说明

  • 参考文档后,MaxScale配置通常用IP指定服务器,但因处于同一Docker网络,尝试通过主机名(服务名)访问MariaDB节点
  • 未对外暴露端口,Docker网络内部可访问所有端口

排查与解决步骤

1. 验证MaxScale配置文件有效性

  • 检查maxscale.cnf中Galera节点的配置,确保address字段正确填写Docker服务名,示例:
[galera-node-1]
type=server
address=galera-node-1
port=3306
protocol=MariaDBBackend
  • 确认maxctrl模块配置正常,默认通过本地套接字连接,需保证配置存在:
[maxctrl]
type=service
router=cli
  • 进入容器执行maxscale -c /etc/maxscale.cnf -t,检查配置文件是否存在语法错误。

2. 测试网络连通性与数据库连接

  • 进入MaxScale容器,执行ping galera-node-1(替换为实际服务名),验证DNS解析是否正常
  • 使用mysql -h galera-node-1 -u maxscale_user -p测试能否直接连接到Galera节点,确认用户密码与权限无误

3. 调整容器启动参数与依赖

  • 部分MaxScale镜像默认用Monit管理进程,可尝试禁用Monit,直接启动MaxScale:修改docker-compose.yml中MaxScale的command为maxscale -d
  • 为Galera节点添加健康检查,确保MaxScale在集群就绪后启动:
services:
  galera-node-1:
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
      interval: 10s
      timeout: 5s
      retries: 3
  maxscale:
    depends_on:
      galera-node-1:
        condition: service_healthy
      galera-node-2:
        condition: service_healthy
      galera-node-3:
        condition: service_healthy

4. 查看详细日志定位问题

  • 进入容器查看MaxScale核心日志/var/log/maxscale/maxscale.log,日志中会包含连接失败、配置错误等具体信息,是定位问题的关键

内容的提问来源于stack exchange,提问作者milanbalazs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:30:54