mycat之读写分离

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: mycat,读写分离,主从切换,高可用

主:10.10.10.100
从:10.10.10.200

1,先做好主从同步

2,mycat安装配置:

[root@master ~]# tar xvf Mycat-server-1.6-release-linux.tar
[root@master ~]# mv mycat /usr/local/mycat
[root@master ~]# tar xvf jdk-7u79-linux-x64.tar.gz
[root@master ~]# mv jdk1.7.0_79 /usr/local/
[root@master conf]# cd /usr/local/mycat/conf
[root@master conf]# vi wrapper.conf               #修改java路径
       wrapper.java.command=/usr/local/jdk1.7.0_79/bin/java
[root@master logs]# cat ~/.bash_profile  |grep mycat
PATH=$PATH:$HOME/bin:/usr/local/mycat/bin

3,修改配置文件如下:

[root@master conf]# cat schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<schema name="TESTDB2" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="guo" />                                        //dn1和dn2这个名字可以随意,不用修改。这个表示,数据库TESTDB中只有一个实例guo,TESETDB2中有一个实例jia
<dataNode name="dn2" dataHost="localhost1" database="jia" />                                        //这种是适用于一个mysql中有多个物理数据库都要进行读写分离的情况。
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="master" url="10.10.10.100:3306" user="root" password="123456">                        
   <!-- can have multi read hosts -->
   <readHost host="slave" url="10.10.10.200:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>

guo:这个是在真实数据库中的数据库实例,如果有多个库要实现读写分离,多配置几行。dn1和dn2两个名称随意配置

balance=0 不开启读写分离机制,所有读操作都发送到当前可用的writehost
balance=1 全部的读节点与备用的写节点参与select语句的负载均衡
balance=2 所有读操作都随机的在readhost和writehost上分发

writeType,负载均衡类型,目前的取值有3种:
writeType="0", 所有写操作发送到配置的第一个writeHost。
writeType="1",所有写操作都随机的发送到配置的writeHost,该参数1.5版本以后废弃不用了。
writeType="2",不执行写操作。

switchType=-1 表示主从不自动切换
switchType=1  默认值,自动切换
switchType=2  基于MySQL 主从同步的状态决定是否切换,心跳语句为 show slave status
MyCAT心跳检查询句配置为 show slave status ,dataHost 上定义两个新属性: switchType="2" 与slaveThreshold="100",此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制,Mycat心跳机制通过检测 show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running","Slave_SQL_Running" 三个字段来确定当前主从同步的状态及Seconds_Behind_Master主从复制时延,当Seconds_Behind_Master>slaveThreshold时,读写分离筛选器会过滤掉此Slave机器,防止读到很久以前的旧数据,当主节点宕机后,切换逻辑会检查Slave上的Seconds_Behind_Master是否为0,为0时则表示主仅同步,可安全切换,否则不会切换。

writeHost host="hostM1":host和主机名一致


修改server.xml配置文件:
[root@master conf]# tail -12 server.xml
       </system>
       <user name="test">
               <property name="password">test</property>
               <property name="schemas">TESTDB,TESTDB2</property>
       </user>
       <!-- <cluster> <node name="cobar1"> <property name="host">127.0.0.1</property>
               <property name="weight">1</property> </node> </cluster> -->
       <!-- <quarantine> <host name="1.2.3.4"> <property name="user">test</property>
               </host> </quarantine> -->

mycat登录的用户名密码和mycat连接进去显示的逻辑数据库名
[root@master bin]#  mysql -utest -ptest -h10.10.10.100 -P9066

4,启动mycat后验证读写分离:

[root@master bin]# ./mycat start
[root@master bin]#  mysql -utest -ptest -h10.10.10.100 -P9066

image
RS_CODE 值为1表示正常情况

5,测试:

打开mycat的log4j.xml文件,修改日志级别info为debug,重启mycat
[root@master bin]#  mysql -utest -ptest -h10.10.10.100 -P8066
mysql> create table user(id int primary key, name varchar(20));
mysql> insert into user values(100000,test);                                
mysql>select * from user;

image

6,mycat管理:

