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 ![](https://i-blog.csdnimg.cn/direct/9b54a71a32294f51928565b475ba2163.png) #### (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 ![](https://i-blog.csdnimg.cn/direct/9e5679cfd68544e985d4d92a3ab104e1.png) 清理yum缓存: \[root@mycat \~\]# yum clean all \&\& yum repolist ![](https://i-blog.csdnimg.cn/direct/dd187d39b0fc466ea971df42c2c427d0.png) #### (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 ![](https://i-blog.csdnimg.cn/direct/ab4a014a33e24296ac8dbddd5f8bc68a.png) ### ******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 ![](https://i-blog.csdnimg.cn/direct/a84ab76bdf994cc599a30080dba6d381.png) ![](https://i-blog.csdnimg.cn/direct/07a9f121a73649efb2f48a4832cc563f.png) #### (3)配置数据库集群主节点 编辑主节点db1虚拟机的数据库配置文件my.cnf,在配置文件my.cnf中增添下面的内容。 ![](https://i-blog.csdnimg.cn/direct/9b3db8110b704270bf3c1c05d519fede.png) 编辑完成配置文件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"; ![](https://i-blog.csdnimg.cn/direct/cb2450fd8e084b539e8144cc8773d651.png) 在主节点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'; ![](https://i-blog.csdnimg.cn/direct/f4adcf0783ff4ed7af52a375db19f728.png) 关闭防火墙,避免影响主从连接不成功。命令如下:(两台虚拟机都得操作) 配置完毕主从数据库之间的连接信息之后,开启从节点服务。使用show slave status\\G; 命令并查看从节点服务状态,如果Slave_IO_Running和Slave_SQL_Running的状态都为YES,则从节点服务开启成功。 MariaDB \[(none)\]\> start slave; MariaDB \[(none)\]\> show slave status\\G; ![](https://i-blog.csdnimg.cn/direct/992f7908ac434406956732d7e244ed68.png) #### (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"); ![](https://i-blog.csdnimg.cn/direct/0629271e5d154d8bbeb3a1a4d0e00c08.png) 这时从节点db2的数据库就会同步主节点数据库创建的test库,可以在从节点查询test数据库与表company,如果可以查询到信息,就能验证主从数据库集群功能在正常运行。查询结果如下所示。 MariaDB \[(none)\]\> show databases; MariaDB \[(none)\]\> select \* from test.company; ![](https://i-blog.csdnimg.cn/direct/1472c287e93c45638c44bfedb0a2aff1.png) ### ******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 select user() 代码说明: 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 在配置文件的最后部分, 123456 USERDB 然后删除如下几行: user TESTDB true 保存并退出server.xml配置文件。 #### (5)启动Mycat服务 通过命令启动Mycat数据库中间件服务,启动后使用netstat -ntpl命令查看虚拟机端口开放情况,如果有开放8066和9066端口,则表示Mycat服务开启成功。 \[root@mycat \~\]# /bin/bash /usr/local/mycat/bin/mycat start \[root@mycat \~\]# netstat -ntpl ![](https://i-blog.csdnimg.cn/direct/2be637655040427aa1e83a28dc5623f5.png) ### ******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; ![](https://i-blog.csdnimg.cn/direct/368a43c0a12845fcb81d9fa8610fa0fb.png) #### ![](https://i-blog.csdnimg.cn/direct/295e48d22436436dadac704982879878.png)(2)用Mycat服务添加表数据 在Mycat虚拟机上使用mysql命令对表company添加一条数据(2,"basketball","usa"),添加完毕后查看表信息。命令如下。 MySQL \[USERDB\]\> insert into company values(2,"bastetball","usa"); MySQL \[USERDB\]\> select \* from company; ![](https://i-blog.csdnimg.cn/direct/94b43075f5c84358b3fbf58115f05ce3.png) #### (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;' ![](https://i-blog.csdnimg.cn/direct/b1370fb5e2ed454694e3947692a2ab35.png) 至此,Mycat读写分离数据库案例完成。

相关推荐
Arbori_26215几秒前
获取oracle表大小
数据库·oracle
王强你强7 分钟前
MySQL 高级查询:JOIN、子查询、窗口函数
数据库·mysql
草巾冒小子8 分钟前
brew 安装mysql,启动,停止,重启
数据库·mysql
用户62799471826215 分钟前
南大通用GBase 8c分布式版本gha_ctl 命令-HI参数详解
数据库
斯汤雷24 分钟前
Matlab绘图案例,设置图片大小,坐标轴比例为黄金比
数据库·人工智能·算法·matlab·信息可视化
SQLplusDB31 分钟前
Oracle 23ai Vector Search 系列之3 集成嵌入生成模型(Embedding Model)到数据库示例,以及常见错误
数据库·oracle·embedding
喝醉酒的小白1 小时前
SQL Server 可用性组自动种子设定失败问题
数据库
chem41111 小时前
Conmon lisp Demo
服务器·数据库·lisp
m0_555762901 小时前
QT 动态布局实现(待完善)
服务器·数据库·qt
孪生质数-2 小时前
SQL server 2022和SSMS的使用案例1
网络·数据库·后端·科技·架构