Galera Cluster采用了一种叫Write-Set REPlication(所以Galera的配置都是以wsrep_开头)的机制,用于确保集群中所有主机数据的强一致性。
本文不打算介绍Galera Cluster的安装配置,而仅仅是介绍跟Galera Cluster端口相关的内容。假设前提是已经存在的一个三节点的Galera Cluster集群。
系统运行过程中,我们会有一点典型的应用场景,例如:某个节点短暂停机维护和新增节点以提高集群的负载处理能力,在此过程中Galera是如何处理的。关于Galera端口引用官方的文档内容:
Galera Cluster requires a number of ports in order to maintain network connectivity between the nodes. Depending on your deployment, you may require all or some of these ports on each node in the cluster:
3306 For MySQL client connections and State Snapshot Transfer that use the mysqldump method.
4567 For Galera Cluster replication traffic, multicast replication uses both UDP transport and TCP on this port.
4568 For Incremental State Transfer.
4444 For all other State Snapshot Transfer.
简单说明:
3306,这个是MariaDB/MySQL的服务端口,这个都不开那就不用跑MariaDB/MySQL服务了。
4567,Galera做数据复制的通讯和数据传输端口,需要在防火墙放开TCP和UDP
4568,Galera做增量数据传输使用的端口(Incremental State Transfer, IST),需要防火墙放开TCP
4444,Galera做快照状态传输使用的端口(State Snapshot Transfer, SST),需要防火墙放开TCP
所以:
当节点短期停机维护后重新加入到集群中,Galera会判断是否数据同步,否则如果数据不同步就是尝试使用IST来同步数据,如果IST不成功,则会尝试使用SST。
当有新节点加入到集群中,Galera会从现有集群中找到一台服务器用于数据同步,这个时候就会使用SST。
这个过程中数据提供者称之为donor,而数据接收者称之为joiner。最新版本中数据同步的方法建议是xtrabackup-v2,对应参数wsrep_sst_method。某些版本可能会有一些BUG,具体表现为,同步后数据文件的owner和group发生更改,如遇这种情况,可以考虑升级到新版或者手工修改文件的owner,命令sudo chown mysql:mysql /opt/mysql(假设这个是MariaDB/MySQL的数据文件位置)。
另外,如果需要修改这些默认端口,可以参考一下参数:
修改4567端口:wsrep_provider_options='base_port=5567;',同时wsrep_cluster_address也需要相应调整
修改4568端口:wsrep_provider_options='ist.recv_addr=192.168.1.102:5568;'
修改4444端口:wsrep_sst_receive_address='192.168.1.102:5569'