Mycat2实现读写分离安装部署

概述

Mycat是完全独立的社区,不依附于任何企业,遵循着完全开放、免费、开源的原则,相关特性请阅读官方文档。本文重点介绍Mycat2的安装及配置及与.Net Core后端的整合。该方法适合后端采用Db First的开发模式使用的,且项目开发阶段可采用直连Mysql开发,生产环境无需代码即可切换到Mycat

环境说明

IP服务操作系统备注
192.168.1.100Mycat2-1.22Centos7.9读写分离
192.168.1.101Mysql8.0.27Centos7.9主库
192.168.1.102Mysql8.0.27Centos7.9从库

读写分离的前提,需要Mysql已实现主从复制,关于Mysql主从复制的配置请阅读Mysql8.x主从复制离线部署

Mycat2安装配置

Mysql安装后涉及多项配置,以下只介绍关键的配置含义,其他配置含义请查阅官方配置指导

  1. Java环境

Mycat2需要JDK版本为1.8.0及以上

# 查看jdk版本
java -version
# 显示以下信息表示已安装,如未安装则执行下一步骤
openjdk version "1.8.0_352"
OpenJDK Runtime Environment (build 1.8.0_352-b08)
OpenJDK 64-Bit Server VM (build 25.352-b08, mixed mode)
# 安装openjdk,如果没有相应的镜像源,百度找下,也很简单
yum  install  java-1.8.0-openjdk && java-1.8.0-openjdk-devel
#配置JAVA环境变量
#查看JDK的安装路径
which java  					#显示:/usr/bin/java
ls -lrt /usr/bin/java 			#显示:/usr/bin/java -> /etc/alternatives/java
ls -lrt /etc/alternatives/java 	#显示:/etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/bin/java
#记住/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64,环境变量需要指定
#编辑环境变量
vim /etc/profile
# 在最后添加以下内容
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# 使环境变量生效
source /etc/profile 
  1. 下载Mycat2安装包

两个包的版本可以不一致,更新版本只需要升级依赖包即可
下载地址2022年12月23日亲测有效

# 定位到指定的下载目录
cd /data
# 下载依赖包
wget http://dl.mycat.io/2.0/1.22-release/mycat2-1.22-release-jar-with-dependencies-2022-10-13.jar
# 下载主程序包
wget http://dl.mycat.io/2.0/install-template/mycat2-install-template-1.21.zip
# 解压主程序包
unzip  mycat2-install-template-1.21.zip  #会生成一个mycat目录
# 将依赖包拷贝至 /data/mycat/lib下
cp mycat2-1.22-release-jar-with-dependencies-2022-10-13.jar /data/mycat/lib 
# 授予/data/mycat/bin 文件夹里边可执行权限:
chmod +x /data/mycata 
  1. 用户配置

设置Mycat登录的用户名密码,与Mysql无关

# 修改用户配置
vi /data/mycat/conf/users/root.user.json
# 完整内容如下
{
	"dialect":"mysql",
	"ip":null,
	"password":"123456",  //密码
	"transactionType":"proxy",
	"username":"root"	//用户名
}
  1. 主从配置
    安装程序在/data/mycat/conf/datasources/目录下默认生成了prototypeDs.datasource.json,以此为模板分别创建master.datasource.jsonslave.datasource.json
  • 复制生成配置文件
cd /data/mycat/conf/datasources/
cp prototypeDs.datasource.json master.datasource.json #主库配置
cp prototypeDs.datasource.json slave.datasource.json #从库配置
rm -rf prototypeDs.datasource.json #删除原型文件
  • 主库
vi master.datasource.json
> Mysql的连接参数最好是创建Mycat专用的用户名密码,这里演示直接用的root
#完整内容如下
{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	//数据库读写类型:READ、WRITE、READ_WRITE,主库访问为只写
	"instanceType":"WRITE",
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"master",
	//Mysal主库密码
	"password":"123456",
	"type":"JDBC",
	//Mysql主库连接参数
	"url":"jdbc:mysql://192.168.1.101:3308/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
	//Mysql主库用户名
	"user":"root",
	"weight":0
}
  • 从库

Mysql的连接参数最好是创建Mycat专用的用户名密码,这里演示直接用的root

vi master.datasource.json
> 
#完整内容如下
{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	//数据库读写类型:READ、WRITE、READ_WRITE,从库访问为只读
	"instanceType":"READ",
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"master",
	//Mysal从库密码
	"password":"123456",
	"type":"JDBC",
	//Mysql从库连接参数
	"url":"jdbc:mysql://192.168.1.102:3308/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
	//Mysql从库用户名
	"user":"root",
	"weight":0
}
  1. 开放端口启动服务

Mycat默认端口为8066

# 开发端口
firewall-cmd --permanent --zone=public --add-port=8066/tcp
firewall-cmd --reload
# 启动服务
cd  /data/mycat
./bin/mycat start
# 其他命令
./bin/mycat status # 查看状态
./bin/mycat stop # 停止
./bin/mycat pause # 暂停
./bin/mycat restart # 重启
./bin/mycat console # 前台运行
tail -f /home/papis/mycat2/mycat/logs/wrapper.log # 查看日志文件

至此读写分离配置已完成

测试读写分离

  1. 使用navicat登录mycat
  2. 再Mycat中创建test数据库,并在test数据库中创建一张person表,再查看master和slave数据库是否存在test数据库和person表,如果存在说明Mysql主从复制时OK的
// Mycat中Person表创建语句
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for Person
-- ----------------------------
DROP TABLE IF EXISTS `Person`;
CREATE TABLE `Person`  (
  `Id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '主键',
  `Name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '名称',
  `Age` int NOT NULL COMMENT '年龄',
  `Remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
  1. 添加一条带系统变量的数据hostname
  • Mycat上执行添加数据脚本
 //注意:person开头为大写
INSERT INTO person (Id,`Name`,Age,Remark) VALUES('56697c47-6666-4650-a5d5-5c0bffc49ff2','张三',18,@@hostname)

Mycat、Mysql-Master、Mysql-Slave,结果均如下图所示
* 主库

  • Mysql-Master上执行添加数据脚本
//注意:Person开头为大写
INSERT INTO Person (Id,`Name`,Age,Remark) VALUES('56697c47-6666-4650-a5d5-5c0bffc49ff4','李四',18,@@hostname)

Mycat、Mysql-Master、Mysql-Slave,结果均如下图所示
在这里插入图片描述

  • Mysql-Slave上执行添加数据脚本
//注意:Person开头为大写
INSERT INTO person (Id,`Name`,Age,Remark) VALUES('56697c47-6666-4650-a5d5-5c0bffc49ff5','王五',18,@@hostname)

Mycat结果如下图所示
在这里插入图片描述

Mysql-Master结果如下图所示
在这里插入图片描述
Mysql-Slave结果如下图所示
在这里插入图片描述
如上操作结果显示,则说明Mycat部署已实现读写分离操作。

问题

发现一个问题,Mycat无法区分大小写的问题,网上找到的答案都是将Mysql忽略大小写是可以解决的,但是如果想保留大小写,该如何解决,待后续完善…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值