MySQL集群之Mycat实现读写分离

发布时间:2024-02-06 19:00

mycat工作原理

实现mysql的读写分离:
Mycat 可以简单概括为
一个彻底开源的,面向企业应用开发的大数据库集群
支持事务、ACID、可以替代MySQL的加强版数据库
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品

MySQL集群之Mycat实现读写分离_第1张图片

实验环境下,准备四台主机,分别是3台centos8 一台centos7
设置如下:
mycat:10.0.0.8
master:10.0.0.18
slave:10.0.0.28
client:10.0.0.7
设置根据个人习惯,如果觉得这样比较花里胡哨,可以直接跳过;

在这里插入图片描述
第一步,将18和28主机搭建主从

在10.0.0.18主节点上:vim /etc/my.cnf、

[mysqld]
server-id=18
MySQL集群之Mycat实现读写分离_第2张图片
重启服务:systemctl restart mysqld

登录mysql 查询show master logs;
记录二进制文件;binlog.000002 | 156
MySQL集群之Mycat实现读写分离_第3张图片
创建账号 create user repluser@‘10.0.0.%’ identified by ‘123456’;
授权: grant replication slave on . to repluser@‘10.0.0.%’;
在10.0.0.28从节点上 vim /etc/my.cnf

[mysqld]
server-id=28

MySQL集群之Mycat实现读写分离_第4张图片

**重启服务:**systemctl enable --now mysqld

进入mysql
执行
CHANGE MASTER TO
MASTER_HOST=‘10.0.0.18’,
MASTER_USER=‘repluser’,
MASTER_PASSWORD=‘123456’,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘binlog.000002’,
MASTER_LOG_POS=156;

mysql> CHANGE MASTER TO
    -> MASTER_HOST='10.0.0.18', #18是主节点的ip
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='123456',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='binlog.000002',  #主节点的二进制文件
    -> MASTER_LOG_POS=156;

然后 start slave;
查看 show slave status\G 查看状态是否开启

MySQL集群之Mycat实现读写分离_第5张图片

在18主机上 将数据库导入 (一方面是测试主从,另外一方面是为了最后mycat验证操作,这里按个人条件,不同的sql文件都可以的)

MySQL集群之Mycat实现读写分离_第6张图片

在28上 可以查询到:实现了主从;
MySQL集群之Mycat实现读写分离_第7张图片
第二步:设置mycat

首先要安装java
yum -y install java
java的版本 最好是1.8.0的 方便测试;

[root@mycat ~]#java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)

下载安装mycat 版本最好是: 1.6.7.4
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

建立文件夹进行解压缩: mkdir /apps

将文件解压缩到指定目录下;
tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps/
在这里插入图片描述
解压好以后查看:mycat是最重要的文件
MySQL集群之Mycat实现读写分离_第8张图片
为了让mycat使用方便,使其生成一个path变量:
echo ‘PATH=/apps/mycat/bin:$PATH’ > /etc/profile.d/mycat.sh
. /etc/profile.d/mycat.sh
命令如下:

[root@mycat ~]#echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh^C
[root@mycat ~]#. /etc/profile.d/mycat.sh

提醒:安装后 查看内存是否足够: 大于2G(不然无法开启mycat)

启动成功 可以看到
MySQL集群之Mycat实现读写分离_第9张图片
**mycat的端口号默认是:**8066

在8主机 mycat上打开:修改第一个文件vim /apps/mycat/conf/server.xml 将端口号改成3306
MySQL集群之Mycat实现读写分离_第10张图片
删除这后面的注释;
MySQL集群之Mycat实现读写分离_第11张图片
修改一下密码:
MySQL集群之Mycat实现读写分离_第12张图片
接着修改第二个文件:vim /apps/mycat/conf/schema.xml 实现读写分离策略

注意;1是我们开始导入文件的名字,2是我们作为主从的两台的ip
MySQL集群之Mycat实现读写分离_第13张图片
脚本:

