Mycat实现读写分离,主备热切换

实验环境:ubutu server 14

Master IP:172.16.34.212

Slave IP:172.16.34.34.156

Mycat server IP:172.16.34.219

不涉及过多理论,只有实现的过程。mysql读写分离和主备热切换,容灾,数据分片的实现手段目前比较流行的是Mycat。当然利用应用层代码去解决这些问题也是可以的。

1,首先到Github下载Mycat 1.6 版本的安装包,下载地址为:https://github.com/MyCATApache/Mycat-download

2,下载后解压到Mycat服务器某个目录

3,在主从复制的基础上去实现读写分离,主从复制可参考: http://www.cnblogs.com/NingKangMing/p/6110071.html

4,修改server.xml文件(此文件为Mycat的核心主配置文件,如user标签用于控制对外的可访问的用户及用户可访问的数据,是否只读等),我们配置一个euht用户,可访问数据库(schema.xml配置的逻辑数据库)为mycatdb,密码为123456,sql解析器为druidparser。默认端口8066。对外开放的用户名和密码为mycatuser,123456

<system>

<property name="defaultSqlParser">druidparser</property>

</system>

<user name="mycatuser">

<property name="password">123456</property>

<property name="schemas">mycatdb</property>

<property name="readOnly">false</property>

</user>

5,修改schema.xml文件,(schema.xml用于配置MyCat的读写分离、水平垂直折分集群,逻辑库、表、分片规则、DataNode以及DataSource),参考配置如下

<schema name="mycatdb" checkSQLschema="false"  dataNode="datanoode1"/>

<dataNode name="datanoode1" dataHost="virtualHost" database="euhtnms" />

<dataHost name="virtualHost" maxCon="50" minCon="5" balance="3"

                writeType="0" dbType="mysql" dbDriver="native" switchType="1" >

                <heartbeat>select 1</heartbeat>

                <writeHost host="whost1" url="172.16.34.212:3306" user="euht"  password="123456">

                <readHost host="rhost1" url="172.16.34.156:3306" user="euht" password="123456" />

             </writeHost>       

</dataHost>

配置说明:

Schema标签:name指明schema逻辑数据库的名称,checkSQLschema是否去除sql语句中的数据库名称,如果sql查询语句没有limit语句,sqlMaxLimit为查询语句加上limit。

dataNode标签:定义节点,指定数据虚拟服务器,数据库等属性

dataHost标签:定义具体的数据库实例,读写分离配置,心跳包语句。maxCon属性指定每个读写实例连接池的最大连接。minCon属性指定每个读写实例连接池的最小连接。balance属性,目前的取值有 4 种。

balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。

balance="1",所有读操作都随机的发送到readHost

balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。

balance="3", 所有读请求随机分发到 wiriterHost 对应的 readhost 执行

writeType属性,负载均衡类型,目前的取值有3种:

1. writeType=”0”, 所有写操作都发送到可用的writeHost上。

2. writeType=”1”,所有写操作都随机的发送到readHost。

3. writeType=”2”,所有写操作都随机的在writeHost、readhost分上发。

switchType 属性:

-1 表示不自动切换

1 默认值,自动切换

2 基于MySQL 主从同步的状态决定是否切换

writeHost,readHost,heartBeat标签,定义真实服务器的读写Host,heartBeat为心跳包语句。以上定义了一主一从的读写分离机制,writeHost下可以有多个readHost。

6,测试读写分离

进入bin目录启动mycat (确保配置的读写分离Host已经配置了主从数据同步)

Sudo ./mycat start

查看Mycat是否正常启动(查看logs的wrapper.log)

Mycat已经成功启动,下面测试读写分离的效果

连接上Mycat(根据server.xml配置的用户名和密码,我配置的是mycatuser,123456,Mycat运行默认端口为8066)

已经成功连接到Mycat,并发现有一个mycatdb的虚拟数据库,其背后有主从两台服务器。

我们在主从复制未关闭的情况下插入一条数据到euhtnms的testtb看能否成功。

Show tables;发现背后的数据库表,这说明我们的mycat已经成功的和主备数据库中的数据库连接上了。先在有主从复制的情况下插入一条数据,再选出来看看。

到其背后的两台服务器看数据是否正常

主数据库的数据正常通过mycat代理层插入了。

从服务器的数据通过主从复制同步过来了。

查看读写分离是否成功,先测试是否读一定是从我们配置的156服务器读,我们可以先到156停掉主从复制(stop slave)。然后再从mycat代理端插入数据

我们看到,刚插入的数据没被select 出来。这是因为我们把主从复制关掉了。代理层只是把数据写到主服务器212.从服务没进行数据同步,此时再读,由于读服务器是156,所以只能查出以前的数据。此时再把slave打开,可以从代理层看到所有数据了。当读服务器宕机变得不可用将会用主服务器去读,反之一样。(打开slave后从代理端读的效果如下)

 如果配置有双主结构,log_slave_updates 这个选项需要设置到myssql的my.cnf配置文件中

到此mycat的读写分离已经完成,当然这不是一个高可用的架构。要做到高性能,高可用,需要考虑很多因素.............有待更新。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Re: Mycat 实现 MySQL的分库分表、读写分离、主从切换 =============================# MyCAT 作用是能够代替昂贵的oracle的MySQL集群中间件。     1) 一个彻底开源的,面向企业应用开发的“大数据库集群”    2) 支持事务、ACID、可以替代Mysql的加强版数据库    3) 一个可以视为“MySQL”集群的企业级数据库,用来替代昂贵的Oracle集群(核心价值观) (即:可不用 Orcale数据库及RAC等,以此代替)    4) 一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server    5) 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品    6) 一个数据库中间件产品 # MyCAT 目标:    1) 低成本的将现有的单机数据库和应用,平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。从这一点介绍上来看,能满足数据库数据大量存储,提高了查询性能。    2) MyCat在大数据方面的运用不容小觑啊。 # MyCAT 特性    1) 支持 SQL 92标准    2) 支持Mysql集群,可以作为Proxy使用    3) 支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL Server使用    4) 支持galera for mysql集群,percona-cluster或者mariadb cluster, (提供高可用性数据分片集群)    5) 自动故障切换,高可用性(failover & HA)    6) 支持读写分离,支持Mysql双主多从,以及一主多从的模式    7) 支持全局表,数据自动分片到多个节点,用于高效表关联查询    8) 支持独有的基于E/R 关系的分片策略,实现了高效的表关联查询    9) 多平台支持,部署和实施简单 # MyCAT 架构    用户可以把MyCAT看作是一个数据库代理,用mysql客户端工具(如Navicat)和命令访问,其核心功能就是分库分表,即将一个大表水平分割为N个小表,真正的存储在后端Mysql服务器中或其它数据库中。      

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值