Mycat中间件

一、案例目标

(1)了解Mycat提供的读写分离功能。

(2)了解MySQL数据库的主从架构。

(3)构建以Mycat为中间件的读写分离数据库集群。

二、案例分析

1.规划节点

使用Mycat作为数据库中间件服务构建读写分离的数据库集群。

IP

主机名

节点

192.168.200.70

mycat

Mycat中间件服务节点

192.168.200.80

db1

MariaDB数据库集群主节点

192.168.200.90

db2

MariaDB数据库集群从节点

2.基础准备

用CentOS 7.2系统,flavor使用2vCPU/4G内存/50G硬盘,创建3台虚拟机进行实验。

其中2台虚拟机db1和db2部署MariaDB数据库服务,搭建主从数据库集群;一台作为主节点,负责写入数据库信息;另一台作为从节点,负责读取数据库信息。

使用一台虚拟机部署Mycat数据库中间件服务,将用户提交的读写操作识别分发给相应的数据库节点。这样将用户的访问操作、数据库的读与写操作分给3台主机,只有数据库集群的主节点接收增、删、改SQL语句,从节点接收查询语句,分担了主节点的查询压力。

Yum源使用提供的gpmall-repo文件夹作为本地源,Mycat组件使用提供的Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz压缩包安装。

三、案例实施

1.基础环境配置

(1)修改主机名

使用hostnamectl命令修改3台主机的主机名。

Mycat节点修改主机名命令:

[root@localhost ~]# hostnamectl set-hostname mycat

[root@localhost ~]# bash

db1节点修改主机名命令:

[root@localhost ~]# hostnamectl set-hostname db1

[root@localhost ~]# bash

db2节点修改主机名命令:

[root@localhost ~]# hostnamectl set-hostname db2

[root@localhost ~]# bash

(2)编辑hosts文件