目前mycat有两个端口,8066数据端口,9066管理端口。
[root@master bin]#  mysql -utest -ptest -h10.10.10.100 -P9066
msyql> show @@help;
msyql> show @@heartbeat;                //RS_CODE为1表示心跳正常
msyql> show @@cache;                //MAX为缓存的最大值(记录个数),CUR为当前已经在缓存中的数量,ACESS为缓存读次数,HIT为缓存命中次数,PUT                                         
                                               为写缓存次数,LAST_XX为最后操作时间戳,比较重要的几个参数:CUR:若CUR接近MAX,而PUT大于MAX很多,则表明MAX需要增大,HIT/ACCESS为缓存命中率,这个值越高越好。
msyql> show @@datasource;
mysql> show @@datanode;                 //包括每个数据节点当前活动连接数(active),空闲连接数(idle)以及最大连接数(maxCon) size,EXECUTE参数表示从该节点获取连接的次数,次数越多,说明访问该节点越多。
mysql> show @@version;
mysql> show @@connection;
mysql> show @@backend;                //显示mycat后端连接状态
mysql> show @@threadpool;                //当前线程池的执行情况,是否有积压(active_count)以及task_queue_size,后者为积压的待处理的SQL,若积压数目一直保值,则说明后端物理连接可能不够或者SQL执行比较缓慢。
mysql> Kill @@connection                //杀掉客户端的连接,参数为连接的ID值,通过show @@connection,可以展示当前连接到MyCAT的所有客户端进程,若某个进程异常,则可以通过该命令杀掉连接,如KILL @@CONNECTION 1;
mysql> show @@processor;                      //显示当前processors的处理情况,包括每个processor的IO吞吐量(NET_IN/NET_OUT)、IO队列的积压情况(R_QUEY/W_QUEUE),Socket Buffer Pool的使用情况 BU_PERCENT为已使用的百分比、BU_WARNS为Socket Buffer Pool不够时,临时创建的新的BUFFER的次数,若百分比经常超过90%并且BU_WARNS>0,则表明BUFFER不够,需要增大,参见性能调优手册。

7,主从切换:

  • 如果只有一个writeHost,主挂了,整个mysql就无法使用了,读也不能用,mycat能够进行自动主从切换的前提是必须要有2个writeHost。
    image

8,主从切换验证:

  • 停止主库,然后mycat登录进去看看是否能够进行读写操作。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 关系型数据库 MySQL
MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)
MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)
844 0
|
4月前
|
SQL 存储 关系型数据库
Mycat 实现分库分表及读写分离
Mycat 实现分库分表及读写分离
72 0
|
6月前
|
中间件 数据库
mycat2.X读写分离
mycat2.X读写分离
137 9
|
6月前
|
SQL 缓存 关系型数据库
【Mycat】详解分库分表
【Mycat】详解分库分表
91 0
|
运维 关系型数据库 MySQL
MyCat-架构剖析-MyCat 主从切换实现 | 学习笔记
快速学习 MyCat-架构剖析-MyCat 主从切换实现
MyCat-架构剖析-MyCat 主从切换实现 | 学习笔记
|
XML SQL 负载均衡
MyCat - 高级 - 读写分离 - 一主一从读写分离配置 | 学习笔记
快速学习MyCat - 高级 - 读写分离 - 一主一从读写分离配置
MyCat - 高级 - 读写分离 - 一主一从读写分离配置 | 学习笔记
|
SQL 关系型数据库 MySQL
Mycat的读写分离
MySQL主从复制原理
86 1
|
SQL 关系型数据库 MySQL
【MySQL】主从复制 | 读写分离 简单配置
【MySQL】主从复制 | 读写分离 简单配置
230 0
|
SQL 存储 cobar
MyCat分库分表
分库分表 1.数据量太大,SQL查询慢怎么办? 从sql语句入手 exist和in in 和 not in like 从数据库设计入手 加索引(不是越多越好) 尽量多考虑使用数值型
275 0
|
负载均衡 关系型数据库 MySQL
MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离 | 学习笔记
快速学习 MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离
MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离 | 学习笔记