Mycat主要有两个功能,分库分表以及读写分离。在这里主要对读写分离功能进行介绍。
一、安装包下载
1、Mycat安装包下载
官网地址
或者执行命令
wget http://dl.mycat.io/1.6.7.4/Mycat-server-1.6.7.4-test-20191113141017-linux.tar.gz
2、JDK1.8安装包下载
官网地址
需要登录Oracle网站才可下载
二、安装JDK环境
1、将下载好的 JDK进行解压。
tar xf jdk-8u111-linux-x64.tar.gz -C /usr/local/
2、进入 /usr/local/,对解压后的目录建立软连接。
cd /usr/loca/
ln -sv jdk1.8.0_111/ java
3、编辑 /ect/profile 文件,添加 jdk环境变量并重新加载。
vim /etc/profile
##
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=/usr/local/java/lib:/jre/lib
export PATH=$PATH:$JAVA_HOME:$JRE_HOME:$CLASSPATH
:wq
source /etc/profile
4、查看jdk版本
java -version
三、安装Mycat
mycat安装非常简单,解压安装包后就能启动。主要是对配置文件的调整。本篇博文只是介绍它的读写分离功能,所以只需要调整server.xml和schema.xml文件即可。
1、解压 Mycat 安装包
tar xf Mycat-server-1.6.7.4-test-20191113141017-linux.tar.gz -C /usr/local/
2、server.cml文件配置,位于安装目录 /usr/local/mycat/conf/ 下,此文件主要定义连接mycat用户的配置,权限规则。我们可以按需求添加用户及访问权限。通常对以下参数进行修改即可。(修改前请备份)
<user name="root" defaultAccount="true"> ##root用户
<property name="password">123456</property> ##设置密码
<property name="schemas">test</property> ##数据库名称,多个数据库以逗号分隔
<property name="defaultSchema">test</property> ##默认数据库
<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<user name="user"> ##user用户
<property name="password">userpasswd</property> ##用户密码
<property name="schemas">test</property> ##用户可以访问到的数据库,多个数据库一逗号分隔。
<property name="readOnly">true</property> ## 设置只读权限
<property name="defaultSchema">test</property> ##默认数据库
</user>
如若拷贝使用,请删除#号以及后面文字。
3、配置schema.xml文件,位于 /usr/local/mycat/conf/ 下,此文件涉及较多,我们只做读写分离,可以删除多余选项,只保留配置读写分离段即可。(修改前请备份)
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="test" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> </schema>
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="172.26.208.100:3306" user="root" password="111111">
<readHost host="R1" url="172.26.208.101:3306" user="root" password=" 111111" />
</writeHost>
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
</mycat:schema>
数据库及读写节点可根据自身环境进行添加。此处用于演示安装,只采用一主一从模式。
参数解析
name 指定dataHost的名字
maxCon 指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的writeHost、 readHost 标签都会使用这个属性的值来实例化出连接池的最大连接数。
minCon 指定每个读写实例连接池的最小连接,初始化连接池的大小。
balance 负载均衡类型:
(1)balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。
(2)balance=“1”,全部的 readHost 与 stand by writeHost 参与 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 没有。
switchType -1表示不自动切换 1自动切换,默认值。 基于 MySQL 主从同步的状态决定是否切换
host 用于标识不同实例,一般 writeHost 我们使用M1,readHost 我们用S1。
url 后端实例连接地址,如果是使用 native 的 dbDriver,则一般为 address:port 这种形式。用 JDBC 或其他的dbDriver,则需要特殊指定。当使用 JDBC 时则可以这么写:jdbc:mysql://localhost:3306/。
user 后端存储实例需要的用户名字
password 后端存储实例需要的密码
weight 权重 配置在 readhost 中作为读节点的权重(1.4 以后)
usingDecrypt 是否对密码加密默认 0 否 如需要开启配置 1,同时使用加密程序对密码加密
注:参数详解为引用博文,原文链接:https://www.cnblogs.com/icebutterfly/p/9505624.html 如若侵权,联系既删
四、启动测试
1、启动服务
cd /usr/local/mycat
./bin/mycat start
2、查看端口,能够看到有两个端口已经启动, 8066 9066。8066 为应用端口,前端程序连接使用。 9066为管理端口,可以通过 9066 查看后端数据库节点的工作状态,以及执行一下系统命令。
3、可以通过日志文件查看mycat读写分离的工作方式,日志目录在 /usr/local/mycat/logs/ 下。
流水文档 仅供参考
生产使用 亲测可行