"1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
"http://io.mycat/">
"TESTDB" checkSQLschema="false" sqlMaxLimit="100"
dataNode="dn1">
</schema>
"dn1" dataHost="localhost1" database="hellodb" />
"localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
select user()</heartbeat>
"host1" url="10.0.0.18:3306" user="root"
password="123456">
"host2" url="10.0.0.28:3306" user="root"
password="123456" />
</writeHost>
</dataHost>
</mycat:schema>

重启mycat数据库 mycat restart

这个时候查看端口号;3306已开启
MySQL集群之Mycat实现读写分离_第14张图片
接着在18master上注册一个root账号:
create user root@‘10.0.0.%’ identified by ‘123456’;
在这里插入图片描述
注册
grant all on . to root@‘10.0.0.%’;
在这里插入图片描述
在28上查看select user,host from mysql.user;
MySQL集群之Mycat实现读写分离_第15张图片
第三步:验证结果

在客户端; mysql -uroot -pmagedu -h 10.0.0.8 登录 访问:
MySQL集群之Mycat实现读写分离_第16张图片
MySQL集群之Mycat实现读写分离_第17张图片
MySQL集群之Mycat实现读写分离_第18张图片
写操作是在主节点上,读操作是在从节点上
示例 select @@server_id; 读取到的是主节点28的ip
MySQL集群之Mycat实现读写分离_第19张图片
这个读取也是发生在从节点上;select * from teachers;
MySQL集群之Mycat实现读写分离_第20张图片
在28上可以查看工作日志,需要先开启general
show variables like ‘general%’;
set global general_log=1;
设置完成后,如下图显示
MySQL集群之Mycat实现读写分离_第21张图片
28上查看 tail -f /var/lib/mysql/slave.log 看到的是查询的操作;
MySQL集群之Mycat实现读写分离_第22张图片
而在18主节点上 也开启
show variables like ‘general%’;
set global general_log=1;
(需要注意的是每次mysql服务停止后 这里也会off 要重新打开)
MySQL集群之Mycat实现读写分离_第23张图片
MySQL集群之Mycat实现读写分离_第24张图片
在没有读写操作的时候,可以看到如图提示,这是健康性检查(心跳检查),只有显示Query 表示连接正常;
MySQL集群之Mycat实现读写分离_第25张图片
实验操作 :写操作

更改3号信息
MySQL集群之Mycat实现读写分离_第26张图片
执行 update students set age=@@server_id where stuID=3;
在这里插入图片描述
更改后的值:
MySQL集群之Mycat实现读写分离_第27张图片
在18主节点上可以看到更改的操作
MySQL集群之Mycat实现读写分离_第28张图片
实验操作: 读操作

在客户端查询表格信息: select * from students;
MySQL集群之Mycat实现读写分离_第29张图片
在28从节点上可以看到记录
MySQL集群之Mycat实现读写分离_第30张图片
实验操作:停止从节点服务

当从节点停止服务 客户端上的查询服务无法执行 systemctl stop mysqld
在客户端执行查询操作,会提示被拒绝
在这里插入图片描述
但是:过一会会自动链接在主节点上;
执行select @@server_id 查看到的是master的ip;
MySQL集群之Mycat实现读写分离_第31张图片
信息可以再次查看,该信息来自主节点:
MySQL集群之Mycat实现读写分离_第32张图片
重新开启从节点后,执行select @@server_id查询到的ip重新变回 了从节点的ip
(注意:开启关闭节点是在 28和18上执行,不是在客户端)
MySQL集群之Mycat实现读写分离_第33张图片
而如果主节点 停止 则读可以,写无法执行
update students set age=@@server_id where stuID=5;
在这里插入图片描述
此时读操作无法转移到从节点,必须重启主节点的服务后,修改才能完成
MySQL集群之Mycat实现读写分离_第34张图片
至此 mycat实现了读写分离,设置完成

谢谢观赏

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号