读写分离

Mycat实现读写分离

匿名 (未验证) 提交于 2019-12-02 21:59:42
随着应用的访问量并发量的增加,应用读写分离是很有必要的。当然应用要实现读写分离,首先数据库层要先做到主从配置。 应用实现读写分离至少有两种方法: 应用本身通过代码实现,例如基于动态数据源、AOP的原理来实现写操作时用主数据库,读操作时用从数据库。 通过中间件的方式实现,例如通过Mycat,即中间件会分析对应的SQL,写操作时会连接主数据库,读操作时连接从数据库。 本篇文章是介绍通过Mycat中间件的方式实现读写分离。 1、Mycat Mycat是一款开源的数据库中间件,其官网为 http://www.mycat.io/ ,其中官方对它介绍为: Mycat 是一个强大的数据库中间件,不仅仅可以用作读写分离、以及分表分库、容灾备份,而且可以用于多租户应用开发、云平台基础设施、让你的架构具备很强的适应性和灵活性,借助于即将发布的Mycat 智能优化模块,系统的数据访问瓶颈和热点一目了然,根据这些统计分析数据,你可以自动或手工调整后端存储,将不同的表映射到不同存储引擎上,而整个应用的代码一行也不用改变。 Mycat的实现原理为: Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL 语句,首先对SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

MySQL 读写分离与负载均衡

南笙酒味 提交于 2019-12-02 08:12:53
MySQL 数据库的读写分离和负载均衡一般是通过第三方软件来实现的。 也可以通过mysql驱动程序来实现,如com.mysql.jdbc.ReplicationDriver。 详细文档参见:http://dev.mysql.com/doc/refman/5.5/en/connector-j-info.html import java.sql.Connection; import java.sql.ResultSet; import java.util.Properties; import com.mysql.jdbc.ReplicationDriver; public class ReplicationDriverDemo { public static void main(String[] args) throws Exception { ReplicationDriver driver = new ReplicationDriver(); Properties props = new Properties(); // We want this for failover on the slaves props.put("autoReconnect", "true"); // We want to load balance between the slaves props.put(

Mycat读写分离(一主一从)

耗尽温柔 提交于 2019-12-01 19:33:22
Mycat读写分离(一主一从) 我们一共使用2个虚拟机,每个机器的作用如下: 主机名 IP 地址 任务角色 数据库 node1 192.168.1.121 Mycat, master MySQL node2 192.168.1.122 slave MySQL Mysql主服务器配置 第一步:修改/etc/my.cnf文件: 在[mysqld]段下添加: datadir=/var/lib/mysql 默认数据存储目录 server-id=1 主机唯一id log-bin=/var/lib/mysql/mysqlbin 启用二进制日志 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid binlog-do-db=boot_security 设置需要复制的数据库 binlog-ignore-db=mysql 设置不要复制的数据库 binlog_format=STATEMENT 设置logbin格式 第二步:重启mysql服务 systemctl mysqld restart 第三步:建立帐户并授权slave mysql> GRANT REPLICATION SLAVE ON *.* TO 'sendcode'@'%' IDENTIFIED BY '123456'; #一般不用root帐号,“%

基于mycat实现读写分离

一个人想着一个人 提交于 2019-12-01 13:33:44
Mycat 概述 在MySQL中间件出现之前,对于MySQL主从集群,如果要实现其读写分离,一般是在程序端实现,这样就带来一个问题,即数据库和程序的耦合度太高,如果我数据库的地址发生改变了,那么我程序端也要进行相应的修改,如果数据库不小心挂掉了,则同时也意味着程序的不可用,而这对很多应用来说,并不能接受。 引入MySQL中间件能很好的对程序端和数据库进行解耦,这样,程序端只需关注数据库中间件的地址,而无需知晓底层数据库是如何提供服务。 作为当前炙手可热的MySQL中间件,MyCAT实现MySQL主从集群的读写分离自是应有之义,其配置也相当简单。 在这里,我用三个实例组成MySQL主从集群,来验证MyCAT的读写分离功能,其实,一主一从就可以满足,之所以用三个,是为了验证MyCAT的分片功能。 集群组成如下: 角色 主机名 主机IP master server1 192.168.200.112 slave server2 192.168.200.113 slave server3 192.168.200.114 在 server1 上安装 jdk 和 mycat 安装Java环境(mycat基于java) yum install java-1.8.0-openjdk.x86_64 下载mycat wget http://dl.mycat.io/1.6.5/Mycat-server-1

mysql中间件分享(Mysql-prxoy,Atlas,DBProxy,Amoeba,cobar,TDDL)

非 Y 不嫁゛ 提交于 2019-12-01 07:40:49
hello 各位小伙伴大家好,我是小栈君,这期我们分享关于mysql中间件的研究,也就是数据层的读写分离和负载均衡,希望能够在实际的应用中能够帮助到各位小伙伴。 下期我们将继续分享go语言的系列讲解,以及以后的生活中我们也将会分享系列课程包括大数据、人工智能、区块链等等,希望大家能够多多学习和分享给身边的小伙伴,我们一起进步和成长。 mysql-proxy MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤。 从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明MySQL Proxy更强大的一项功能是实现“读写分离”,基本原理是让主数据库处理事务性查询。 它的执行流程如图所示: 让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。 mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差。 官网: https://downloads.mysql.com/archives/proxy/ 下面介绍几款能代替其的mysql开源中间件产品,Atlas,cobar,tddl,让我们看看它们各自有些什么优点和新特性吧。

