个人随笔
目录
MyCat读写分离环境搭建
2020-06-15 23:22:52

读写分离的基础是主从复制,在我的笔记MySQL5.7主从复制环境搭建以及介绍了搭建的方法,下面我们来在此基础上搭建MyCat的读写分离环境,本片笔记只是简单的环境搭建,并不涉及原理以及更多高级的配置。

一、读写分离实现方式

实现方式有很多,但是不外乎分为内部配置和使用中间件,下面列举几个常用的方法:

1.配置多个数据源,根据业务需求访问不同的数据,指定对应的策略:增加,删除,修改操作访问对应数据,查询访问对应数据,不同数据库做好的数据一致性的处理。由于此方法相对易懂,简单,不做过多介绍

2.动态切换数据源,根据配置的文件,业务动态切换访问的数据库:此方案通过Spring的AOP,AspactJ来实现动态织入,通过编程继承实现Spring中的AbstractRoutingDataSource,来实现数据库访问的动态切换,不仅可以方便扩展,不影响现有程序,而且对于此功能的增删也比较容易。

3.通过mycat来实现读写分离:使用mycat提供的读写分离功能,mycat连接多个数据库,数据源只需要连接mycat,对于开发人员而言他还是连接了一个数据库(实际是mysql的mycat中间件),而且也不需要根据不同业务来选择不同的库,这样就不会有多余的代码产生。

这里用第三种方式实现。

二、开始搭建

环境
centos7、MySQL5.7、mycat1.6

1、安装jdk运行环境

Mycat是java语言编写的,需要jdk的运行环境。

  1. yum install java-1.8.0-openjdk.x86_64

2、下载Mycat

我这里是先进入/usr/local 目录下,然后用wget命令下载。

  1. wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

版本大家可以取官网(http://www.mycat.org.cn/) 上找。

3、解压

  1. tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

4、修改配置文件

这里主要修改两个,在conf目录下。

server.xml
schema.xml

server.xml主要配置连接的用户密和虚拟库库,schema.xml配置的是对应的真实库,默认超级多内容,但是这篇博文不深入了解,直接把全部无关的配置都删掉,用下面的配置即可。

server.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mycat:server SYSTEM "server.dtd">
  3. <mycat:server xmlns:mycat="http://io.mycat/">
  4. <user name="root">
  5. <property name="password">123456</property>
  6. <property name="schemas">test</property>
  7. </user>
  8. </mycat:server>

user 用户配置节点
—name 登录的用户名,也就是连接Mycat的用户名
—password 登录的密码,也就是连接Mycat的密码
—schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs

schema.xml

  1. <?xml version="1.0"?>
  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  3. <mycat:schema xmlns:mycat="http://io.mycat/">
  4. <schema name="test" checkSQLschema="false" sqlMaxLimit="100">
  5. <table name="user" dataNode="db_node"/>
  6. </schema>
  7. <dataNode name="db_node" dataHost="db_host" database="test" />
  8. <dataHost name="db_host" maxCon="1000" minCon="10" balance="3"
  9. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  10. <heartbeat>select user()</heartbeat>
  11. <writeHost host="hostM1" url="192.168.157.6:3306" user="root" password="123456">
  12. <readHost host="hostS1" url="192.168.157.7:3306" user="root" password="123456"/>
  13. </writeHost>
  14. </dataHost>
  15. </mycat:schema>

对于<dataHost>标签,它里面重要的参数列举如下:

balance指的负载均衡类型,目前的取值有4种:

  1. balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
  2. balance=”1”,全部的readHost与stand bywriteHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
  3. balance=”2”,所有读操作都随机的在writeHost、readhost上分发。
  4. balance=”3”,所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力
    注意:balance=3只在1.4及其以后版本有,1.3没有。

writeType属性:
1.writeType=”0”,所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties.
2.writeType=”1”,所有写操作都随机地发送到配置的writeHost,1.5以后废弃不推荐。

switchType指的是切换的模式,目前的取值也有4种:

  1. switchType=’-1’ 表示不自动切换
  2. switchType=’1’ 默认值,表示自动切换
  3. switchType=’2’ 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
  4. switchType=’3’基于MySQLgalary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’。

5、启动

当然我们可以进入到log4j2的配置文件将日志级别改为debug,这样我们就可以看到详细的执行过程啦。

  1. cd /usr/local/mycat/bin/
  2. ./mycat start

这里你可能会发现启动不了,看日志

  1. vi /usr/local/mycat/logs/wrapper.log

会看到如下错误;

  1. ERROR | wrapper | 2020/06/16 06:08:58 | Startup failed: Timed out waiting for a signal from the JVM.
  2. ERROR | wrapper | 2020/06/16 06:08:58 | JVM did not exit on request, terminated
  3. INFO | wrapper | 2020/06/16 06:08:58 | JVM exited on its own while waiting to kill the application.
  4. STATUS | wrapper | 2020/06/16 06:08:58 | JVM exited in response to signal SIGKILL (9).

超时?好吧去修改配置文件。

  1. vi /usr/local/mycat/conf/wrapper.conf

最后加入:

  1. wrapper.startup.timeout=300

保存,再启动,终于可以了,用navicat测试,发现正常连接。


初次搭建就到这里了,后面会有详细的笔记记录以及怎么用springboot测试!

 440

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2