CentOS AlmaLinux 8下Docker Compose部署Galera Cluster启动失败求助
在CentOS AlmaLinux 8上用Docker Compose部署Galera Cluster启动失败的解决方案
问题概述
在CentOS AlmaLinux 8系统上使用Docker Compose部署Galera Cluster时,镜像构建成功,但执行docker compose up -d后容器启动立即退出(状态为Exited (1)),日志仅显示入口脚本执行信息,无明确错误详情。注释配置文件中的wsrep_provider=/usr/lib/libgalera_smm.so后,容器可正常运行但无法实现集群同步。已尝试修改文件权限、更换MariaDB镜像版本、安装galera-4包,均未解决问题。
相关配置文件
节点1的docker-compose.yml配置
services: sv-isoluce-galeradb-1: build: context: ./buildimg/galeradb dockerfile: Dockerfile image: img-isoluce-galeradb container_name: ct-isoluce-galeradb-1 environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} CLUSTER_NAME: ${CLUSTER_NAME} NODE_NAME: "isoluce-galera-node1" CLUSTER_JOIN: "isoluce-galera-node2,isoluce-galera-node3" WSREP_ON: "ON" WSREP_SST_METHOD: "mariabackup" WSREP_CLUSTER_ADDRESS: "gcomm://isoluce-galera-node2,isoluce-galera-node3" volumes: - vl-isoluce-ct-galeradb-1:/var/lib/mysql - ./ctconfig/galeradb-1.cnf:/etc/mysql/my.cnf ports: - "3301:3306" networks: nw_isoluce_galeradb_cluster_network: ipv4_address: 192.168.16.11 volumes: vl-isoluce-ct-galeradb-1: name: vl-isoluce-ct-galeradb-1 vl-isoluce-ct-galeradb-2: name: vl-isoluce-ct-galeradb-2 vl-isoluce-ct-galeradb-3: name: vl-isoluce-ct-galeradb-3 networks: nw_isoluce_galeradb_cluster_network: name: nw_isoluce_galeradb_cluster_network driver: bridge ipam: config: - subnet: 192.168.16.0/24
自定义镜像Dockerfile
FROM mariadb:10.5 RUN apt-get update && apt-get install -y \ iputils-ping \ vim \ nano \ net-tools \ htop \ wget \ curl \ atop \ netcat-openbsd \ systemd \ procps \ locate \ telnet \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* EXPOSE 3306
Galera节点配置文件(节点IP和名称不同)
[mysqld] log_error = /var/log/mysql/error.log general_log = on general_log_file = /var/log/mysql/mysql.log performance_schema=ON performance_schema_instrument = '%=ON' performance_schema_consumer_events_statements_current=ON performance_schema_consumer_events_statements_history=ON wsrep_on=ON wsrep_provider=/usr/lib/libgalera_smm.so wsrep_cluster_address=gcomm://isoluce-galera-node1,isoluce-galera-node2,isoluce-galera-node3 wsrep_cluster_name=isoluce-galera-cluster wsrep_node_address=192.168.16.11 wsrep_node_name=isoluce-galera-node1 wsrep_sst_method=mariabackup binlog_format=ROW
解决方案
1. 修正镜像构建逻辑,确保Galera组件正确安装
官方MariaDB镜像默认未包含Galera集群组件,需在Dockerfile中明确安装mariadb-galera-server和galera包,并确认库文件路径:
FROM mariadb:10.5 RUN apt-get update && apt-get install -y \ iputils-ping \ vim \ nano \ net-tools \ htop \ wget \ curl \ atop \ netcat-openbsd \ procps \ locate \ telnet \ mariadb-galera-server galera \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 确认Galera库实际路径并创建软链接(适配配置文件路径) RUN ln -s /usr/lib/galera/libgalera_smm.so /usr/lib/libgalera_smm.so || true EXPOSE 3306
2. 调整集群初始化逻辑,避免启动时的网络依赖
第一个节点启动时需初始化空集群,不能直接指向未启动的其他节点,修改节点1的docker-compose环境变量:
environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} CLUSTER_NAME: ${CLUSTER_NAME} NODE_NAME: "isoluce-galera-node1" CLUSTER_JOIN: "" # 初始化节点无需加入其他节点 WSREP_ON: "ON" WSREP_SST_METHOD: "mariabackup" WSREP_CLUSTER_ADDRESS: "gcomm://" # 启动空集群
节点2、3的WSREP_CLUSTER_ADDRESS需设为gcomm://isoluce-galera-node1,待节点1完全启动后再启动这两个节点。
3. 强制输出详细错误日志
在docker-compose的service中添加启动命令,让MySQL输出更详细的错误信息:
services: sv-isoluce-galeradb-1: # 其他配置不变 command: ["mysqld", "--verbose", "--log-error-verbosity=3"]
4. 确保数据卷权限正确
在Dockerfile中添加权限设置,保证mysql用户能读写数据卷:
RUN chown -R mysql:mysql /var/lib/mysql
启动步骤
- 重新构建镜像:
docker compose build - 启动节点1:
docker compose up -d sv-isoluce-galeradb-1,等待节点完全启动(可通过docker logs ct-isoluce-galeradb-1查看集群初始化完成) - 启动节点2和3:
docker compose up -d sv-isoluce-galeradb-2 sv-isoluce-galeradb-3
内容的提问来源于stack exchange,提问作者kiminox
相关产品推荐
相关产品推荐

