半同步复制
- 默认主从为一步复制机制,主节点提交事务后,写入binlog成功,即给用户线程返回成功响应。后面由dump线程一步将binlog发给slave。
- 思考,若主节点宕机,从节点还未备份到新执行的binlog,此时可能出现数据丢失。
- 半同步,可一定程度防止数据丢失,保证数据安全。
- 半同步介于异步同步与全同步之间,即可一定程度保证数据安全性,性能也比全同步好不少。
-
需要注意的是,半同步也无法绝对保证数据安全性,且会造成一定程度延迟,至少为一个TCP/IP往返时间。且一般会设置一个超时时间(默认为10s),防止从库出问题时,主库一直等待同步。
-
5.5版本后自带半同步复制,lib/plugin下的semisync_master.so和semisync_slave.so两个文件。
-
具体搭建步骤:主节点安装semisync_master模块,从节点安装semisync_slave模块,配置相关参数,打开半同步复制开关,设置等待应答最大时间等,然后重启。
MySQL高可用方案
- MySQL自身主从机制无法满足高可用功能,需借助第三方组件实现。
- 常见MySQL集群方案:MMM、MHA、MGR
- 基本思路及共同点:
- 对主从集群中的Master进行监控
- 通过VIP实现Master故障切换
- 重新配置其他slave对新的Master进行同步
MMM(MySQL主主复制)
- 一套由Perl语言实现的脚本程序
- 需两个以上Master,同时只有一个Master对外提供服务
- 可以理解为准备模式
- 主1出故障时,VIP将飘到主2节点,让主2提供服务
- 特点:简单粗暴,容易丢失事务,配合半同步复制,可减少失败概率,目前MMM社区已经停止维护,基本不推荐使用。
MHA(Master High Availability)
- 由日本人开发的一套基于Perl脚本编写的工具。
- 可在30s内实现故障切换,且可最大程度保证数据一致性。
- 淘宝内部也有一个相似产品叫TMHA
- MHA包括 Manager节点和Node节点,管理节点一般单独一台机器,Node节点一般和每台MySQL Server在一起。
- Node节点通过解析各MySQL日志来进行一些操作,Manager节点将和每个Node节点通信,判断其Node上的MySQL是否正常。若发现故障,则直接把他的Slave提升为Master,其他Slave都挂到新Master上,此过程过程对用户透明。
- MHA 除支持日志点复制外,还支持GTID
- MHA 相比MMM,会尝试从旧Master中恢复二进制日志,所以相比来说,数据丢失概率降低不少。
MGR (MySQL Group Replication)
- 5.7.17 版本后官方正式推出的一种组复制机制
- 核心解决异步复制和半同步复制数据一致性问题
- 原理:若干节点组成复制组,一个事务发起提交,必须经过半数节点以上的决议通过,才可正常提交。
- 依靠分布式一致性协议,Paxos的一个变种
- 实现分布式场景下,数据最终一致
- 支持多主,但官方推荐单主模式
- 多主:客户端可随机向MySQL节点写入数据
- 单主:集群选出主节点复制写,主和其他节点提供读
- 优点:几乎无延迟,相比异步复制小很多,数据强一致性,可保证实物不丢失。
- 不足:仅支持Innodb,每个表必须有主键,且只能在GTID模式下使用,总体上目前还不够成熟,未经太多大型生产环境验证
- 适用场景:对主从延迟敏感,希望提供些服务高可用,希望数据强一致性。
了解分库分表
-
数据量过大,单库拆多库,单表拆多表,提升性能
-
场景举例:微服务架构,一个服务对应一个读库的库,业务日志表,可能按月拆表。
-
从拆分角度,可分为水平拆分与垂直拆分。
- 垂直拆分:按业务进行归类,将数据拆分到不同库或表中。不可彻底解决大数据量存储瓶颈。
- 水平拆分:根据业务逻辑,将数据通过某些字段,分散存储到多个库或表中,每个分片斤包括一部分数据。
-
常用分片策略:
- 取模:数据均匀分布,扩容麻烦
- 按范围:比较好扩容,数据不够均衡
- 按时间:容易区分弱点数据
- 按枚举:如按地区
- 按目标字段前缀
-
一般来说,系统设计之初继续确定垂直分库方案,并适当评估业务发展趋势,考虑分表方案。
-
分库分表缺点:
- 事务一致性
- 夸节点关联查询
- 跨节点分页,排序
- 主键冲突
- 公共表处理
- 运维及开发工作量
- ……
-
阿里巴巴最佳实践,单表吵500w级别或容量吵2GB,考虑分库分表
-
常见分库分表组件
- Shardingsphere,由JDBC、Proxy、Sidecar3款产品组成,提供数据分片、分布式事务、数据库治理功能
- Mycat,由阿里巴巴Cobar研发而来,稳定可靠,性能优越。
- DBLE,包含几个总要产品,分布式数据库中间件可认为是对Mycat的增强,另外还提供数据传输及分布式事务框架供选择。