上节我们说了基于认证的复制功能,这节的内容为状态快照传输
当一个节点加入集群时,他需要同步集群中的数据
我们将提供完成数据的节点称为捐赠者(donor),其使用SST和IST方法进行传输
IST即增量的状态传输,当第一次加入或者数据量很大时会采用SST方式
当节点退出重新加入集群时,如果数据量不大则采用IST方式
我们将接收数据的新加入的节点称为加入者(joiner)
你可以使用wsrep_sst_donor参数来设置哪个节点为donor,否则Group Communication会根据节点信息自动选择一个donor
一个节点可以在SYNCED状态时被选择为donor
如果有多个SYNCED状态的节点,joiner会优先选择有相同gmcast.segment值
wsrep_provider_options="gmcast.segment=0"
或者选择索引中的第一个
当一个节点被选择为donor时,其状态会立即变为DONOR,这时该节点将不再可用于请求
Galera支持一些方法用来进行状态快照传输,可以分为2累
我们可以使用wsrep_sst_method参数来设置使用哪种方式
wsrep_sst_method = rsync
wsrep_sst_donor = "node1, node2"
我们需要根据不同的需求来灵活的选择该用哪种方法
逻辑状态传输使用的是mysqldump进行的
关系mysqldump可以看我前面的文章
http://www.zhaibibei.cn/mysql/tutorial/
这里再简单的说下
优势
劣势
对于逻辑状态传输来说mysqldump是唯一可选项,其只会在donor上运行,并且对双方的数据库版本有要求,最好使用相同的数据库版本
优势
劣势
物理状态快照有两种方法
该方法是最快的方式,他拥有上述所说的所有优劣势,在传说过程中donor是被阻塞的,并且不需要额外的配置
对于TB级别的数据传输,他会比xtrabackup快1.5到2倍
我们也建议双方的数据库版本一致
rsync支持增量的传输,这点在广域网部署中可以使用
rsync在donor和joiner上运行
在joiner上他以rsync服务器端的形式启动来接收donor端的连接
在donor上他以rsync客户端的形式启动来发送数据的joiner端
同样使用如下参数设置使用rsync
wsrep_sst_method = rsync
该方法是最受欢迎的方式,传输过程中他不会阻塞donor
它只会在拷贝非事务表(如MyISAM)时会短暂的阻塞donor(如一些系统表)
使用该方法还需要配置一些认证信息用来连接donor
[mysqld]
wsrep_sst_auth = <wsrep_sst_user>:<password>
wsrep_sst_method = xtrabackupdatadir = /path/to/datadir
[client]
socket = /path/to/socket
关于xtrabackup相关的内容可以查看我以前的文章
http://www.zhaibibei.cn/mysql/xtrabackup/
https://galeracluster.com/library/documentation/sst-physical.html