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

跨主机Docker部署MariaDB Galera集群节点互不可见配置求助

解决Docker部署MariaDB Galera双节点集群的节点发现问题

核心配置要点

要解决容器节点无法互相发现的问题,关键是强制MariaDB使用宿主机可访问IP而非容器内部IP,重点配置以下两个变量:

  • wsrep_node_address:指定当前节点的宿主机IP(11.11.20.2或11.11.30.2),让集群内其他节点能定位到当前节点
  • wsrep_sst_receive_address:同样设置为宿主机IP,确保快照传输(SST)通过宿主机端口完成

同时需确保wsrep_cluster_address包含两台宿主机的IP,格式为gcomm://11.11.20.2,11.11.30.2。

两台主机的Docker-Compose配置示例

主机11.11.20.2的docker-compose.yml

version: '3.8'
services:
  galera-node1:
    image: mariadb:10.6-galera
    container_name: galera-node1
    ports:
      - "3306:3306"
      - "4567:4567"
      - "4567:4567/udp"
      - "4568:4568"
      - "4444:4444"
    volumes:
      - ./galera-node1-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=your_root_password
      - WSREP_CLUSTER_ADDRESS=gcomm://11.11.20.2,11.11.30.2
      - WSREP_NODE_ADDRESS=11.11.20.2
      - WSREP_SST_RECEIVE_ADDRESS=11.11.20.2
      - WSREP_NODE_NAME=galera-node1
      - WSREP_SST_METHOD=rsync
      - MYSQL_INITDB_SKIP_TZINFO=1
    restart: always
    network_mode: host

主机11.11.30.2的docker-compose.yml

version: '3.8'
services:
  galera-node2:
    image: mariadb:10.6-galera
    container_name: galera-node2
    ports:
      - "3306:3306"
      - "4567:4567"
      - "4567:4567/udp"
      - "4568:4568"
      - "4444:4444"
    volumes:
      - ./galera-node2-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=your_root_password
      - WSREP_CLUSTER_ADDRESS=gcomm://11.11.20.2,11.11.30.2
      - WSREP_NODE_ADDRESS=11.11.30.2
      - WSREP_SST_RECEIVE_ADDRESS=11.11.30.2
      - WSREP_NODE_NAME=galera-node2
      - WSREP_SST_METHOD=rsync
      - MYSQL_INITDB_SKIP_TZINFO=1
    restart: always
    network_mode: host

集群启动步骤

  1. 初始化第一个节点:在11.11.20.2主机上执行
    # 首次启动需初始化集群
    docker-compose run --rm galera-node1 mysqld --wsrep-new-cluster
    # 启动正常服务
    docker-compose up -d
    
  2. 启动第二个节点:在11.11.30.2主机上直接启动
    docker-compose up -d
    

集群状态验证

进入任意容器执行以下命令,返回wsrep_cluster_size为2则表示集群正常:

docker exec -it galera-node1 mysql -uroot -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"

额外注意事项

  • 两台主机的防火墙/安全组必须开放4567(tcp/udp)、4568(tcp)、4444(tcp)、3306(tcp)端口
  • 若不使用host网络模式,需保持端口映射正确,且wsrep_node_address和wsrep_sst_receive_address仍需设置为宿主机IP
  • 两台节点的MYSQL_ROOT_PASSWORD必须保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:52:52