mysql中间件代理服务器mycat
一.mycat应用场景
-
单纯的读写分离,此时配置最为简单,支持读写分离,主从切换
-
分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片
-
多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化报表系统,借助于Mycat的分表能力,处理大规模报表的统计
-
二.mycat 可以简单概括为
-
一个彻底开源的,面向企业应用开发的大数据库集群
-
支持事务、ACID、可以替代MySQL的加强版数据库
-
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
-
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
-
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
-
一个新颖的数据库中间件产品
三.mycat部署
1.mycat安装目录结构说明
-
bin :mycat命令,启动、重启、停止等运行目录
-
catlet: catlet为Mycat的一个扩展功能
-
conf :mycat 配置信息,重点关注
-
lib:mycat引用的jar包,Mycat是java开发的
-
logs :日志文件,包括Mycat启动的日志和运行的日志
-
version.txt :mycat版本说明
Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:
-
server.xml :Mycat软件本身相关的配置文件,设置账号、参数等
-
schema.xml:Mycat对应的物理数据库和数据库表的配置,读写分离、高可用、分布式策略定制、节点控制
-
rule.xml:Mycat分片(分库分表)规则配置文件,记录分片规则列表、使用方法等
Mycat的日志文件都在logs目录里面
-
wrapper.log :mycat启动日志
-
mycat.log :mycat详细工作日志
mycat服务器上不能装mysql(或关闭mysql)
192.168.100.146 | |
192.168.100.150 | |
mycat服务器 | 192.168.100.254 |
client |
#每台服务器上都初始化,关闭防火墙 systemctl stop --now firewalld systemctl disable firewalld setenforce 0
#主mysql服务器配置(192.168.100.146)
vim /etc/my.cnf #修改文件 [mysqld] server_id=146 log-bin=/data/mysql-bin
mkdir /data/ -p chown mysql.mysql /data/ -R systemctl restart mysqld select @@server_id; #可以查看serverid 默认都是1 show master status; #查看二进制日志位置
grant replication slave on *.* to hx@'192.168.100.%' identified by '123'; #建立复制用户 show processlist; #查看线程
#从mysql服务器配置(192.168.100.150)
vim /etc/my.cnf [mysqld] server_id=150 log-bin=/data/mysql-bin relay-log=relay-log-bin relay-log-index=slave-relay-bin.index
mkdir /data/ -p #建立文件夹 chown mysql.mysql /data/ -R #注意修改权限 systemctl restart mysqld
下面修改配置 命令较长可以使用帮助 help change master to CHANGE MASTER TO MASTER_HOST='192.168.100.146', MASTER_USER='hx', MASTER_PASSWORD='123', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=448;
show slave status\G;
#查看设置的状态
Seconds_Behind_Master: NULL #目前数据差
start slave;
#开启线程,开启主从复制
create database db1;
#在主节点上建立数据测试
(1)主机上安装java(mycat基于java)
#yum安装java yum install java -y #确认安装成功 java -version
(2)切换至opt目录,下载mycat安装包(二进制包) [root@localhost ~]#cd /opt (3)创建/apps文件夹,并解压mycat包至/apps下 mkdir /apps tar zxvf /opt/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps/
(4)设置变量环境 echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.shsource /etc/profile.d/mycat.sh
(5)启动mycat,查看日志文件,最后可以看到启动成功 mycat start
tail -f /apps/mycat/logs/wrapper.log #启动成功日志末尾会出现successfully
(6)客户端连接数据库 #这里密码初始为123456 需要加端口 mysql -uroot -p123456 -h 192.168.100.146 -P8066
[root@localhost ~]#vim /apps/mycat/conf/server.xml #去掉44行行注释,对应的在51行行末注释,删除50行行末注释,5 * 60 * 1000L; //连接空> 闲检查 #修改45行端口号为3306 45 <property name="serverPort">3306</property> #配置Mycat的连接信息(账号密码),在110 和111行, 可以修改,这边不修改了
vim /apps/mycat/conf/schema.xml #删除所有内容,重新写入以下 <?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="192.168.100.146:3306" user="root" password="123"> <readHost host="host2" url="192.168.100.150:3306" user="root" password="123"/> </writeHost> </dataHost> </mycat:schema>
mysql -uroot -p123 #授权 GRANT ALL ON *.* TO 'root'@'192.168.100.%' IDENTIFIED BY '123'; #查看创建成功 use mysql; select user,host from user;
(1)在mycat服务器上,重启mycat服务,查看启动日志,文末出现successfully mycat restart tail -f /apps/mycat/logs/wrapper.log
(2)查看3306端口,可以监听到主从服务器(192.168.100.146、192.168.100.150) [root@localhost ~]# ss -antp|grep 3306
(3)在客户机上登录mycat,这时可以不加端口直接进入数据库了 mysql -uroot -p123456 -h 192.168.100.254 #看是否能查到表