搭建开源数据库中间件MyCat2-配置mysql数据库双主双从

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中间件不适用本项目,弃用了。

相关推荐
小小药2 分钟前
009-spring-bean的实例化流程
java·数据库·spring
DashVector25 分钟前
如何通过HTTP API插入或更新Doc
大数据·数据库·数据仓库·人工智能·http·数据库架构·向量检索
hac132228 分钟前
瀚高数据库
数据库
小小小妮子~1 小时前
深入理解 MySQL 架构
数据库·mysql·架构
man20171 小时前
【2024最新】基于Python+Mysql+django的水果销售系统Lw+PPT
数据库·mysql·django
度假的小鱼1 小时前
01 Oracle 基本操作
数据库·oracle
张声录11 小时前
【ETCD】【实操篇(十)】基于 ETCD 实现一个简单的服务注册及发现功能
数据库·etcd
张声录11 小时前
【ETCD】【实操篇(十八)】ETCD监控实战:提升系统健康与集群调试效率
数据库·chrome·etcd
SelectDB技术团队2 小时前
Apache Doris 创始人:何为“现代化”的数据仓库?
大数据·数据库·数据仓库·数据分析·doris
Suwg2092 小时前
《手写Mybatis渐进式源码实践》实践笔记(第七章 SQL执行器的创建和使用)
java·数据库·笔记·后端·sql·mybatis·模板方法模式