MyCAT完整实验报告
MyCAT完整实验报告
前言
刚刚看了一下前面的那篇MyCAT的文章 感觉有一些问题 所以拿出一篇文章再说一下 单独构建了完整的实验环境 这样会全面一点
安装MyCAT
#跳过
主从配置
#不多追溯 因为我们选择的主从 也可以做双主机 但我们后边再说
环境搭建
一、环境规划
服务器角色 | IP 地址 | 部署服务 | 说明 |
---|---|---|---|
server_1 | 192.168.3.168 | MySQL + MyCAT | MyCAT 中间件节点 |
server_2(主库) | 192.168.3.135 | MySQL | 主库(MASTER) |
server_3(从库) | 192.168.3.159 | MySQL | 从库(SLAVE) |
(用于下一个实验 目前无需在意) 备用主库 | 192.168.3.160 | MySQL | 双主架构备用主库 |
修改配置文件
vim m1.datasource.json #PS:文件名是 *****.datasource.json
{"dbType":"mysql","idleTimeout":60000,"initSqls":[],"initSqlsGetConnection":true,"instanceType":"READ_WRITE","maxCon":1000,"maxConnectTimeout":3000,"maxRetryCount":5,"minCon":1,"name":"m1","password":"123","queryTimeout":0,"type":"JDBC","url":"jdbc:mysql://192.168.3.135:3306?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true","user":"aa","weight":0
}
----------------------------------------------------
vim m2.datasource.json
{"dbType":"mysql","idleTimeout":60000,"initSqls":[],"initSqlsGetConnection":true,"instanceType":"READ_WRITE","maxCon":1000,"maxConnectTimeout":3000,"maxRetryCount":5,"minCon":1,"name":"m2","password":"123","queryTimeout":0,"type":"JDBC","url":"jdbc:mysql://192.168.3.160:3306?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true","user":"bb","weight":0
}#PS:
#1> MyCat 2 要求每个数据源必须单独放在一个 JSON 文件中,一个 JSON 文件只能定义一个数据源,不能在一个文件中同时定义多个数据源(如 m1 和 m2)。
#2> MyCat 2 加载数据源时,会扫描 conf/datasources 目录下的所有 JSON 文件,每个文件被视为一个独立的数据源配置。
#3> 如果在一个文件中定义多个数据源(即使格式正确),MyCat 会解析失败,导致启动报错。#PS:以下为命令配置/*+ mycat:createDataSource
{"dbType": "mysql","idleTimeout": 60000,"initSqls": [],"initSqlsGetConnection": true,"instanceType": "READ_WRITE","maxCon": 1000,"maxConnectTimeout": 3000,"maxRetryCount": 5,"minCon": 1,"name": "m1","password": "123","type": "JDBC","url": "jdbc:mysql://192.168.3.135:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8","user": "root","weight": 0
}
*/-- 更多操作添加读的数据源/*+ mycat:createDataSource
{"dbType": "mysql","idleTimeout": 60000,"initSqls": [],"initSqlsGetConnection": true,"instanceType": "READ","maxCon": 1000,"maxConnectTimeout": 3000,"maxRetryCount": 5,"minCon": 1,"name": "m2","password": "123","type": "JDBC","url": "jdbc:mysql://192.168.3.159:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8","user": "root","weight": 0
}
*/
集群配置(conf/clusters/prototype.cluster.json)
vim ../clusters/prototype.cluster.json
{"clusterType":"MASTER_SLAVE","heartbeat":{"heartbeatTimeout":1000,"maxRetryCount":0,"minSwitchTimeInterval":300,"showLog":true,"slaveThreshold":0.0},"masters":["m1"],"maxCon":2000,"name":"prototype","readBalanceType":"BALANCE_ALL","replicas":["m1"],"switchType":"SWITCH"
}#PS:双主机
{"clusterType":"MASTER_MASTER", // 双主架构,部分版本也支持用 MASTER_SLAVE(但需将双主都放 masters)"heartbeat":{"heartbeatTimeout":1000,"maxRetry":3,"minSwitchTimeInterval":300,"slaveThreshold":0},"masters":["m1", // 主库1(读写)"m1s1" // 主库2(读写,原从库升级为双主)],"maxCon":2000,"name":"prototype","readBalanceType":"BALANCE_ALL", // 读请求在两个主库间均衡分配"switchType":"SWITCH", // 支持故障切换"weight":{ // 可选:给两个主库配置权重,控制请求分配比例"m1":1,"m1s1":1}
}
1. 主从集群构建与高可用基础
- 定义主从角色 :明确集群中
m1
为 主库(Master) 、m2
为 从库(Replica/Slave) ,MyCat 会基于此角色维护主从关系。 - 主从心跳检测:通过配置的
heartbeat
机制(超时 1000ms、重试 3 次、最小切换间隔 300ms),实时检测主库m1
和从库m2
的存活状态,为后续故障切换打基础。
2. 读写分离(核心功能)
- 读请求负载均衡:
readBalanceType: "BALANCE_ALL"
表示 所有从库(此处为 m1s1)都会参与读请求分发,MyCat 会将查询(SELECT)等读操作自动路由到从库,避免主库读压力过大;若从库故障,读请求会自动调整(如 fallback 到主库,具体依赖额外配置)。 - 写请求路由到主库:所有写操作(INSERT/UPDATE/DELETE)会被 MyCat 强制路由到主库
m1
,确保主库数据是最新的,再通过 MySQL 自身的主从同步(如 binlog 复制)将数据同步到从库m2
,保证主从数据一致性。
测试
重启MyCAT
cd /usr/local/mycat/bin
./mycat restart
netstat -anput | grep 8066
tcp6 0 0 :::8066 :::* LISTEN 8834/java
mysql -u root -p123456 -h 127.0.0.1 -P 8066
创建测试库和表
create database CATTEST; --创CATTEST库
mysql>
mysql> use CATTEST;
Database changed
mysql> create table test(id int);
Query OK, 0 rows affected (0.38 sec)mysql> insert into test valuse(1);
ERROR 1064 (HY000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'valuse (valuse)' at line 1
mysql> insert into test values(1);
Query OK, 1 row affected (0.01 sec)mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| CATTEST |
| information_schema |
| mycat |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
总结
弥补了上一期的MyCAT的不完整 所以 这次 做了了一个相对来说完整的 包括怎么配置等等 其实还想写分库分表的 但理了一下思路 好像在这篇文章去说的话 就会很多了 所以 下篇文章去完整去说
好了 更新的评论越来越慢 但也没办法 博主尽量像写的详细易懂一点 OK 希望大家生活是幸福的 知道自己为了什么努力 下期再见!!!