MySQL生产环境高可用架构详解(2)

半同步复制

  1. 默认主从为一步复制机制,主节点提交事务后,写入binlog成功,即给用户线程返回成功响应。后面由dump线程一步将binlog发给slave。
  2. 思考,若主节点宕机,从节点还未备份到新执行的binlog,此时可能出现数据丢失。
  3. 半同步,可一定程度防止数据丢失,保证数据安全。
  4. 半同步介于异步同步与全同步之间,即可一定程度保证数据安全性,性能也比全同步好不少。

  1. 需要注意的是,半同步也无法绝对保证数据安全性,且会造成一定程度延迟,至少为一个TCP/IP往返时间。且一般会设置一个超时时间(默认为10s),防止从库出问题时,主库一直等待同步。

  2. 5.5版本后自带半同步复制,lib/plugin下的semisync_master.so和semisync_slave.so两个文件。

  3. 具体搭建步骤:主节点安装semisync_master模块,从节点安装semisync_slave模块,配置相关参数,打开半同步复制开关,设置等待应答最大时间等,然后重启。

MySQL高可用方案

  1. MySQL自身主从机制无法满足高可用功能,需借助第三方组件实现。
  2. 常见MySQL集群方案:MMM、MHA、MGR
  3. 基本思路及共同点:
    • 对主从集群中的Master进行监控
    • 通过VIP实现Master故障切换
    • 重新配置其他slave对新的Master进行同步

MMM(MySQL主主复制)

  1. 一套由Perl语言实现的脚本程序
  2. 需两个以上Master,同时只有一个Master对外提供服务
  3. 可以理解为准备模式
  4. 主1出故障时,VIP将飘到主2节点,让主2提供服务

  1. 特点:简单粗暴,容易丢失事务,配合半同步复制,可减少失败概率,目前MMM社区已经停止维护,基本不推荐使用。

MHA(Master High Availability)

  1. 由日本人开发的一套基于Perl脚本编写的工具。
  2. 可在30s内实现故障切换,且可最大程度保证数据一致性。
  3. 淘宝内部也有一个相似产品叫TMHA
  4. MHA包括 Manager节点和Node节点,管理节点一般单独一台机器,Node节点一般和每台MySQL Server在一起。
  5. Node节点通过解析各MySQL日志来进行一些操作,Manager节点将和每个Node节点通信,判断其Node上的MySQL是否正常。若发现故障,则直接把他的Slave提升为Master,其他Slave都挂到新Master上,此过程过程对用户透明。

  1. MHA 除支持日志点复制外,还支持GTID
  2. MHA 相比MMM,会尝试从旧Master中恢复二进制日志,所以相比来说,数据丢失概率降低不少。

MGR (MySQL Group Replication)

  1. 5.7.17 版本后官方正式推出的一种组复制机制
  2. 核心解决异步复制和半同步复制数据一致性问题
  3. 原理:若干节点组成复制组,一个事务发起提交,必须经过半数节点以上的决议通过,才可正常提交。
  4. 依靠分布式一致性协议,Paxos的一个变种
  5. 实现分布式场景下,数据最终一致
  6. 支持多主,但官方推荐单主模式
    • 多主:客户端可随机向MySQL节点写入数据
    • 单主:集群选出主节点复制写,主和其他节点提供读

  1. 优点:几乎无延迟,相比异步复制小很多,数据强一致性,可保证实物不丢失。
  2. 不足:仅支持Innodb,每个表必须有主键,且只能在GTID模式下使用,总体上目前还不够成熟,未经太多大型生产环境验证
  3. 适用场景:对主从延迟敏感,希望提供些服务高可用,希望数据强一致性。

了解分库分表

  1. 数据量过大,单库拆多库,单表拆多表,提升性能

  2. 场景举例:微服务架构,一个服务对应一个读库的库,业务日志表,可能按月拆表。

  3. 从拆分角度,可分为水平拆分与垂直拆分。

    • 垂直拆分:按业务进行归类,将数据拆分到不同库或表中。不可彻底解决大数据量存储瓶颈。
    • 水平拆分:根据业务逻辑,将数据通过某些字段,分散存储到多个库或表中,每个分片斤包括一部分数据。
  4. 常用分片策略:

    • 取模:数据均匀分布,扩容麻烦
    • 按范围:比较好扩容,数据不够均衡
    • 按时间:容易区分弱点数据
    • 按枚举:如按地区
    • 按目标字段前缀
  5. 一般来说,系统设计之初继续确定垂直分库方案,并适当评估业务发展趋势,考虑分表方案。

  6. 分库分表缺点:

    • 事务一致性
    • 夸节点关联查询
    • 跨节点分页,排序
    • 主键冲突
    • 公共表处理
    • 运维及开发工作量
    • ……
  7. 阿里巴巴最佳实践,单表吵500w级别或容量吵2GB,考虑分库分表

  8. 常见分库分表组件

    • Shardingsphere,由JDBC、Proxy、Sidecar3款产品组成,提供数据分片、分布式事务、数据库治理功能
    • Mycat,由阿里巴巴Cobar研发而来,稳定可靠,性能优越。
    • DBLE,包含几个总要产品,分布式数据库中间件可认为是对Mycat的增强,另外还提供数据传输及分布式事务框架供选择。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值