MyCAT完整实验报告

MyCAT完整实验报告

前言

刚刚看了一下前面的那篇MyCAT的文章 感觉有一些问题 所以拿出一篇文章再说一下 单独构建了完整的实验环境 这样会全面一点

安装MyCAT

bash 复制代码
#跳过

主从配置

bash 复制代码
#不多追溯 因为我们选择的主从 也可以做双主机 但我们后边再说

环境搭建

一、环境规划

服务器角色 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 双主架构备用主库

修改配置文件

bash 复制代码
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)

bash 复制代码
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 

创建测试库和表

sql 复制代码
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> 
sql 复制代码
 mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| CATTEST            |
| information_schema |
| mycat              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

总结

弥补了上一期的MyCAT的不完整 所以 这次 做了了一个相对来说完整的 包括怎么配置等等 其实还想写分库分表的 但理了一下思路 好像在这篇文章去说的话 就会很多了 所以 下篇文章去完整去说

好了 更新的评论越来越慢 但也没办法 博主尽量像写的详细易懂一点 OK 希望大家生活是幸福的 知道自己为了什么努力 下期再见!!!

相关推荐
ByteX17 小时前
MySQL 联合索引创建效果评估
数据库·mysql
User_芊芊君子18 小时前
从 0 到 1 学 MySQL:索引原理、事务特性、视图用法与 JDBC 实操全解析
大数据·数据库·mysql
HalvmånEver19 小时前
MySQL事务(一)
linux·数据库·学习·mysql
会编程的土豆19 小时前
MySQL 多表查询
开发语言·数据库·python·mysql
四方云19 小时前
MySQL 迁移到 Apache Doris 生产实践:从评估到落地的完整指南
数据库·mysql·apache
lifewange20 小时前
afinfo 表设计
数据库·sql·mysql
字节高级特工21 小时前
MySQL数据库基础与实战指南
数据库·c++·人工智能·后端·mysql·adb
重生之小比特1 天前
【MySQL 数据库】数据类型
数据库·mysql
轻刀快马1 天前
穿透 MySQL 索引专栏 (二):【核心机制】为什么 SELECT * 是性能杀手?扒开“回表”与“联合索引”的底裤
数据库·mysql
NaMM CHIN1 天前
MySQL无法连接到本地localhost的解决办法2024.11.8
数据库·mysql·adb