MySQL集群之Mycat实现读写分离

mycat工作原理

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

在这里插入图片描述

实验环境下,准备四台主机,分别是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
在这里插入图片描述
重启服务:systemctl restart mysqld

登录mysql 查询show master logs;
记录二进制文件;binlog.000002 | 156
在这里插入图片描述
创建账号 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

在这里插入图片描述

**重启服务:**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 查看状态是否开启

在这里插入图片描述

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

在这里插入图片描述

在28上 可以查询到:实现了主从;
在这里插入图片描述
第二步:设置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是最重要的文件
在这里插入图片描述
为了让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)

启动成功 可以看到
在这里插入图片描述
**mycat的端口号默认是:**8066

在8主机 mycat上打开:修改第一个文件vim /apps/mycat/conf/server.xml 将端口号改成3306
在这里插入图片描述
删除这后面的注释;
在这里插入图片描述
修改一下密码:
在这里插入图片描述
接着修改第二个文件:vim /apps/mycat/conf/schema.xml 实现读写分离策略

注意;1是我们开始导入文件的名字,2是我们作为主从的两台的ip
在这里插入图片描述
脚本:

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

重启mycat数据库 mycat restart

这个时候查看端口号;3306已开启
在这里插入图片描述
接着在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 -uroot -pmagedu -h 10.0.0.8 登录 访问:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
写操作是在主节点上,读操作是在从节点上
示例 select @@server_id; 读取到的是主节点28的ip
在这里插入图片描述
这个读取也是发生在从节点上;select * from teachers;
在这里插入图片描述
在28上可以查看工作日志,需要先开启general
show variables like ‘general%’;
set global general_log=1;
设置完成后,如下图显示
在这里插入图片描述
28上查看 tail -f /var/lib/mysql/slave.log 看到的是查询的操作;
在这里插入图片描述
而在18主节点上 也开启
show variables like ‘general%’;
set global general_log=1;
(需要注意的是每次mysql服务停止后 这里也会off 要重新打开)
在这里插入图片描述
在这里插入图片描述
在没有读写操作的时候,可以看到如图提示,这是健康性检查(心跳检查),只有显示Query 表示连接正常;
在这里插入图片描述
实验操作 :写操作

更改3号信息
在这里插入图片描述
执行 update students set age=@@server_id where stuID=3;
在这里插入图片描述
更改后的值:
在这里插入图片描述
在18主节点上可以看到更改的操作
在这里插入图片描述
实验操作: 读操作

在客户端查询表格信息: select * from students;
在这里插入图片描述
在28从节点上可以看到记录
在这里插入图片描述
实验操作:停止从节点服务

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

谢谢观赏

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值