某项目mysql建设方案设计

1.前言

近期在做某一个数据中台项目的架构设计方案,其中有一个模块需要使用到mysql来提供一些信息交互的联机服务,代替原先使用的公用的hbase集群,主要原因是公用的hbase作业进程多,经常会发生数据访问延时(GC导致的)。改用mysql集群来对这部分服务提升响应的稳定性(查询延时不超过100ms)。
Mysql的性能指标要求是在规划的单表5000w数据量的规模下,高并发查询响应延时不超过100ms。其中,mysql的初始化数据量级在1000w左右,需要从数据仓库系统中同步过来,上线后每日同步增量数据,并下发结果数据返回到数据仓库中。
同时,由于企业IT服务性质要求mysql数据库具有高可用性,7*24小时不停机,当发生故障时,仍能正常提供服务,并能恢复原样。
经过对需求的理解分析,在架构设计方案中应该要包括:
1. Mysql的高可用部署设计
2. Mysql大表拆分设计
3. Mysql的ETL设计
根据网上查的各类方案,针对这次项目的需求进行方案的选型设计

2.高可用部署设计

2.1 方案选型

Mysql的高可用需求要求数据库能够支持7*24小时不停机,当故障发生时能够实现自动切换,保障服务正常,并能在主机故障回复后迅速恢复原样。
Mysql的高可用部署大致上分两类:双机或多机热备方案,分布式部署方案。 从使用工具上区分,一是利用mysql自有的半数据同步工具加keepalived软件实现双机主备,而是使用各种中间件来实现多机主备、主主、分布式等方案。
本项目中由于对数据库服务稳定性要求较高,数据量规模相对较大,因此建议基于中间件的一主多从部署架构和一个开源分布式MYSQL数据库TIDB,这两种方案可以满足高可用要求。

2.2.1 MHA+MYCAT部署一主多从方案

2.2.1.1 使用软件说明
2.2.1.1.1 MHA

MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。
MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。
MHA的目的在于维持主从复制中master节点的高可用性,其最大特点是可以修复多个slave节点之间的差异日志,最终使所有slave节点保持数据一致,然后从中选择一个作为新的master节点,并将其它slave节点指向它。当master节点出现故障时,可以通过对比slave节点之间I/O线程读取master节点二进制日志的position事件位置,选取最接近的slave节点作为备选master节点,其它的slave节点可以通过与备选master节点对比生成差异的中继日志,在备选master节点上应用从原来master节点保存的二进制日志,同时将备选master节点提升为新的master节点,最后在其它slave节点上应用相应的差异中继日志并从新的master节点开始复制。

2.2.1.1.2 MYCAT

MYCAT是一款主要作为分布式数据库系统的中间层,可以用来实现以下功能:

  1. 读写分离
  2. 负载均衡
  3. 数据库的垂直拆分
  4. 数据库水平拆分

在一主多从的部署方案中,主要用来是利用MYCAT的读写分离功能。
####### 2.2.1.2 架构方案说明


某项目mysql建设方案设计_第1张图片
image.png

(图片中补充数据库使用MHA做主从复制的方案)
使用MHA实现Mysql数据库的自动故障切换,使用Mycat作为数据库使用的中间件,实现应用对接的主从库配置。
一个主写库A多个从库,当主库A故障时,提升从库B为主写库,同时修改C、D库为B的从库。A故障修复后,作为B的从库。
主库A故障后,Mycat会自动把从B提升为写库。而C、D从库通过MHA自动修改其主库为B。进而实现自动切换的目地。
由于配置了多个读节点,读并发的能力有了质的提高,可以负载很高级别的读并发。
在这种方案下,通过Mycat对Mysql的连接访问实现了高可用方案,但相应的需要对Mycat本身也做高可用部署设计,因此需要使用Haproxy、keepalive结合实现。
在这种方案下,一主多从的部署架构相当于一个Mycat集群化部署的一个分片结构,后续基于这个架构横向扩展,支持更大的业务体量。

你可能感兴趣的:(某项目mysql建设方案设计)