MySQL Galera Cluster全解析 Part 3 状态快照传输(SST)
前期回顾
MySQL Galera Clusters全解析 Part 1 Galera Cluster 简介
MySQL Galera Clusters全解析 Part 2 基于认证的复制
前期回顾
上节我们说了基于认证的复制功能,这节的内容为状态快照传输
1. 捐赠者和加入者
当一个节点加入集群时,他需要同步集群中的数据
我们将提供完成数据的节点称为捐赠者(donor),其使用SST和IST方法进行传输
- State Snapshot Transfer (SST)
- Incremental State Transfer (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,这时该节点将不再可用于请求
2. SST 方法
Galera支持一些方法用来进行状态快照传输,可以分为2累
- 逻辑状态传输
- 物理状态传输
我们可以使用wsrep_sst_method参数来设置使用哪种方式
wsrep_sst_method = rsync
wsrep_sst_donor = "node1, node2"
我们需要根据不同的需求来灵活的选择该用哪种方法
2.1 逻辑状态传输
逻辑状态传输使用的是mysqldump进行的
关系mysqldump可以看我前面的文章
http://www.zhaibibei.cn/mysql/tutorial/
这里再简单的说下
优势
- 该方法可以在运行的服务器上进行,事实上也必须在MySQL开启的时候进行
- 该方法不要求双方有相同的配置,例如可以将文件格式从Antelope迁移到Barracuda等等
劣势
- 该方法使用mysqldump所以速度会很慢
- 需要额外的配置joiner可以被所有可能的donor连接
- joiner必须是一个正常可用的数据库
对于逻辑状态传输来说mysqldump是唯一可选项,其只会在donor上运行,并且对双方的数据库版本有要求,最好使用相同的数据库版本
2.2 物理状态快照
优势
- 该方法从物理上从一个节点拷贝数据到另一个节点,不需要和数据库进行交互
- 该方法不要求数据库处于在线状态,而且donor会覆盖joiner的数据
- 该方法非常快
劣势
- 该方法要求双方具有相同的数据目录规划和存储引擎设置,如file-per-table, compression, log file size等参数和需要innodb引擎
- joiner在传输过程中是不可用的,知道整个过程完成
物理状态快照有两种方法
- rsync
- xtrabackup
2.2.1 rsync
该方法是最快的方式,他拥有上述所说的所有优劣势,在传说过程中donor是被阻塞的,并且不需要额外的配置
对于TB级别的数据传输,他会比xtrabackup快1.5到2倍
我们也建议双方的数据库版本一致
rsync支持增量的传输,这点在广域网部署中可以使用
rsync在donor和joiner上运行
在joiner上他以rsync服务器端的形式启动来接收donor端的连接
在donor上他以rsync客户端的形式启动来发送数据的joiner端
同样使用如下参数设置使用rsync
wsrep_sst_method = rsync
2.2.2 xtrabackup
该方法是最受欢迎的方式,传输过程中他不会阻塞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/
3. 参考资料
https://galeracluster.com/library/documentation/sst-physical.html
觉得文章不错的欢迎转发,收藏~
- 插入排序算法
- Javascript 的addEventListener()及attachEvent()区别分析
- 设计模式-用接口来实现filter!梭梭就是干!
- OpenDaylight实现轮询策略的负载均衡服务
- 微服务业务开发三个难题-拆分、事务、查询(上)
- 总结了一些指针易出错的常见问题(五)
- 微服务业务开发三个难题-拆分、事务、查询(下)
- C语言之控制台读取上下左右方向键指令
- C程序之修改Windows的控制台大小
- VS2010/MFC编程(对话框:模态对话框及其弹出过程)
- 设计模式-抽象类,只是想为你做更多
- 设计模式-搞个接口,留有余地,让你我不再尴尬
- vs2010点调试,显示系统找不到指定的文件
- C++之类和对象的使用(三)
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Spark中的聚类算法
- 【Linux_Shell 脚本编程学习笔记六、shell的数值运算】
- Java自动化测试(adb常用命令 32)
- 前端学习计算机理论知识的好处
- 【Vue 学习笔记 一、Vue开发环境搭建】
- Vue 图片上传组件(base64 版):vue-upload-imgs
- 三、运行时的动态常量(学习笔记)
- Vue Cli 3 打包配置--自动忽略 console.log 语句
- git 常用命令介绍
- PAT (Basic Level) Practice (中文)1043 输出PATest (20 分)
- PAT (Basic Level) Practice (中文)1047 编程团体赛 (20 分)
- Vue中computed分析
- 半小时搞懂 HTTP、HTTPS和HTTP2
- RestPack Java实现Html转PDF文件
- 六、垃圾回收_判断对象是否存活算法_引用计数法详解