Mycat读写分离

一:Mycat的架构其实很好理解,Mycat是数据库代理中间件,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。如下案例是做一个主从、读写分离,简单分库分表的示例。结构如下图:


image.png

1:pc73 192.168.4.73 mycat服务器,连接数据库时,连接此服务器
pc70 192.168.4.70 物理数据库1,真正存储数据的数据库,这里为Master主数据库
pc71 192.168.4.71 物理数据库2,真正存储数据的数据库,这里为Slave主数据库
2.Mysql安装及主从复制部署
3.Mycat安装

wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

tar -zvxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

mycat安装完成后,目录如下:

bin mycat 命令,启动、重启、停止等
catlet catlet为Mycat的一个扩展功能
conf Mycat 配置信息,重点关注
lib Mycat引用的jar包,Mycat是java开发的
logs 日志文件,包括Mycat启动的日志和运行的日志。


2019-10-25 15-36-33屏幕截图.png

Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:
server.xml Mycat的配置文件,设置账号、参数等
schema.xml Mycat对应的物理数据库和数据库表的配置
rule.xml Mycat分片(分库分表)规则

Mycat相关配置
server.xml文件其实跟读写分离策略关系不大,但是需要用此文件来配置连接MyCat的用户及权限等,因此在这里简单说明。


2019-10-25 19-25-00屏幕截图.png

修改schema.xml

2019-10-25 19-26-54屏幕截图.png

参数 说明
schema 数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应
dataNode 分片信息,也就是分库相关配置
dataHost 物理数据库,真正存储数据的数据库

name属性唯一标识dataHost标签,供上层的标签使用。
maxCon属性指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的
writeHost、readHost标签都会使用这个属性的值来实例化出连接池的最大连接数。
minCon属性指定每个读写实例连接池的最小连接,初始化连接池的大小。

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

balance="1": 读请求随机分发到当前writeHost对应的readHost和standby的writeHost上。即全部的readHost与stand by writeHost 参与
select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,
S2 都参与 select 语句的负载均衡

balance="2": 读请求随机分发到当前dataHost内所有的writeHost和readHost上。即所有读操作都随机的在writeHost、 readhost 上分发。

balance="3": 读请求随机分发到当前writeHost对应的readHost上。即所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,
writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

writeType="0" 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1" 所有写操作都随机的发送到配置的 writeHost。
writeType="2" 没实现。

switchType="-1": 不自动切换
switchType="1": 默认值,自动切换
switchType="2": 基于MySQL主从同步的状态来决定是否切换。需修改heartbeat语句(即心跳语句):show slave status
switchType="3": 基于Mysql Galera Cluster(集群多节点复制)的切换机制。需修改heartbeat语句(即心跳语句):show status like 'wsrep%'

将mycat的日志输出级别改完debug(默认是info级别),在conf/log4j2.xml里配置,然后去查询去添加数据在/logs/mycat.log日志文件里查看sql被路由到了
哪个服务器上

vim /data/mycat/conf/log4j2.xml

改成

  • 优先级从高到低依次为:OFF FATAL ERROR WARN INFO DEBUG TRACE ALL
  • ALL 最低等级的 用于打开所有日志记录
  • TRACE 很低的日志级别 一般不会使用
  • DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的 主要用于开发过程中打印一些运行信息
  • INFO 消息在粗粒度级别上突出强调应用程序的运行过程
  •    打印一些你感兴趣的或者重要的信息 这个可以用于生产环境中输出程序运行的一些重要信息
    
  •    但是不能滥用 避免打印过多的日志
    
  • WARN 表明会出现潜在错误的情形 有些信息不是错误信息 但是也要给程序员的一些提示
  • ERROR 指出虽然发生错误事件 但仍然不影响系统的继续运行
  •    打印错误和异常信息 如果不想输出太多的日志 可以使用这个级别
    
  • FATAL 指出每个严重的错误事件将会导致应用程序的退出
  •    这个级别比较高了 重大错误 这种级别你可以直接停止程序了
    
  • OFF 最高等级的,用于关闭所有日志记录
  • 如果将log level设置在某一个级别上 那么比此级别优先级高的log都能打印出来
  • 例如 如果设置优先级为WARN 那么OFF FATAL ERROR WARN 4个级别的log能正常输出
  • 而INFO DEBUG TRACE ALL级别的log则会被忽略

你可能感兴趣的:(Mycat读写分离)