搭建开源数据库中间件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中间件不适用本项目,弃用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/337807.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于OpenSSL的SSL/TLS加密套件全解析

概述 SSL/TLS握手时,客户端与服务端协商加密套件是很重要的一个步骤,协商出加密套件后才能继续完成后续的握手和加密通信。而现在SSL/TLS协议通信的实现,基本都是通过OpenSSL开源库,本文章就主要介绍下加密套件的含义以及如何在O…

通信入门系列——连续卷积定理、循环卷积、离散卷积定理

本节目录 一、连续卷积定理 1、时域卷积定理 2、频域卷积定理 二、循环卷积 三、离散卷积定理本节内容 一、连续卷积定理 卷积定理在信号分析中占有重要的地位,包括时域卷积定理和频域卷积定理。在信号分析领域,通常采用基于卷积定理的时频域分析&#…

vectorCast——CBA功能实现代码手动覆盖

选择被测文件,点击右键,选择add coverage analysis.选择添加覆盖分析后,会自动打开CBA。此时就可以在代码里选择没有覆盖的代码,勾选后填写未覆盖分析并保存,就可以实现代码覆盖了。查看覆盖率报告。 手动覆盖代码完成…

结构体内存对齐(面试重点)

结构体内存对齐 1. 结构体类型的声明1.1 结构体的概念1.1.1 结构的声明1.1.2 结构体变量的创建和初始化 1.2 结构的特殊声明1.3 结构的自引用 2. 结构体内存对齐2.1 对齐规则2.1.1 练习1:2.1.2 练习2:2.1.3 练习3:2.1.4 练习4: 2.2 offsetof宏的使用2.3 为什么存在内存对齐?2.…

Vue2的双向数据绑定

Vue2的双向数据绑定 Observer:观察者,这里的主要工作是递归地监听对象上的所有属性,在属性值改变的时候,触发相应的watcher。 Watcher:订阅者,当监听的数据值修改时,执行响应的回调函数&#x…

基于Springboot的民宿在线预定平台(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的民宿在线预定平台(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring…

通过完善价值观评价,建立企业多维度评价体系

一、背景A公司是一家互联网公司,主要负责技术开发、软件应用方面的工作,致力于长期的软件研发、服务器开发、游戏端开发等,依托于专业技术实力和长期的实践积累,公司不断整合各类资源、深入开发技术,规模不断扩大&…

详解Redisson

第1章:Redisson简介 大家好,我是小黑,咱们今天来聊聊Redisson,Redisson不只是简单地对Redis进行了封装,它还提供了一系列高级的分布式Java数据结构,像是分布式锁、原子长整型这种。 首先,Redi…

02_Collection

文章目录 集合Java的集合类 Collectioniterator方法 集合 在Java中,指的就是存放数据的容器,是一个载体,可以一次容纳多个对象。 解决Bug的两种方法: 打印 System.out.println();log.info(); debug 检查数据 Java的集合类 Co…

项目管理十大知识领域之项目干系人管理

一、项目干系人管理的概念解析 项目干系人管理是指在项目执行过程中,对项目相关方的需求进行识别、分析和管理的过程。项目干系人管理的核心在于有效地沟通、协调和满足各方的需求,以确保项目能够顺利实施并达到预期的成果。在现代项目管理实践中&#…

conda国内加速

1、配置国内源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 2、显示源地址 conda config --set show_channel_urls yes

Python实现GEE嵌套协方差结构仿真模型(GEE算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义估计方程(Generalized Estimating Equations, GEE)是一种用于分析具有重复…

CC工具箱使用指南:【按条件选择排序】

一、简介 此工具来自一个群友的需求,做完想想可能会有同样需求的人用得到,就稍改了一下做成公共版本。 具体需求是这样的: 1、按条件选择对部分图斑进行排序,比如说在所有地类中,只想对地类名称为【林地】的图斑进行…

【Elasticsearch】索引恢复(recovery)流程梳理之副本分片数据恢复

replica shard重启具体流程 replica shard node (generic threadpool) 也是因为应用新的集群状态触发recovery,进入index阶段进入translog 阶段。先尝试重放本地的translog到global checkpoint向primary shard发起start recovery的请求&…

C++参悟:正则表达式库regex

正则表达式库regex 一、概述二、快速上手Demo1. 查找字符串2. 匹配字符串3. 替换字符串 三、类关系梳理1. 主类1. basic_regex 2. 算法1. regex_match2. regex_search3. regex_replace 3. 迭代器4. 异常5. 特征6. 常量1. syntax_option_type2. match_flag_type3. error_type 一…

【Linux】第三十站:进程间通信

文章目录 一、是什么二、为什么三、怎么办四、管道1.什么是管道2.管道的原理3.接口4.编码实现5.管道的特征6.管道的四种情况 一、是什么 两个或者多个进程实现数据层面的交互 因为进程独立性的存在,导致进程通信的成本比较高 通信是有成本的,体现在要打破…

集美大学“第15届蓝桥杯大赛(软件类)“校内选拔赛 D矩阵选数

经典的状态压缩DP int dp[15][(1<<14)10]; int a[15][15]; void solve() {//dp[i][st]考虑到了第i行 并且当前考虑完第i行以后的选择状态是st的所有方案中的最大值for(int i1;i<13;i)for(int j1;j<13;j)cin>>a[i][j];for(int i1;i<13;i){for(int j0;j<…

conda修改默认环境安装位置

conda修改默认环境安装位置 文章目录 conda修改默认环境安装位置查看conda配置信息创建.condarc&#xff08;conda runtime controlling)配置文件没有.condarc怎么办 即使创建正确放置了.condarc创建环境时还是默认指定C盘目录写权限目录修改权限 查看conda配置信息 conda con…

Flutter 页面嵌入 Android原生 View

前言 文章主要讲解Flutter页面如何使用Android原生View&#xff0c;但用到了Flutter 和 Android原生 相互通信知识&#xff0c;建议先看完这篇讲解通信的文章 Flutter 与 Android原生 相互通信&#xff1a;BasicMessageChannel、MethodChannel、EventChannel-CSDN博客 数据观…

1027 打印沙漏 (20)

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;符号数先从大到小顺序递…