本篇文章给大家介绍了关于MySQL读写分离的相关知识,希望对大家有帮助。
MySQL 读写分离的概述
-
MySQL 作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。
-
在实际的生产环境中,由单台 MySQL 作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。
-
因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy/Amoeba)来提升数据库的并发负载能力进行部署与实施。
读写分离工作原理
-
基本的原理是:
-
主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE)
-
从数据库处理 SELECT 查询操作
-
数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
为什么要读写分离
-
面对越来越大的访问压力,单台的服务器的性能成为瓶颈,需要分担负载
-
主从只负责各自的写和读,极大程度的缓解 X(写)锁和 S(读)锁争用
-
从库可配置 myisam 引擎,提升查询性能以及节约系统开销
-
增加冗余,提高可用性
实现读写分离的方式
- 一般有两种方式实现
- 应用程序层实现,网站的程序实现
- 应用程序层实现指的是在应用程序内部及连接器中实现读写分离
-
优点:
-
应用程序内部实现读写分离,安装既可以使用
-
减少一定部署难度
-
访问压力在一定级别以下,性能很好
-
缺点:
-
架构一旦调整,代码要跟着变
-
难以实现高级应用,如自动分库,分表
-
无法适用大型应用场景
中间件层实现:
-
中间件层实现是指在外部中间件程序实现读写分离
-
常见的中间件程序
-
Cobar:
-
阿里巴巴 B2B 开发的关系型分布式系统,管理将近 3000 个 MySQL 实例。 在阿里经受住了考验,后面由于作者的走开的原因 cobar 没有人维护 了,阿里也开发了 tddl 替代 cobar。
-
MyCAT:
-
社区爱好者在阿里 cobar 基础上进行二次开发,解决了 cobar 当时存在的一些问题,并且加入了许多新的功能在其中。目前 MyCAT 社区活跃度很高,已经有一些公司在使用 MyCAT。总体来说支持度比
-
较高,也会一直维护下去。
-
OneProxy:
-
数据库界大牛,前支付宝数据库团队领导楼总开发,基于 mysql 官方 的 proxy 思想利用 c 进行开发的,OneProxy 是一款商业收费的中间件,楼总舍去了一些功能点,专注在性能和稳定性上。有人测
-
试过说在高并发下很稳定。
-
Vitess:
-
这个中间件是 Youtube 生产在使用的,但是架构很复杂。 与以往中间件不同,使用 Vitess 应用改动比较大,要使用他提供语言的 API 接口,我们可以借鉴他其中的一些设计思想。
-
Kingshard:
-
Kingshard 是前 360Atlas 中间件开发团队的陈菲利用业余时间 用 go 语言开发的,目前参与开发的人员有 3 个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。
-
Atlas:
-
360 团队基于 mysql proxy 把 lua 用 C 改写。原有版本是支持分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并发下会经常挂掉,如果大家要使用需要提前做好测试。
-
MaxScale 与 MySQL Route:
-
这两个中间件都算是官方的,MaxScale 是 mariadb (MySQL 原作者维护的一个版本)研发的,目前版本不支持分库分表。MySQL Route 是现在 MySQL 官方 Oracle 公司发布出来的一个中间件。
-
优点:
-
架构设计更灵活
-
可以在程序上实现一些高级控制,如:透明化水平拆分,failover,监控可以依靠技术手段提高 mysql 性能对业务代码的影响小,同时也安全
-
缺点:
-
需要一定的开发运维团队的支持。
什么是 MyCAT
-
一个彻底开源的,面向企业应用开发的大数据库集群
-
支持事务、ACID、可以替代 MySQL 的加强版数据库
-
一个可以视为 MySQL 集群的企业级数据库,用来替代昂贵的 Oracle 集群
-
一个融合内存缓存技术、NoSQL 技术、HDFS 大数据的新型 SQL Server
-
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
-
一个新颖的数据库中间件产品
MyCat 服务安装与配置
-
MyCat 有提供编译好的安装包,支持 Windows、Linux、Mac、Solaris 等系统上安装与运行
-
官方下载主页 http://www.mycat.org.cn/
- 实验架构:
- 192.168.2.2 Mycat CentOS 8.3.2011
- 192.168.2.3 主服务器 CentOS 7.6
- 192.168.2.5 从服务器 CentOS 7.6
- 运行 Mycat 需要JDK 1.7 或者以上版
- 下载 Mycat
- wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
- tar xf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /usr/local/
- sudo useradd -M -N -s /sbin/nologin mycat && echo "123456" | sudo passwd –stdin mycat
- sudo chown -R mycat. /usr/local/mycat/
- bin 程序目录,Linux 下运行:./mycat console,首先要 chmod +x *
注:mycat 支持的命令{ console | start | stop | restart | status | dump }
conf 目录下存放配置文件:server.xml 是 Mycat 服务器参数调整和用户授权的配置文件,schema.xml 是逻辑库定义和表以及分片定义的配置文件,rule.xml 是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改,需要重启 Mycat 生效。
lib 目录下主要存放 mycat 依赖的一些 jar 文件。
日志存放在 logs/mycat.log 中,每天一个文件,日志的配置是在 conf/log4j.xml 中,根据自己的需要,可以调整输出级别为 debug,在 debug 级别下,会输出