当一个节点需要一个来自集群的状态转移,它默认会尝试增量的状态转移 Incremental State Transfer(IST)方法。但当没有节点可供使用或者发现是一个用wsrep_sst_donor参数人工定义的供体时,它会使用State Snapshot Transfer(SST)的方式。galera cluster SST后端可以是多种方式,这里有两个方法可选:Logical State Snapshots,通过数据库server和client来交互;Physical State Snapshots,在节点间直接拷贝数据文件
Method | Speed | Blocks Donor | Available on Live Node | Type | DB Root Access |
---|---|---|---|---|---|
mysqldump | Slow | Blocks | Available | Logical | Donor and Joiner |
rsync | Fastest | Blocks | Unavailable | Physical | None |
xtrabackup | Fast | Briefly | Unavailable | Physical | Donor only |
设置状态快照转移的方法是用wsrep_sst_method这个参数
wsrep_sst_method = rsync
这几个方法中并没有哪个是最好的,要按照集群的部署方式和自身的需求来选择。幸运的是你只需在接收节点上设置后端的传输方式,只要供体支持就行。
逻辑状态快照
后端用逻辑快照的方法只有一种——mysqldump
逻辑状态转移方法有以下几个好处:
1、当前活动节点可用,事实上,只有完全初始化的server可以接收逻辑的状态快照
2、这种转移无需接收节点和供体有相同的配置,这点可以允许你更新存储引擎的某些项。例如使用这种方式时,可以把文件格式从Antelope迁移为Barracuda,压缩大小,或者把iblog*文件从一个分区挪到另一个分区
逻辑状态转移方法有以下几个坏处:
1、状态转移的速度和mysqldump一样慢
2、状态转移需要接收端配置接收远程root连接
3、接收节点必须有没被破坏的database
用mysqldump的主要好处就是能够传输一个状态转移给在工作中的server。你可以单独起一个服务器,然后通过database client指令把它加入集群。也可以用它来迁移一个旧的database规格到新规格,适合数据量少的数据库。这种传输方式对每个节点的mysqldump版本要求一致。mysqldump的脚本只需跑在发送节点上,脚本从client端得到连接到新加节点的pipe。因为mysqldump通过database client交互,配置还需要多几步,具体参见http://galeracluster.com/documentation-webpages/mysqldump.html
物理状态快照
物理状态转移方法有以下几个优点:
1、因为是物理的方式直接从磁盘上拷贝数据,因此不需要与database server有交互。
2.这种传输不需要数据库在工作状态,因为供体节点会把新节点原来的数据覆盖掉。
3、这种方法更快
物理状态转移方法有以下几个缺点:
1.这种传输方案要求节点和供体有相同的目录规划,相同的存储引擎配置等
2、已经初始化存储引擎的server不能用。这意味着要应用一个状态快照走传输时,database server必须重启来适应这些改变
rsync
最快的后端同步方式是rsync.它再创书的过程中会阻断供体节点,但不需要database配置或root连接。当使用T级的数据库时,rsync被认为比xtrabackup快1.5-2倍。rsync还有rsync-wan修改功能,用作rsync增量传输算法。该项配置对网路占用很高,使用时要考虑到网络瓶颈。这种方法做常遇到的问题是供体和新节点之间rsync不同版本的不兼容性。rsync脚本在供体和新节点两端都跑,在新节点端,rsync以server模式启动,等待来自供体的连接;在供体端,rsync以client模式启动,发送数据目录的连接给新节点。
wsrep_sst_method = rsync
要了解更多rsync,参看http://rsync.samba.org/
xtrabackup
xtrabackup只在复制mysiam表时阻断供体很短时间,如果mysiam表很小的话,bloking的时间也很短。但复制大数据时会影响供体的性能,所用时间比rsync要长。更多xtrabackup的配置参见http://www.percona.com/doc/percona-xtradb-cluster/5.6/manual/xtrabackup_sst.html
[mysqld]
wsrep_sst_auth = <wsrep_sst_user>:<password>
wsrep_sst_method = xtrabackup
datadir = /path/to/datadir[client]
socket = /path/to/socket