MySQL的集群架构【极致肝货】

文档背景

MySQL很多架构学也学不完,简单记录一下MySQL的系统架构。

  • 读写分离架构
  • MyCat中间件
  • 负载均衡
  • 主从复制
  • PXC集群

1、读写分离架构

首先,为什么需要有读写分离架构呢?
我们一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是说采用数据库集群的方案: 其中一个是主库,负责写入数据,我们称之为:写库; 其它都是从库,负责读取数据,我们称之为:读库;

那么,对我们的要求是:

  1. 读库和写库的数据一致;
  2. 写数据必须写到写库;
  3. 读数据必须到读库;

1.1、架构

在这里插入图片描述

从该系统架构中,可以看出:

  • 数据库从之前的单节点变为多节点提供服务
  • 主节点数据,同步到从节点数据
  • 应用程序需要连接到2个数据库节点,并且在程序内部实现判断读写操作

这种架构存在2个问题:

  • 应用程序需要连接到多个节点,对应用程序而言开发变得复杂
    • 这个问题,可以通过中间件解决
    • 在这里插入图片描述
  • 主从之间的同步,是异步完成,也就意味着这是 弱一致性
    • 可能会导致,数据写入主库后,应用程序读取从库获取不到数据,或者可能会丢失数据,对于数据安全性要求比较高的应用是不合适的
    • 该问题可以通过PXC集群解决

2、中间件

2.1、架构

在这里插入图片描述

从架构中,可以看出:

  • 应用程序只需要连接到中间件即可,无需连接多个数据库节点
  • 应用程序无需区分读写操作,对中间件直接进行读写操作即可
  • 在中间件中进行区分读写操作,读发送到从节点,写发送到主节点

该架构也存在问题,中间件的性能成为了系统的瓶颈,那么架构可以改造成这样:
在这里插入图片描述
这样的话,中间件的可靠性得到了保证,但是也带来了新的问题,应用系统依然是需要连接到2个中间件,又为应用系统带来了复杂度。

3、负载均衡

为了解决以上问题,我们将继续优化架构,在应用程序和中间件之间增加proxy代理,由代理来完成负载均衡的功能,应用程序只需要对接到proxy即可。·
在这里插入图片描述
至此,主从复制架构的高可用架构才算是搭建完成。

4、PXC集群架构

在前面的架构中,都是基于MySQL主从的架构,那么在主从架构中,弱一致性问题依然没有解决,如果在需要强一致性的需求中,显然这种架构是不能应对的,比如:交易数据。
PXC提供了读写强一致性的功能,可以保证数据在任何一个节点写入的同时可以同步到其它节点,也就意味着可以存其它的任何节点进行读取操作,无延迟。
架构如下:
在这里插入图片描述

4.1、混合架构

在前面的PXC架构中,虽然可以实现了事务的强一致性,但是它是通过牺牲了性能换来的一致性,如果在某些业务场景下,如果没有强一致性的需求,那么使用PXC就不合适了。所以,在我们的系统架构中,需要将这两种方式综合起来,这样才是一个较为完善的架构。
在这里插入图片描述

5、主从架构

在这里插入图片描述
在这里插入图片描述

配置A主配置

修改A的my.cnf配置文件,在末尾添加以下内容,并重启mysql服务

server-id=1001 #//服务器唯一性标识符,每台服务器配置必须保存不一样
log-bin=mysql-bin
expire_logs_days = 7 # binlog过期清理时间
max_binlog_size = 100M # 日志文件超过100M会生成新的日志文件
binlog_format=mixed 
binlog-ignore-db=information_schema #不同步的数据库名
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
sync_binlog = 1 # 每几次事务提交,MySQL把binlog缓存刷进日志文件中,默认是0,最安全的是设置为1

创建用户并修改权限

CREATE USER 'rootslave'@'%' IDENTIFIED WITH mysql_native_password BY 'root123';
GRANT REPLICATION SLAVE ON *.* TO 'rootslave'@'%';
# 刷新权限
FLUSH PRIVILEGES;
# 查看主配置状态
SHOW MASTER STATUS;

在这里插入图片描述
B从配置

#停止slave
STOP SLAVE;
#重置slave
RESET SLAVE;
#配置slave对应master信息
#这里的master_host填写数据库A的ip地址 master_port填写数据库A的端口 master_user填写数据库A上面修改权限的用户 master_password填写对应密码
#master_log_file 填写上面步骤4中查看主数据库同步信息最后结果截图中的File字段值 master_log_pos填写Position字段的值
CHANGE MASTER TO master_host='xx.xx.xx.xx' ,master_port=xxx, master_user='rootslave', master_password='root123', master_log_file='mysql-bin.000001', master_log_pos=566;
#启动slave
START SLAVE;

#查看从库状态
SHOW SLAVE STATUS;

在这里插入图片描述

6、MyCat中间件

  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

6.1、优势

基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。
业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。
MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值