正确理解“读写分离”

こ雲淡風輕ζ 提交于 2019-11-30 08:41:30
很多人都把“读写分离”当做数据库性能优化的代名词。其实不然,“读写分离”并不是万能的,它只能解决某一部分性能问题。下面我写写我的理解笔记。 我们要优化数据库,提升性能,首先要对数据库的瓶颈进行分析。然后做出正确的优化方式。 那么什么是“读写分离”呢? 其实就是数据库集群,分成 主库 和 从库。 主库作为写操作的数据库,多个从库作为读操作的数据库。主库和从库通过同步机制进行同步,这样的集群叫做“分组”。 “读写分离”大法解决什么性能瓶颈呢?当然是读数据库的瓶颈咯!因为锁的从在,如果在单一数据库上,就会出现写的时候不能读,读的时候不能写。那这样就会存在阻塞,对于一些场景来说这是灾难性的。为了解决这个问题,还能提升性能,我们都需要这样一个“分组框架”。 集群分组存在几个问题我们需要考量: 主从同步的问题 读线程池和写线程池独立(想想都觉得难,太难了) 还有要是线程池故障了怎么办 要是数据量太大呢,那成本就... 既然如此之“南”,那么问题来了,有没有更优秀的办法解决这个瓶颈呢?当然有了,骚年你何不用缓存啊?、 由于缓存是缓存在内存中的,你读的性能肯定要比存在磁盘里强的多吧。 而且开发起来容易很多吧 成本肯定要比你多个数据库少的多吧 当然缓存也有瓶颈; 数据量太大怎么办? 万一坏掉了怎么办? 咋办?用分布式啊! 来源: CSDN 作者: Stephen_轩 链接: https://blog

Mycat 读写分离+分库分表

坚强是说给别人听的谎言 提交于 2019-11-27 19:15:24
上次进过GTID复制的学习记录,已经搭建好了主从复制的服务器,现在利用现有的主从复制环境,加上正在研究的Mycat,实现了主流分布式数据库的测试 Mycat就不用多介绍了,可以实现很多分布式数据库的功能,极大的减轻数据库服务器的压力,包括读写分离以及分库分表,本测试对这两种功能都进行了测试,进行相应记录 本文以Mycat官方给出的例子来进行解释总结 首先来看分库分表,分库分表一般来说都是一起说的,但是实际上分库跟分表是有区别的,简单来说有垂直和水平两种方式,垂直就是将表按字段进行拆分,水平就是将表按照数据分布来做行拆分。具体的肯定还是有区别,本文不再进行阐述,主要介绍按照字段的分布进行数据行的拆分 本身理解来说Mycat实现的应该是分库,也就是将一个表的行分开存储到不同的数据库中,这里不同的数据库可以有一下两种 1)不同的数据库服务器上的 两个数据库(此时db的名字可以相同,也可以不同) 2)相同的数据库服务器上的两个数据库(此时db的名字肯定是不同的) 当然对于实际使用分库来说肯定是使用不同的数据库服务器的,而且大多数都是在不同的服务器上使用相同的名字,这样能够比较正式的做法 分表的关键部分在mycat的配置文件schema.xml中,该文件中定义了数据库服务器,表的拆分规则等等重要信息 <table name="employee" primaryKey="ID"

一位云架构师用服务打动客户的故事之七「腾讯云·如何在临场用服务拿下甲方Boss认可?」

こ雲淡風輕ζ 提交于 2019-11-25 22:30:56
距离上一篇文章有很久了,确实一直想保持这种节奏,但一直出现‘脱更’的情况实属无奈。除个人工作的调整之外更多是因为到处出差‘飞’的状态。 时间越久,越是发现技术和沟通的两把武器,技术在技术人员身上是没有问题的,但是在沟通上问题极大。虽然说‘自古套路得人心’,但初心总归是好的。 在国内,目前有非常的做云计算服务的公司,今年格外多。尤其是伴随华为云发力、AWS发力和各类公有云在基础架构上的‘白菜价’上,对‘迁移、上云服务、对持续运维服务’上有简单而又粗暴的需求。 因为信息敏感问题,最终用户以“用户”简称、自己的公司以“公司”简称。如果您是我文章中提到公司的管理者,且认为文章表达措辞不当,请及时联系我进行删除或者修改 邮件联系方式:allen_junjun@hotmail.com 此次交流,侧重与业务线的交流和沟通,这里不会分享技术原理。文章已通过内部团队脱敏审核,请大家放心阅读:) 分享形式将会使用‘对话形式’,最大化的还原我作为偏业务线(架构师)临场与客户沟通时候的心理变化以及应对策略 如何与不懂技术的强势甲方boss沟通并获得认可? 本次交流重点简述 > 一次救场的沟通记录 (此次分享内容) > 顾问式销售的三把‘武器’ > 服务产品的博弈 ☆首先描述下背景(分享会首次使用对话的方式还原场景) 讲起来也挺有意思,当天个人行程是下午7点的飞机(飞往古城西安),因为需要出差四天