如何配置跨两台服务器的4个Docker化Galera集群节点?
跨两台服务器各部署2个Docker化Galera节点的参数配置方案
场景前提
服务器A(servera.com)、服务器B(serverb.com)各运行2个MariaDB/Galera Docker容器,需组成统一集群:
- 服务器A容器:
mariadb-a1、mariadb-a2,分别将Galera默认端口(4567、4568、4569)映射到宿主机的4567/4568/4569和45670/45680/45690 - 服务器B容器:
mariadb-b1、mariadb-b2,分别映射端口到4567/4568/4569和45670/45680/45690 - 两台服务器防火墙开放上述映射端口,确保跨服务器网络互通
核心参数配置逻辑
1. wsrep_node_address 统一设置
所有节点的该参数直接配置为自身Docker容器名称,比如mariadb-a1、mariadb-a2等。
- 同服务器内的节点可通过Docker本地网络直接用容器名通信
- 跨服务器节点通过宿主机端口映射访问对方容器,无需修改此参数
2. wsrep_cluster_address 分节点配置
集群初始化仅允许一个节点使用空地址,其余节点需指向集群内已启动的节点地址:
(1)集群初始化节点(服务器A的mariadb-a1)
wsrep_cluster_address = "gcomm://" wsrep_cluster_name = "galera-cluster-radius" wsrep_node_name = "mariadb-a1" wsrep_node_address = "mariadb-a1"
启动此节点完成集群初始化后,可将wsrep_cluster_address改为包含所有节点的地址(可选,不影响后续节点加入)。
(2)服务器A的第二个节点(mariadb-a2)
wsrep_cluster_address = "gcomm://mariadb-a1" wsrep_cluster_name = "galera-cluster-radius" wsrep_node_name = "mariadb-a2" wsrep_node_address = "mariadb-a2"
同服务器内直接用容器名连接已初始化的节点。
(3)服务器B的第一个节点(mariadb-b1)
wsrep_cluster_address = "gcomm://servera.com:4567" wsrep_cluster_name = "galera-cluster-radius" wsrep_node_name = "mariadb-b1" wsrep_node_address = "mariadb-b1"
跨服务器连接服务器A上mariadb-a1的宿主机映射端口,也可指定多个集群节点地址提升容错性,比如:
wsrep_cluster_address = "gcomm://servera.com:4567,servera.com:45670"
(4)服务器B的第二个节点(mariadb-b2)
wsrep_cluster_address = "gcomm://mariadb-b1" wsrep_cluster_name = "galera-cluster-radius" wsrep_node_name = "mariadb-b2" wsrep_node_address = "mariadb-b2"
同服务器内用容器名连接本地已加入集群的节点。
关键注意事项
- 所有节点的
wsrep_cluster_name必须完全一致,否则无法加入同一集群 - 同一服务器的多个Galera节点必须映射不同的宿主机端口,避免端口冲突
- 仅集群第一个启动的节点使用
gcomm://空地址,其余节点必须指定集群内已存在的节点地址
内容的提问来源于stack exchange,提问作者Maxwell Chandler
相关产品推荐
相关产品推荐

