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
相关产品推荐
相关产品推荐

