mycat2官网:MyCat2
前言:mycat2下载地址无法访问,不知道是不是被DNS污染了,还是需要搭梯子访问,所以我只能找到1.21的版本进行安装。搭建mycat2的前提是搭建数据库主从复制。
架构:双主双从
配置:3台服务器,4台数据库;其中2台服务器为数据库各装主从配置,1台服务器为数据库中间件。
版本信息:mycat1.21,mysql8.0.16
下载地址:
安装程序包:http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
Jar包:http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar
一、配置双主双从数据库
1、使用docker创建mysql数据库
安装mysql,安装4台数据库,名称和端口要区分开:
docker run -d --restart=always --name mysql-master -p 3306:3306 -v /home/apps/mysql-master/conf:/etc/mysql/conf.d -v /home/apps/mysql-master/data:/var/lib/mysql -v /etc/localtime:/etc/localtime:ro --security-opt seccomp=unconfined -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.16 --lower_case_table_names=1
2、配置mysql数据库:需要注意的是服务器id是唯一的,第一台可以设置5,第二台6,以此类推。
创建配置文件:vim /home/apps/mysql-master/conf/my.cnf
[mysqld]
# 服务器唯一id,默认值1
server-id=6
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
# log-bin=binlog
# 设置需要复制的数据库,默认复制全部数据库
#binlog-do-db=mytestdb
# 设置不需要复制的数据库
binlog-ignore-db=mysql
binlog-ignore-db=infomation_schema
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
# 跳过缓存,解决连接数据库缓慢
skip-host-cache
skip-name-resolve
在主从配置完成前,请不要操作数据库写入,否则日志会更新,此时同步数据会不全,当然也可以用工具进行同步。
3、配置主从:
先配置master1和slave1之间的主从同步。在master1中查看日志名和postition
在slave1中修改好master1的ip、用户名、密码、端口等,分别执行以下语句,配置后开启同步,查看显示同步状态。
-- 在主机master1中查询状态
SHOW MASTER STATUS;
slave1执行:
-- 配置主从同步
CHANGE MASTER TO MASTER_HOST='192.168.16.71', MASTER_USER='root',MASTER_PASSWORD='数据库密码', MASTER_PORT=3306,MASTER_LOG_FILE='binlog.000005',MASTER_LOG_POS=155;
-- 开启主从同步
START SLAVE;
-- 显示同步状态
SHOW SLAVE STATUS
-- 停止主从同步
stop slave;
-- 重置同步配置,在从机上执行。功能说明:用于删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件。
reset slave all;
配置完成后查看同步状态,IO和SQL状态均为YES,表示同步成功。显示为NO,表示失败,下方有失败原因。
4、配置主-主之间的同步
其实两台主机之间的同步,和主从同步配置一样,把master1当做master2的从机,把master2当做master1的从机。
例如:在master1中配置:将ip换成master2的ip信息,相当于master2是master1的从机。以此配置master2。
master1执行:
-- 配置主从同步
CHANGE MASTER TO MASTER_HOST='192.168.16.72', MASTER_USER='root',MASTER_PASSWORD='数据库密码', MASTER_PORT=3306,MASTER_LOG_FILE='binlog.000005',MASTER_LOG_POS=155;
-- 开启主从同步
START SLAVE;
-- 显示同步状态
SHOW SLAVE STATUS
-- 停止主从同步
stop slave;
-- 重置同步配置,在从机上执行。功能说明:用于删除SLAVE数据库的relaylog日志文件,并重新启用新的relaylog文件。
reset slave all;
当所有主从配置完成后,数据库的架构就可以了。
二、配置mycat2
参考文档:Mycat2安装配置(窗外流星) · 语雀
官网:http://www.mycat.org.cn/
资源地址:http://dl.mycat.org.cn/2.0/
安装程序包:http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
Jar包:http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar
下载安装程序包后解压,把jar包放到lib文件夹中,然后上传至中间件服务器/usr/local/目录中。mycat2依赖组件有:mysql8数据库,java8
1、安装mysql数据库
在数据库中间服务器中,需要安装mysql数据库当做逻辑库
配置yum源:
下载链接:https://dev.mysql.com/downloads/repo/yum/
# 下载mysql8 yum源
wget https://repo.mysql.com//mysql80-community-release-el8-9.noarch.rpm
# 安装mysql8 yum源
rpm -ivh mysql80-community-release-el8-9.noarch.rpm
# 安装mysql8社区版
yum -y install mysql-community-server
# 启动mysql并加入开机自启
systemctl enable mysqld --now
tips:
# 找到mysql初始密码grep "password" /var/log/mysqld.log# 修改mysql密码,密码要强密码,不然会提示不符合规则
ALTER USER 'root'@'%' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER;mysql8.0.35授权远程登录
use mysql;
update user set user.Host='%'where user.User='root';
flush privileges;
2、安装java8
参考资料:Jenkins安装多个jdk版本,并在项目中选择对应jdk版本_jenkins指定编译项目的jdk版本-CSDN博客
安装好后,解压到/usr/local,并配置vim /etc/profile,在最后加上java环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_291
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
验证:java -version
3、配置mycat2
配置逻辑梳理:
a、先做基本默认结构,连通mycat2的8066端口,可以访问成功;
b、配置schemas逻辑库;
c、配置clusters集群;
d、配置datasources数据源。
mycat2命令:
后台启动MyCat:./mycat start
查看启动状态:./mycat status
停止:./mycat stop
重启:./mycat restart
前台启动并在控制台打印日志(ctrl+c停止):./mycat console
目录结构如下:
1).配置数据源datasources
cd /usr/local/mycat/conf/datasources
vim prototypeDs.datasource.json
然后进入bin目录,启动mycat2,./mycat console
本地网络主机使用数据库连接软件,如navicat,地址是中间件服务器地址,端口为8066,连接成功即可创建成功。
2).创建逻辑库schemas
连接到8066端口mysql数据库,创建项目所需要的数据库,这个是逻辑库的名称,创建的名称和实际数据库名称一样即可。其他条件不用加,例如特定字符集。
CREATE DATABASE database_name;
在此路径下schemas,就可以看到以数据库名自动建立的逻辑库json文件。
编辑新增的逻辑库json文件:
新增:"targetName":"wms",
这是集群名称,后面会和cluster对应,注意这是json文件,增加一行后面要加逗号,
3).创建clusters集群
回到conf文件目录,进入clusters文件夹。复制默认集群配置文件prototype.cluster.json为新名称的集群
cp prototype.cluster.json wms.cluster.json
编辑文件wms.cluster.json,其中masters和replicas是配置主从数据库服务器的,名称和后续数据源配置统一。注意故障自动切换需要搭配timer时间配置,否则无效。
{
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
"master1",
"master2"
],
"maxCon":200,
"name":"wms",
"readBalanceType":"BALANCE_ALL",
"switchType":"SWITCH",
"replicas":[
"master2",
"slave1",
"slave2"
],
"timer":{
"initialDelay": 30,
"period":5,
"timeUnit":"SECONDS"
}
}
4).配置datasources数据源
进入datasources目录,复制默认的prototypeDs.datasource.json文件,分别为主从数据库,以此文件名为master1,master2,slave1,slave2开头。
依次编辑数据源文件:
以master1为例:vim master1.datasource.json
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"master1",
"password":"数据库密码",
"type":"JDBC",
"url":"jdbc:mysql://192.168.12.12:3306/abc_wms?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
以slave1为例:vim slave1.datasource.json
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
"name":"slave1",
"password":"数据库密码",
"type":"JDBC",
"url":"jdbc:mysql://192.168.12.14:3306/abc_wms?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
"user":"root",
"weight":0
}
5).启动mycat2
mycat2命令:
后台启动MyCat:./mycat start
查看启动状态:./mycat status
停止:./mycat stop
重启:./mycat restart
前台启动并在控制台打印日志(ctrl+c停止):./mycat console
可以先用./mycat console,查看是否有报错信息,后续正式用后台启动mycat。
三、使用mycat2
项目中配置信息,修改为mycat2的服务器地址,用户名和密码,即可使用mycat2,会根据配置的信息自动切换查询和新增的服务器。
以spring-boot的java项目为例,在这里修改为mycat2的连接信息。
遇到的问题:
本人才疏学浅,没有找到这个问题如何解决,因为此问题,项目可视化大屏数据无法展示,不清楚是什么问题导致的也没有解决方案,因为直接上了正式环境,所以有点影响,结果mycat中间件不适用本项目,弃用了。