3台集群虚拟机的/etc/hosts文件配置部分:(三台都需要

[root@mycat ~]# vi /etc/hosts

(3)配置yum安装源

数据库集群需要安装MariaDB数据库服务,需要给集群虚拟机配置Yum安装源文件,使用提供的gpmall-repo文件上传至3个虚拟机的/opt目录下,设置本地Yum源。命令如下:(三台都需要配yum

[root@mycat ~]# mkdir /opt/centos
[root@mycat ~]# mount /dev/cdrom /opt/centos

[root@mycat ~]# mv /etc/yum.repos.d/* /media
[root@mycat ~]# vi /etc/yum.repos.d/local.repo

清理yum缓存:

[root@mycat ~]# yum clean all && yum repolist

(4)安装JDK环境

部署Mycat中间件服务需要先部署JDK 1.7或以上版本的JDK软件环境,这里部署JDK 1.8版本。

        Mycat节点安装Java环境:

[root@mycat ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

2.部署MariaDB主从数据库集群服务

(1)安装MariaDB服务

通过YUM命令在db1和db2虚拟机节点上安装MariaDB服务,命令如下。

# yum install -y mariadb mariadb-server

2个节点启动MariaDB服务,并设置MariaDB服务为开机自启。

# systemctl start mariadb

# systemctl enable mariadb

(2)初始化MariaDB数据库

在db1和db2虚拟机节点上初始化MariaDB数据库,并设置MariaDB数据库root访问用户的密码为123456。

#mysql_secure_installation

(3)配置数据库集群主节点

编辑主节点db1虚拟机的数据库配置文件my.cnf,在配置文件my.cnf中增添下面的内容。

编辑完成配置文件my.cnf后,重启MariaDB服务。

[root@db1 ~]# systemctl restart mariadb

(4)开放主节点的数据库权限

在主节点db1虚拟机上使用mysql命令登录MariaDB数据库,授权在任何客户端机器上可以以root用户登录到数据库。

[root@db1 ~]# mysql -uroot -p123456

MariaDB [(none)]> grant all privileges  on *.* to root@'%' identified by "123456";

在主节点db1数据库上创建一个user用户让从节点db2连接,并赋予从节点同步主节点数据库的权限,命令如下。

MariaDB [(none)]> grant replication slave on *.* to 'user'@'db2' identified by '123456';

(5)配置从节点db2同步主节点db1

在从节点db2虚拟机上使用mysql命令登录MariaDB数据库,配置从节点连接主节点的连接信息。master_host为主节点主机名db1,master_user为在步骤(4)中创建的用户user,命令如下。

[root@db2 ~]# mysql -uroot -p123456

MariaDB [(none)]>  change master to master_host='db1',master_user='user',master_password='123456';

关闭防火墙,避免影响主从连接不成功。命令如下:(两台虚拟机都得操作

配置完毕主从数据库之间的连接信息之后,开启从节点服务。使用show slave status\G; 命令并查看从节点服务状态,如果Slave_IO_Running和Slave_SQL_Running的状态都为YES,则从节点服务开启成功。

MariaDB [(none)]> start slave;

MariaDB [(none)]> show slave status\G;

(6)验证主从数据库的同步功能

先在主节点db1的数据库中创建库test,并在库test中创建表company,插入表数据。创建完成后,查看表company数据,如下所示。

MariaDB [(none)]> create database test;

MariaDB [(none)]> use test

MariaDB [test]> create table company(id int not null primary key,name varchar(50),addr varchar(255));

MariaDB [test]> insert into company values(1,"facebook","usa");

这时从节点db2的数据库就会同步主节点数据库创建的test库,可以在从节点查询test数据库与表company,如果可以查询到信息,就能验证主从数据库集群功能在正常运行。查询结果如下所示。

MariaDB [(none)]> show databases;

MariaDB [(none)]> select * from test.company;

3.部署Mycat读写分离中间件服务

(1)安装Mycat服务

将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下,并将软件包解压到/use/local目录中。赋予解压后的Mycat目录权限。

[root@mycat ~]# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

[root@mycat ~]# chown -R 777 /usr/local/mycat/

在/etc/profile系统变量文件中添加Mycat服务的系统变量,并生效变量。

[root@mycat ~]# echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile

[root@mycat ~]# source /etc/profile

(2)编辑Mycat的逻辑库配置文件

配置Mycat服务读写分离的schema.xml配置文件在/usr/local/mycat/conf/目录下,可以在文件中定义一个逻辑库,使用户可以通过Mycat服务管理该逻辑库对应的MariaDB数据库。在这里定义一个逻辑库schema,name为USERDB;该逻辑库USERDB对应数据库database为test(在部署主从数据库时已安装);设置数据库写入节点为主节点db1;设置数据库读取节点为从节点db2。(可以直接删除原来schema.xml的内容,替换为如下。)IP改为自己实际IP

[root@mycat ~]# vi /usr/local/mycat/conf/schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="USERDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema> 
<dataNode name="dn1" dataHost="localhost1" database="test" />  
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1"  slaveThreshold="100">  <heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.200.80:3306" user="root" password="123456"><readHost host="hostS1" url="192.168.200.90:3306" user="root" password="123456" /></writeHost>
</dataHost>
</mycat:schema>

代码说明:

sqlMaxLimit:配置默认查询数量。

database:为真实数据库名。

balance="0":不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。

balance="1":全部的readHost与stand by writeHost参与select语句的负载均衡,简单来说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2、S1、S2都参与select语句的负载均衡。

balance="2":所有读操作都随机的在writeHost、readhost上分发。

balance="3":所有读请求随机地分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3版本没有。

writeType="0":所有写操作发送到配置的第一个writeHost,第一个挂了需要切换到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件dnindex.properties中。

writeType="1":所有写操作都随机的发送到配置的writeHost。

(3)修改配置文件权限

修改schema.xml的用户权限,命令如下:

[root@mycat ~]# chown root:root /usr/local/mycat/conf/schema.xml

(4)编辑mycat的访问用户

修改/usr/local/mycat/conf/目录下的server.xml文件,修改root用户的访问密码与数据库,密码设置为123456,访问Mycat的逻辑库为USERDB,命令如下。

[root@mycat ~]# vi /usr/local/mycat/conf/server.xml

在配置文件的最后部分,
<user name="root"><property name="password">123456</property><property name="schemas">USERDB</property>
然后删除如下几行:
<user name="user"><property name="password">user</property><property name="schemas">TESTDB</property><property name="readOnly">true</property>
</user>

保存并退出server.xml配置文件。

(5)启动Mycat服务

通过命令启动Mycat数据库中间件服务,启动后使用netstat -ntpl命令查看虚拟机端口开放情况,如果有开放8066和9066端口,则表示Mycat服务开启成功。

[root@mycat ~]# /bin/bash /usr/local/mycat/bin/mycat start

[root@mycat ~]# netstat -ntpl

4.验证数据库集群服务读写分离功能

(1)用Mycat服务查询数据库信息

先在Mycat虚拟机上使用Yum安装mariadb-client服务。

[root@mycat ~]# yum install -y MariaDB-client

在Mycat虚拟机上使用mysql命令查看Mycat服务的逻辑库USERDB,因为Mycat的逻辑库USERDB对应数据库test(在部署主从数据库时已安装),所以可以查看库中已经创建的表company。命令如下。

[root@mycat ~]# mysql -h127.0.0.1 -P8066 -uroot -p123456

MySQL [(none)]> show databases;

MySQL [(none)]> use USERDB

MySQL [USERDB]> show tables;

MySQL [USERDB]> select * from company;

(2)用Mycat服务添加表数据

在Mycat虚拟机上使用mysql命令对表company添加一条数据(2,"basketball","usa"),添加完毕后查看表信息。命令如下。

MySQL [USERDB]> insert into company values(2,"bastetball","usa");

MySQL [USERDB]> select * from company;

(3)验证Mycat服务对数据库读写操作分离

在Mycat虚拟机节点使用mysql命令,通过9066端口查询对数据库读写操作的分离信息。可以看到所有的写入操作WRITE_LOAD数都在db1主数据库节点上,所有的读取操作READ_LOAD数都在db2主数据库节点上。由此可见,数据库读写操作已经分离到db1和db2节点上了。命令如下。

[root@mycat ~]# mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show  @@datasource;'

至此,Mycat读写分离数据库案例完成。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

聚观早报 | 小米三折叠手机专利曝光;李斌谈合肥投资蔚来

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 9月20日消息 小米三折叠手机专利曝光 李斌谈合肥投资蔚来 索尼PS5 Pro包装亮相 新一代Spectacles AR眼镜发布 通…

媒体专访 | CertiK首席安全官李康教授:变化中的加密资产监管环境带来了新机遇

在2024韩国区块链周期间&#xff0c;CertiK首席安全官李康教授接受了韩国媒体E-Today的独家专访。采访中&#xff0c;李康教授探讨了加密资产监管环境的最新动态及其为行业带来的新机遇。同时&#xff0c;他也表达了对加密资产生态系统所面临的安全挑战的担忧&#xff0c;并强调…

无人机视角应急救援(人)数据集

无人机视角应急救援&#xff08;人&#xff09;&#xff0c;两个数据集 part1&#xff0c;使用DJI Phantom 4A拍摄&#xff0c;分辨率为19201080像素。山区场景&#xff0c;图像中人员姿势分为站立、坐着、躺着、行走、奔跑。共1981张图像6500个不同姿势的标记&#xff0c; par…

低代码平台后端搭建-阶段完结

前言 最近又要开始为跳槽做准备了&#xff0c;发现还是写博客学的效率高点&#xff0c;在总结其他技术栈之前准备先把这个专题小完结一波。在这一篇中我又试着添加了一些实际项目中可能会用到的功能点&#xff0c;用来验证这个平台的扩展性&#xff0c;以及总结一些学过的知识。…

Vue使用代理方式解决跨域问题

1、解决跨域问题 如果 Vue 前端应用请求后端 API 服务器&#xff0c;出现跨域问题&#xff08;CORS&#xff09;&#xff0c;如下图&#xff1a; 解决方法&#xff1a;在 Vue 项目中&#xff0c;打开 vue.config.js 配置文件&#xff0c;在配置文件中使用代理解决跨域问题。 …

腾讯云ssl证书到期,续期免费证书并部署

首先咱用的免费证书&#xff0c;现在最长90天有效期&#xff0c;今天又到期了&#xff0c;得及时续期避免关联资源访问受限。 我这个证书是关联了一个负载均衡和两个容器服务的&#xff08;如果您的应用是ngnix或其他的应用那和本文操作可能有点不一样&#xff09; 所以需要做…

SpringCloud (1) 服务拆解

1 服务拆解和治理 1.1 服务拆解 微服务的核心就是服务拆分,将传统的大项目拆分为多个微型服务(服务或微服务),实现服务之间"高内聚(微服务职责单一),低耦合(微服务功能相对独立)"的目的 (1) 水平(横向)拆分:先搭出拆分框架,比如【公共服务】(比如:common服务,client…

Redis作为单线程模型,为什么效率高、速度快呢?

前言&#xff1a; 效率高、速度快是相较于数据库来说的&#xff08;MySQL、Orcale、SQL server&#xff09; 文章目录 一、单线程模式的工作流程二、为什么快&#xff1f; 一、单线程模式的工作流程 这里我们所说的单线程是指&#xff1a;Redis只使用一个线程&#xff0c;来处…

从零到一:打造安全高效敦煌测评自养号体系

敦煌测评自养号是一种提升店铺销售和排名的有效策略&#xff0c;卖家可以自行注册并管理买家账号&#xff0c;通过模拟真实买家行为为自家店铺进行测评和补单。以下是一些关键技巧&#xff0c;帮助卖家快速提升销售和排名&#xff1a; 一、账号注册与养号 环境搭建&#xff1…

prober found high clock drift,Linux服务器时间不能自动同步,导致服务器时间漂移解决办法。

文章目录 一、场景二、问题三、解决办法&#xff08;一&#xff09;给服务器添加访问网络能力&#xff08;二&#xff09;手动同步1. 检查有没有安装ntp2. 没有安装ntp则离线安装ntp2.1 下载安装包2.2 安装2.3 启动 ntp 3. 设置内部时钟源3.1 编辑/etc/ntp.conf3.1 重启ntp服务…

【vmware】vmware中手动安装vmwaretools

问题: vmware中点击安装vmwaretools时出现如下&#xff1a; VMware Tools 不再随旧版客户机操作系统的 VMware Workstation 一起提供。 请从 https://packages-prod.broadcom.com/tools/frozen/windows/winPreVista.iso 下载&#xff0c;并参阅 https://knowledge.broadcom.co…

海外大带宽服务器连接失败怎么办?

在全球化日益加深的今天&#xff0c;海外大带宽服务器已成为企业拓展国际市场、提升业务效率的重要工具。然而&#xff0c;面对复杂多变的网络环境和技术挑战&#xff0c;服务器连接失败的问题时有发生&#xff0c;这不仅影响了企业的正常运营&#xff0c;还可能带来经济损失和…

VM虚拟机使用的镜像文件下载

文章目录 Windows系统进入微软官网下载工具以Windows10为例下载镜像文件 Windows系统 进入微软官网下载工具 微软中国官网&#xff1a;https://www.microsoft.com/zh-cn/ 以Windows10为例下载镜像文件 选择下载的路径 开始下载 安装windows10操作系统出现Time out问题及解决办…

WPF DataGrid 动态修改某一个单元格的样式

WPF DataGrid 动态修改某一个单元格的样式 <DataGrid Name"main_datagrid_display" Width"1267" Height"193" Grid.Column"1"ItemsSource"{Binding DataGridModels}"><DataGrid.Columns><!--ElementStyle 设…

得物自建 Redis 无人值守资源均衡调度设计与实现

目录&#xff1a; 一、为什么要做资源均衡调度 二、为什么要做自动化资源均衡调度 三、如何合理选择迁移节点 四、如何保障迁移过程中可靠性1. 添加从节点2. 检查同步数据正常3. 执行主从切换4. 检查主从切换正常5. 删除待迁移节点6. 消息通知 五、迁移任务管理展示 六、总结 …

酸枣病虫害智能化防控系统的探索与实践,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建枣类作物种植场景下酸枣病虫害智能检测识别系统

智慧农业&#xff0c;作为现代农业的高级形态&#xff0c;通过集成物联网、大数据、人工智能等先进技术&#xff0c;实现了农业生产过程的精准化、智能化管理。在酸枣等经济作物的种植过程中&#xff0c;病虫害的及时监测与防控直接关系到作物的产量与质量&#xff0c;进而影响…

LD3320语音识别模块的简单应用

文章目录 一、 前言二、硬件1.原理图2.产品参数 三、软件1.语音识别原理2.用户使用模式2.1 触发识别模式2.2 循环识别模式 3.语音识别程序3.1 并行方式读写3.2 初始化3.3 写入识别列表3.4 开始识别3.5 响应中断 4.烧写程序4.1 硬件连接4.2 打开STC-ISP软件4.3 按要求配置软件4.…

F28335中断系统

1 中断介绍 1.1 中断概念 1.2 TMS320F28335 中断概述

Python 中的 typing 模块常见用法

typing 模块是 Python 提供的一个标准库&#xff0c;主要用于为函数、变量和类定义类型提示&#xff08;Type Hints&#xff09;&#xff0c;从而提高代码的可读性和类型安全性。虽然 Python 是动态类型语言&#xff0c;但通过 typing 模块&#xff0c;开发者可以明确指定变量和…

【Git 操作】Git 的基本操作

文章目录 1. Git 的配置2. 工作区、暂存区、版本库 1. Git 的配置 &#x1f427;①首先要新建一个目录&#xff0c;该目录用于放项目代码&#xff0c;在该目录下执行git init命令&#xff0c;用于创建一个 Git的本地仓库。 .git ⽬录是 Git 来跟踪管理仓库的。&#x1f427;②…