Mycat mysql数据库读写分离
Mycat 基本概念
Mycat 介绍
提示:Mycat 官方 http://www.mycat.io/
Mycat 是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的 Proxy Server,前端客户端可以把它 看作是一个 DB Proxy,用应用程序接口对其进行访问,其后端可以用 MySQL 原生协议与多个 MySQL 服 务器通信,也可以用 JDBC 协议与大多数主流数据服务器通信,其核心功能是分库分表,即将一个大表水 平分割为 N 个小表,存储在后端 MySQL 服务器上或其它数据库里,对数据进行分片处理后,从原有的一 个库,被切分为多个分片数据库,所有的分片数据库集群架构组成了一个完整的数据库存储系统。
Mycat使用mysql的通讯协议模拟成一个mysql服务器,并建立了完整的Schema(数据库),Table(数 据表),User(用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点上的真实物理库中,这样一 来,所有能使用MySQL客户端以及编程语言都能将Mycat当成是MySQLserver来使用。。
一、安装
关闭 防火墙
systemctl stop firewalld
systemctl disable firewalld
Mycat下载包,提前安装 java jdk:
查看java环境是否安装好!
java -version
wget http://dl.mycat.org.cn/1.6.7.6/20220518163531/Mycat-server-1.6.7.6-release-20220518222606-linux.tar.gz
1.解压mycat到/opt
tar zxf Mycat-server-1.6.7.6-release-20220518222606-linux.tar.gz -C /opt/
设置环境变量
vim /etc/profile
添加环境变量:
export MYCAT_HOME=/opt/mycat
export PATH=$PATH:$MYCAT_HOME/bin
刷新环境变量:
source /etc/profile
修改配置文件:
vim /usr/mycat/conf/server.xml //用户账户与授权信息
虚拟用户 admin 密码 Abc123456 有权去使用 test逻辑库(必须存在)
然后注释掉 下面的 user
vim /usr/mycat/conf/schema.xml
来到第6行,在这里输入27dd,删除27行。因为不需要进行分片等操作所以删除。
0= 不开启读写分离
1=保留一个写节点
2=所有写节点都要额外去承担读请求
3=读就读写就是写
注意 如果是分片! 复制全部 如果没有分片 去掉红色的
这个代码 不能调颜色,我截屏你看清楚哦
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--数据库表-->
<schema name="test" checkSQLschema="false" sqlMaxLimit="100">
<table name="test1" dataNode="dn1,dn2" rule="mod-long" />
</schema>
<dataNode name="dn1" dataHost="pxc1" database="test" />
<dataNode name="dn2" dataHost="pxc2" database="test" />
<!--连接信息-->
<dataHost name="pxc1" maxCon="1000" minCon="10" balance="2"
writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!--读写节点配置-->
<writeHost host="w1" url="192.168.10.151:3306" user="admin"
password="Abc_123456">
<readHost host="w1r1" url="192.168.10.152:3306" user="admin" password="Abc_123456" />
<readHost host="w1r2" url="192.168.10.153:3306" user="admin" password="Abc_123456" />
</writeHost>
<!--冗余-->
<writeHost host="w2" url="192.168.10.152:3306" user="admin"
password="Abc_123456">
<readHost host="w2r1" url="192.168.10.152:3306" user="admin" password="Abc_123456" />
<readHost host="w2r2" url="192.168.10.151:3306" user="admin" password="Abc_123456" />
</writeHost>
</dataHost>
<dataHost name="pxc2" maxCon="1000" minCon="10" balance="2"
writeType="1" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!--读写节点配置-->
<writeHost host="w1" url="192.168.10.121:3306" user="admin"
password="Abc_123456">
<readHost host="w1r1" url="192.168.10.122:3306" user="admin" password="Abc_123456" />
<readHost host="w1r2" url="192.168.10.123:3306" user="admin" password="Abc_123456" />
</writeHost>
<!--冗余-->
<writeHost host="w2" url="192.168.10.122:3306" user="admin"
password="Abc_123456">
<readHost host="w2r1" url="192.168.10.121:3306" user="admin" password="Abc_123456" />
<readHost host="w2r2" url="192.168.10.123:3306" user="admin" password="Abc_123456" />
</writeHost>
</dataHost>
</mycat:schema>
然后 修改 rule.xml 文件
如果是阿里云 需要开放 8066和9066端口:
关闭SeLinux不然启动失败
配置权限
启动Mycat服务:
mycat start
或者
客户端登陆连接Mycat的8066端口实现读写分离
mysql -h192.168.10.131 -uadmin -pAbc_123456 -P8066
现在在Mycat上再打开一个终端连接9066端口,来验证读写分离
客户端会想mycat中tb1表分别插入数据和select数据,看写是否在master,读是否在slave上。
Mycat:
mysql -h192.168.10.131 -uadmin -pAbc_123456 -P9066
执行以下命令:
show @@datasource;
8066连接端口, 9066管理端口
主要是看:READ_LOAD(读负荷)与WRITE_LOAD(写负荷)
如果读写分离成功的话,写将会在master的写负荷上+1,读会再从的读负荷上+1
客户端插入和读取数据:
再Mycat的管理端口查看是否+1
ok 到这里就完成了