跨主机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
集群启动步骤
- 初始化第一个节点:在11.11.20.2主机上执行
# 首次启动需初始化集群 docker-compose run --rm galera-node1 mysqld --wsrep-new-cluster # 启动正常服务 docker-compose up -d - 启动第二个节点:在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
相关产品推荐
相关产品推荐

